Помогите с задачей №3: Повторить предыдущее, но для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущег

Не могу понять каким образом решать задачу №3 отсюда.

Повторить предыдущее, но для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше. например:

-1
20 больше -1
-5 меньше 2-
-6 меньше -5
и т.д.

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

Есть разные способы:

  1. можно сначала свформировать массив случайны хзначений и обойти его
  2. Можно в цикле используя две переменные получать значения очередной, сравнивать его с предыдущим значением, а потом запоминать значение "очередной" в предыдущем

_____________
матфак вгу и остальная классика =)

sid's picture

Можно один из примеров, так как нет понимания, каким образом я присваиваю(запоминаю) текущее значение, а затем сравниваю его??

melisa's picture

Внутри цикла сначала делаете операцию сравнения, а затем "переприсваиваете" занчения

if ($a < $b) {
    echo $a. " меньше " . $b. "<br>";
    $a = $b;
    $b = rand(-21,35);
}
sid's picture

Спасибо за разъяснение, но возможно я чего то не до понял, если делаю сначала операцию сравнение как показано выше,
то ничего не получается, а если делаю как показано ниже вроде работает, подскажите что я сделал не так?


<?php

$a = 0;
$b = 0;
$N = 10;

for($i = 0; $i < $N; $i++) {
    $a = $b;
    $b = rand(-21, 35);
    
    if($a < $b) {
       echo $a,  " меньше ",  $b, "<br>";
    }
	
    else {
          echo $a,  " больше ",  $b, "<br>";
    }
}

?>


Вот вывод этого скрипта:

0 меньше 34
34 больше -13
-13 меньше 13
13 больше 4
4 больше 0
0 больше -1
-1 меньше 26
26 больше 5
5 меньше 15
15 меньше 27

Первое выведенное число --- ноль --- не случайное. Оно задано в четвёртой строке:

$b = 0;

И если окажется, что значения \$a и \$b равны, то скрипт выдаст, что \$a больше \$b.

sid's picture

Если сделать так:



<?php
 
$a = 0;
$b = rand(-21, 35);
$N = 10;
 
for($i = 0; $i < $N; $i++) {
    $a = $b;
    $b = rand(-21, 35);
    
    if($a < $b) {
      echo $a,  " меньше ",  $b, "<br>";
    }
     
    elseif($a == $b) {
          continue;
    }
    
    else {
         echo $a,  " больше ",  $b, "<br>";
    }
}
 
?>



melisa's picture

Всё-таки блок

$a = $b;
$b = rand(-21, 35);

следует вставить после сравнений, т.к. получается, что первое присвоение

$a = 0;

бессмысленно: ещё до начала работы с $a, переменная переопределяется.

sid's picture

т.е должно выглядеть так:


 for($i = 0; $i < $N; $i++) {
     
    if($a < $b) {
      echo $a,  " меньше ",  $b, "<br>";
    }
      
    elseif($a == $b) {
          continue;
    }
     
    else {
         echo $a,  " больше ",  $b, "<br>";
    }
    
    $a = $b;
    $b = rand(-21, 35);
    
}
melisa's picture

Да, теперь осталось изменить первое значение $a на случайное.

Также обратите внимание на комментарий http://fkn.ktu10.com/?q=comment/1759#com...
Что делает Ваша программа, когда значения оказываются равными?

Если бы в пятой строке было

$N = 1;

то выполнилась бы ровно одна итерация цикла.
Если бы случилось так, что мы два раза получили бы одно и то же случайное число, выполняя

$b = rand(-21, 35);

в четвёртой и девятой строках (что маловероятно, конечно), то скрипт бы вообще ничего не вывел.

sid's picture

А какой смысл делать одну итерацию через цикл?

$N = 1;
vedro-compota's picture

А какой смысл делать одну итерацию через цикл?

В конечном итоге решение упаковывается в функцию (которая должна работать корректно при любых передаваемых значениях). А функции на вход можно передать и единицу.

У нас не так много учебных задач, а потому вполне можно поупражняться в доведнии решения до хорошего состояния, тем более что всё это тренирует внимательность)

_____________
матфак вгу и остальная классика =)

sid's picture

Теперь ясно спасибо.

vedro-compota's picture

цитату следует использовать, когда цитируете -- то есть повторяете чужую фразу, скажем:

Служив отлично благородно,
Долгами жил его отец,
Давал три бала ежегодно
И промотался наконец.

Иначе это сбивает с толку -- начинаешь искать место откуда взята цитата в данной ветке форума или вообще где-то из Сети)

_____________
матфак вгу и остальная классика =)

sid's picture

Спасибо! Пробуем.

sid's picture

Спасибо за все пояснения.


<?php
  
function sravnenie($N) 
{

$a = rand(-21, 35);
$b = rand(-21, 35);

for($i = 0; $i < $N; $i++) {
   
    if($a < $b) {
      echo $a,  " меньше ",  $b, "<br>";
    }
      
    elseif($a > $b) {
          echo $a,  " больше ",  $b, "<br>";
    }
     
    else {
         echo $a,  " равно ",  $b, "<br>";
    }
    
    $a = $b;
    $b = rand(-21, 35);
}
}

$N = 10;
sravnenie($N);

?>

vedro-compota's picture

в теле функции тоже нужен 1 таб.

_____________
матфак вгу и остальная классика =)

Можно сократить этот вариант на одну строчку.

<?php
   
function sravnenie($N) 
{
    $a = rand(-21, 35);
 
    for($i = 0; $i < $N; $i++) {
        
        $b = rand(-21, 35);
        
        if($a < $b) {
          echo $a,  " меньше ",  $b, "<br>\n";
        }

        elseif($a > $b) {
              echo $a,  " больше ",  $b, "<br>\n";
        }

        else {
             echo $a,  " равно ",  $b, "<br>\n";
        }
        
        $a = $b;
    }
}
 
$N = 10;
sravnenie($N);
 
?>
vedro-compota's picture

Последний раз эту задачу решали не слишком изящно, но вот так.

_____________
матфак вгу и остальная классика =)