Учебные задачи PHP. Задача 6
Primary tabs
Решение задачи с четными цифрами:
<?php
function outputNumberInReverseOrder($number)
{
echo $number, " = <br>";
$arr = array();
while ($number >= 1) {
$remainderOfDivision = $number % 10;
if ($remainderOfDivision % 2 == 1) {
$arr[] = $remainderOfDivision;
}
if ($remainderOfDivision % 2 == 1) {
echo $remainderOfDivision, "<br>";
}
$numberDividedBy10 = $number / 10;
$number = $numberDividedBy10;
}
if ($arr === []) {
echo "Нечетных цифр не обнаружено! <br>";
}
}
outputNumberInReverseOrder(2468);
?>
Решение задачи с нечетными цифрами:
<?php
function outputNumberInReverseOrder($number)
{
echo $number, " = <br>";
$arr = array();
while ($number >= 1) {
$remainderOfDivision = $number % 10;
if ($remainderOfDivision % 2 == 1) {
$arr[] = $remainderOfDivision;
}
if ($remainderOfDivision % 2 == 1) {
echo $remainderOfDivision, "<br>";
}
$numberDividedBy10 = $number / 10;
$number = $numberDividedBy10;
}
if ($arr === []) {
echo "Нечетных цифр не обнаружено! <br>";
}
}
outputNumberInReverseOrder(1357);
?>- Log in to post comments
- 18025 reads
melisa
Fri, 04/19/2019 - 14:10
Permalink
замечания
Не поняла смысла. Вроде оба варианта решения одинаковы)
Некорректное имя переменной. Оно не должно содержать цифр.
if ($remainderOfDivision % 2 == 1) { $arr[] = $remainderOfDivision; } if ($remainderOfDivision % 2 == 1) { echo $remainderOfDivision, "<br>"; }Не нужно запрашивать условие для каждой операции, можно написать в теле одного if оба действия
В современный версиях php используется укороченная запись:
Вместо оператора сравнения воспользуйтесь встроенной функцией php, empty()
Laven
Fri, 04/19/2019 - 15:49
Permalink
Вместо оператора сравнения воспользуйтесь встроенной функцией ph
Да, спасибо. На просторах инета видел этот вариант. Но один товарищ сказал:
Что тоже мне показалось интересным.
melisa
Fri, 04/19/2019 - 15:55
Permalink
Целесообразность разных
Целесообразность разных способов, конечно, нужно рассматривать в каждом конкретном случае. В данном я предложила использовать функцию с целью ознакомления с альтернативным вариантом.
Laven
Fri, 04/19/2019 - 16:24
Permalink
Переработал код задачи
Несколько расширил условия задачи с дополнительными выводами.
<?php function outNumbInRevOrd($number) { $remOfDivArrOdd = []; $remOfDivArrEven = []; while ($number >= 1) { $remOfDiv = $number % 10; if ($remOfDiv % 2 == 1) { $remOfDivArrOdd[] = $remOfDiv; // массив НЕчетных цифр } else { $remOfDivArrEven[] = $remOfDiv; // массив ЧЕтных цифр } $number = $number / 10; // в/о остаток от деления нужно вычесть из числа? } if ((!($remOfDivArrOdd == [])) && (!($remOfDivArrEven == []))) { echo "НЕчетные и ЧЕтные присутствуют! <p>"; return $remOfDivArrOdd; } if (!($remOfDivArrOdd == [])) { // если массив не пуст echo "Четных цифр не обнаружено! <p>"; return $remOfDivArrOdd; } if (!($remOfDivArrEven == [])) { // если массив не пуст echo "Нечетных цифр не обнаружено! <p>"; return $remOfDivArrOdd; } } $number = 234; $output = outNumbInRevOrd($number); echo "$number = <br>"; foreach ($output as $value) { echo $value. '<br>'; } ?>melisa
Fri, 04/19/2019 - 16:31
Permalink
if ((!($remOfDivArrOdd == [])
if ((!($remOfDivArrOdd == [])) && (!($remOfDivArrEven == []))) { echo "НЕчетные и ЧЕтные присутствуют! <p>"; return $remOfDivArrOdd; } if (!($remOfDivArrOdd == [])) { // если массив не пуст echo "Четных цифр не обнаружено! <p>"; return $remOfDivArrOdd; } if (!($remOfDivArrEven == [])) { // если массив не пуст echo "Нечетных цифр не обнаружено! <p>"; return $remOfDivArrOdd; }Всю эту конструкцию можно написать короче с помощью оператора elseif
Неверно эту строку писать внутри условий, т.к. условия никак на неё не влияют. и от них она не зависит. тем более трижды.
Для отрицания равенства существуют свои операторы сравнения.
Laven
Fri, 04/19/2019 - 20:17
Permalink
Спасибо. Переделал
Спасибо. Переделал.
Насчет этого момента:
Я, возможно, где-то здесь недопонимаю, но, в тестовом режиме, я подставлял поочередно два массива (для четных и нечетных цифр) и видел, как это условие:
или
влияло на результат, т.е. выводило либо четные, либо нечетные цифры.
Другой момент, когда я ставил подряд два эти условия:
if (($remOfDivArrOdd != []) && ($remOfDivArrEven != [])) { echo "НЕчетные и ЧЕтные присутствуют! <p>"; return $remOfDivArrOdd; return $remOfDivArrEven;то выполнялось только первое условие по ходу движения.
Строка 25. Я поставил
что против условия задачи (выводить в обр порядке НЕчетные цифры), код стал выводить ЧЕтные цифры в обр порядке, как в этом примере:
<?php function outNumbInRevOrd($number) { $remOfDivArrOdd = []; $remOfDivArrEven = []; while ($number >= 1) { $remOfDiv = $number % 10; if ($remOfDiv % 2 == 1) { $remOfDivArrOdd[] = $remOfDiv; // массив НЕчетных цифр } else { $remOfDivArrEven[] = $remOfDiv; // массив ЧЕтных цифр } $number = $number / 10; } if (($remOfDivArrOdd != []) && ($remOfDivArrEven != [])) { echo "НЕчетные и ЧЕтные цифры присутствуют! <p>"; return $remOfDivArrOdd; } elseif ($remOfDivArrOdd != []) { echo "Четных цифр не обнаружено! <p>"; return $remOfDivArrOdd; } elseif ($remOfDivArrEven != []) { echo "Нечетных цифр не обнаружено! <p>"; return $remOfDivArrEven; } } $number = 246; $output = outNumbInRevOrd($number); echo "$number = <br>"; foreach ($output as $value) { echo $value. '<br>'; } ?>melisa
Tue, 04/23/2019 - 12:02
Permalink
возвращаемое значение
в задаче просили выводить только нечётные цифры или текст в случае их отсутствия. Я не против, если Вы сделали немного бОльшую работу, однако у нас из-за этого возникли дополнительные трудности.
Так вот, естественно, что если Вы возвращаете две разных переменных, результат меняется. Но в Вашем коде Вы возвращаете одну и ту же переменную 3 раза. Это избыточный код, да ещё и не в том месте.
Условия elseif влияют только на текст, который Вы печатаете с помощью echo прямо внутри функции. На возвращаемое значение условия НИКАК не влияют, а значит, не надо его возвращать внутри условий (тем более внутри каждого условия), а возвращайте ниже.
if ((!($remOfDivArrOdd == [])) && (!($remOfDivArrEven == []))) { echo "НЕчетные и ЧЕтные присутствуют! <p>"; return $remOfDivArrOdd; } if (!($remOfDivArrOdd == [])) { // если массив не пуст echo "Четных цифр не обнаружено! <p>"; return $remOfDivArrOdd; } if (!($remOfDivArrEven == [])) { // если массив не пуст echo "Нечетных цифр не обнаружено! <p>"; return $remOfDivArrOdd; }Возвращается при любом тексте одно и то же значение. Видите?
По этому комментарию видно, что Вы так и не поняли смысла возврата значения функцией. Как только функция натыкается на команду return, она прекращает дальнейшее чтение кода и выводит наружу результат. Всё, что ниже не будет прочитано никогда.
В последнем варианте решения Вы уже и чётные выводите, что прямо противоречит условию. Давайте лучше, будем поступательно двигаться и дайте сначала результат чётко соответствующий запросу задачи.
Laven
Tue, 04/23/2019 - 19:20
Permalink
Исправил код задачи
<?php function outNumbInRevOrd($number) { $remOfDivArrOdd = []; // массив НЕчетных цифр $remOfDivArrEven = []; // массив ЧЕтных цифр while ($number >= 1) { $remOfDiv = $number % 10; if ($remOfDiv % 2 == 1) { $remOfDivArrOdd[] = $remOfDiv; // массив НЕчетных цифр } else { $remOfDivArrEven[] = $remOfDiv; // массив ЧЕтных цифр } $number = $number / 10; } if ($remOfDivArrOdd == []) { echo "Нечетных цифр не обнаружено! <p>"; } return $remOfDivArrOdd; } $number = 12345; $output = outNumbInRevOrd($number); echo "$number = <br>"; foreach ($output as $value) { echo $value. '<br>'; } ?>melisa
Tue, 04/30/2019 - 16:59
Permalink
чётные цифры нам не нужны
это избыточный код
else { $remOfDivArrEven[] = $remOfDiv; // массив ЧЕтных цифр }это тоже
Laven
Tue, 04/30/2019 - 18:22
Permalink
Исправил код задачи
<?php function outNumbInRevOrd($number) { while ($number >= 1) { $remOfDiv = $number % 10; if ($remOfDiv % 2 == 1) { $remOfDivArrOdd[] = $remOfDiv; // массив НЕчетных цифр } $number = $number / 10; } if ($remOfDivArrOdd == []) { echo "Нечетных цифр не обнаружено! <p>"; } return $remOfDivArrOdd; } $number = 468; $output = outNumbInRevOrd($number); echo "$number = <br>"; foreach ($output as $value) { echo $value. '<br>'; } ?>melisa
Tue, 04/30/2019 - 18:27
Permalink
запустите код
предупреждений быть не должно
Laven
Tue, 04/30/2019 - 18:32
Permalink
Исправил код задачи
Странно, при первом запуске не было этой записи, хотя я ее ожидал. При втором запуске - она появилась.
ИСПРАВИЛ.
<?php function outNumbInRevOrd($number) { $remOfDivArrOdd = []; while ($number >= 1) { $remOfDiv = $number % 10; if ($remOfDiv % 2 == 1) { $remOfDivArrOdd[] = $remOfDiv; // массив НЕчетных цифр } $number = $number / 10; } if ($remOfDivArrOdd == []) { echo "Нечетных цифр не обнаружено! <p>"; } return $remOfDivArrOdd; } $number = 4682468; $output = outNumbInRevOrd($number); echo "$number = <br>"; foreach ($output as $value) { echo $value. '<br>'; } ?>melisa
Tue, 04/30/2019 - 18:59
Permalink
принято
принято