Учебные задачи PHP. Задача 3

Список учебных задач PHP здесь

Условие: Вывести на экран N случайных чисел (каждое с новой строки). Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше.

<?php
$n = 9;
for ($i = 0; $i < $n; $i++) {
	$arr[$i] = rand(-21, 35);
	if ($i == 0) {
		echo $arr[$i], "<br>";
	}
	else {
		if ($arr[$i] > $arr[$i-1]) {
			echo $arr[$i] . " больше " . $arr[$i-1], "<br>";
		}
		if ($arr[$i] < $arr[$i-1]) {
			echo $arr[$i] . " меньше " . $arr[$i-1], "<br>";
		}
		if ($arr[$i] == $arr[$i-1]) {
			echo $arr[$i] . " равно " . $arr[$i-1], "<br>";
		}
	}
}
?>
melisa's picture

  1. if ($i == 0) {
            echo $arr[$i], "<br>";
        }
        else {

    Замечание по оформлению блока if-else. Прочитайте внимательно правила оформления кода. Следование этим правилам - хорошая привычка и залог того, что Ваш код будет понятен любому программисту, даже когда он станет немного сложнее.

  2. if ($i == 0) {
            echo $arr[$i], "<br>";
        }
        else {
            if ($arr[$i] > $arr[$i-1]) {
                echo $arr[$i] . " больше " . $arr[$i-1], "<br>";
            }
            if ($arr[$i] < $arr[$i-1]) {
                echo $arr[$i] . " меньше " . $arr[$i-1], "<br>";
            }
            if ($arr[$i] == $arr[$i-1]) {
                echo $arr[$i] . " равно " . $arr[$i-1], "<br>";
            }

    Работает корректно, но реализуйте более красивое решение, используя elseif вместо повторяющихся условий if

rvsokolov's picture

Спасибо за замечания, поправил. Единственно, у меня вопрос - действительно ли здесь нужна конструкция elseif? Какой смысл использовать блок else? Мне кажется, предыдущий вариант с тремя if более эргономичный, что ли. Поправьте, если я не прав.

<?php
$n = 9;
for ($i = 0; $i < $n; $i++) {
	$arr[$i] = rand(-21, 35);
	if ($i == 0) {
		echo $arr[$i], "<br>";
	}
	elseif ($arr[$i] > $arr[$i-1]) {
		echo $arr[$i] . " больше " . $arr[$i-1], "<br>";
	}
	elseif ($arr[$i] < $arr[$i-1]) {
		echo $arr[$i] . " меньше " . $arr[$i-1], "<br>";
	}
	elseif ($arr[$i] == $arr[$i-1]) {
		echo $arr[$i] . " равно " . $arr[$i-1], "<br>";
	}
}
?>
melisa's picture

  1. смысл конструкции elseif - в замене множественных if. Это сокращает вложенность блоков в большом коде и увеличивает читаемость.
  2. последний блок должен быть просто else
     if ($i == 0) {
            echo $arr[$i], "<br>";
        }
        elseif ($arr[$i] > $arr[$i-1]) {
            echo $arr[$i] . " больше " . $arr[$i-1], "<br>";
        }
        elseif ($arr[$i] < $arr[$i-1]) {
            echo $arr[$i] . " меньше " . $arr[$i-1], "<br>";
        }
        elseif ($arr[$i] == $arr[$i-1]) {
            echo $arr[$i] . " равно " . $arr[$i-1], "<br>";
        }
  3. офрмление. посмотрите п.1 замечания. Вы не не той строке else и elseif ставите. Надо на той же строке, что и фигурная закрывающая скобка
rvsokolov's picture

Исправился и запомнил.

<?php
$n = 9;
for ($i = 0; $i < $n; $i++) {
    $arr[$i] = rand(-21, 35);
	if ($i == 0) {
		echo $arr[$i], "<br>";
	} elseif ($arr[$i] > $arr[$i-1]) {
		echo $arr[$i] . " больше " . $arr[$i-1], "<br>";
	} elseif ($arr[$i] < $arr[$i-1]) {
		echo $arr[$i] . " меньше " . $arr[$i-1], "<br>";
	} else {
		echo $arr[$i] . " равно " . $arr[$i-1], "<br>";
	}
}
?>
melisa's picture

принято