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

Задача из этого списка.

<?php
/* Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше */
function outputSumRandomNumbers($numbers) {
	$numbers = 10; //Здесь вводим нужное количество чисел
	if($numbers < 1) {
		echo "Введите натуральное число, N > 0";
	}
	else {
		$num = rand(-21, 35);
		echo "$num<br>";
    }
    for($numbers; $numbers > 1; $numbers--) {
        $num1 = $num; //сохранение предыдущего числа из прошлого цикла
        $num = rand(-21, 35); //создание нового числа
        if($num > $num1) {
            echo "$num больше $num1<br>";
        }
        elseif($num < $num1) {
            echo "$num меньше $num1<br>";
        }
        else {
            echo "$num равно $num1<br>";
        }
    }
}
outputSumRandomNumbers($numbers);
?>

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

vedro-compota's picture

цитируйте задачу в комментарии целиком

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

Sver4ok's picture

Изменил название задачи в цитате.

melisa's picture

  1. При запуске скрипта первой строкой идёт уведомление о действиях с необъявленной переменной. Несмотря на то, что в данном случае скрипт смог продолжить работу, старайтесь избегать подобных приёмов, т.к. в других условиях это может породить более серьёзные ошибки
  2. Фактически выводится не N, а N+1 чисел.
Sver4ok's picture

При запуске скрипта первой строкой идёт уведомление о действиях с необъявленной переменной.

Объявил переменную, да, действительно так лучше.

Фактически выводится не N, а N+1 чисел.

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

<?php
/* Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше */
function outputSumRandomNumbers($numbers) {
	$numbers = 10; //Здесь вводим нужное количество чисел
	if($numbers < 1) {
		echo "Введите натуральное число, N > 0";
	}
	else {
		$num = rand(-21, 35);
		echo "$num<br>";
    }
    for($numbers; $numbers > 1; $numbers--) {
        $num1 = $num; //сохранение предыдущего числа из прошлого цикла
        $num = rand(-21, 35); //создание нового числа
        if($num > $num1) {
            echo "$num больше $num1<br>";
        }
        elseif($num < $num1) {
            echo "$num меньше $num1<br>";
        }
        else {
            echo "$num равно $num1<br>";
        }
    }
}
outputSumRandomNumbers($numbers);
?>
melisa's picture

  1. function outputSumRandomNumbers($numbers) {
        $numbers = 10; //Здесь вводим нужное количество чисел

    Зачем вы обернули код в функцию,если переопределяете её агрумент ($numbers) внутри?

  2. На данный момент, какой бы аргумент вы не передали outputSumRandomNumbers(), она будет выводить 10 чисел.
Sver4ok's picture

Переделал

<?php
/* Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше */
function outputSumRandomNumbers($numbers) {
	$numbers;
	if($numbers < 1) {
		echo "Введите натуральное число, N > 0";
	}
	else {
		$num = rand(-21, 35);
		echo "$num<br>";
    }
    for(; $numbers > 1; $numbers--) {
        $num1 = $num; //сохранение предыдущего числа из прошлого цикла
        $num = rand(-21, 35); //создание нового числа
        if($num > $num1) {
            echo "$num больше $num1<br>";
        }
        elseif($num < $num1) {
            echo "$num меньше $num1<br>";
        }
        else {
            echo "$num равно $num1<br>";
        }
    }
}
outputSumRandomNumbers(10);
?>
melisa's picture

поясните, пожалуйста, что делает 4 строка?

$numbers;
Sver4ok's picture

Так. Я вас неправильно понял значит что вы имели ввиду под:

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

В посте я не зная один раз исправил код, потому не видно изначального. А вот он был таким:

<?php
/* Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше */
function outputSumRandomNumbers($numbers) {
	if($numbers < 1) {
		echo "Введите натуральное число, N > 0";
	}
	else {
		$num = rand(-21, 35);
		echo "$num<br>";
    }
    for(; $numbers > 1; $numbers--) {
        $num1 = $num; //сохранение предыдущего числа из прошлого цикла
        $num = rand(-21, 35); //создание нового числа
        if($num > $num1) {
            echo "$num больше $num1<br>";
        }
        elseif($num < $num1) {
            echo "$num меньше $num1<br>";
        }
        else {
            echo "$num равно $num1<br>";
        }
    }
}
outputSumRandomNumbers(10);
?>

Что здесь не так, давайте опять. Где тут необъявленная переменная? Вы имеете ввиду это?

for(; $numbers > 1; $numbers--) {
melisa's picture

видимо, не совсем таким, как вы пишите, а таким:

<?php
/* Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше */
function outputSumRandomNumbers($numbers) {
    $numbers = 10; //Здесь вводим нужное количество чисел
    if($numbers < 0) {
        echo "Введите натуральное число, N > 0";
    }
    else {
        $num = rand(-21, 35);
        echo "$num<br>";
    }
    for(; $numbers > 0; $numbers--) {
        $num1 = $num; //сохранение предыдущего числа из прошлого цикла
        $num = rand(-21, 35); //создание нового числа
        if($num > $num1) {
            echo "$num больше $num1<br>";
        }
        elseif($num < $num1) {
            echo "$num меньше $num1<br>";
        }
        else {
            echo "$num равно $num1<br>";
        }
    }
}
outputSumRandomNumbers($numbers);
?>

Вы запускали код? В предупреждении указано, в какой строке необъявленная переменная.

Sver4ok's picture

Я не мог так сделать, я с первой задачи задаю значение при вызове функции, а не внутри. С чего бы мне на 3-й это делать? То ли у меня амнезия и я просто забыл подставить значение, но я точно помню что я тестировал эту функцию и она работала при N=10. Я тогда подумал что вы имеете ввиду про цикл, и изменил так, чтобы функция внутри принимала значение, я ещё удивился зачем это делать.
Ладно, буду уточнять в след.раз, а то не пойму не так.

vedro-compota's picture

как это "не мог сделать", когда вверху неизменный пост висит, где видно что и как сделано. Переменная неиницилизирована, и она же передаётся в функцию.

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

Sver4ok's picture

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

В посте я не зная один раз исправил код, потому не видно изначального.

melisa's picture

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

melisa's picture

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

Sver4ok's picture

Вот:

<?php
/* Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше */
function outputSumRandomNumbers($numbers) {
	if($numbers < 1) {
		echo "Введите натуральное число, N > 0";
	}
	else {
		$num = rand(-21, 35);
		echo "$num<br>";
    }
    for(; $numbers > 1; $numbers--) {
        $num1 = $num; //сохранение предыдущего числа из прошлого цикла
        $num = rand(-21, 35); //создание нового числа
        if($num > $num1) {
            echo "$num больше $num1<br>";
        }
        elseif($num < $num1) {
            echo "$num меньше $num1<br>";
        }
        else {
            echo "$num равно $num1<br>";
        }
    }
}
outputSumRandomNumbers(10);
?>
melisa's picture

принято