Задача 5: Вывод чисел числа в обратном порядке - Учебные задачи PHP - Обсуждение решения
Primary tabs
Дано некоторое число длиной от 1 до 5 цифр - вывести его цифры в обратном порядке.
<?php function outputNumberInReverseOrder($number) { echo $number, " = <br>"; while ($number > 1) { $remainderOfDivision = $number % 10; $numberDividedBy10 = $number / 10; echo $remainderOfDivision, "<br>"; $number = $numberDividedBy10; } } outputNumberInReverseOrder(3567); ?>
Еще вариант решения задачи с использованием массива. Но есть замечание. Наличие этой строчки в теле функции делает ее вывод два раза (пока не понял, почему):
echo $number, " = <br>";
<?php function outputNumberInReverseOrder($number) { echo $number, " = <br>"; while ($number > 1) { $remainderOfDivision = $number % 10; $remainderOfDivision_arr[] = $remainderOfDivision; $numberDividedBy10 = $number / 10; $number = $numberDividedBy10; } return $remainderOfDivision_arr; } outputNumberInReverseOrder(3567); $output = outputNumberInReverseOrder(3567); foreach ($output as $value) { echo $value. "<br>"; } ?>
А если, по логике процесса, поставить эту строку после вызова функции, то выходит ошибка:
PHP Notice: Undefined variable: number in index.php on line 14 =
<?php function outputNumberInReverseOrder($number) { while ($number > 1) { $remainderOfDivision = $number % 10; $remainderOfDivision_arr[] = $remainderOfDivision; $numberDividedBy10 = $number / 10; $number = $numberDividedBy10; } return $remainderOfDivision_arr; } outputNumberInReverseOrder(3567); $output = outputNumberInReverseOrder(3567); echo $number, " = <br>"; foreach ($output as $value) { echo $value. "<br>"; } ?>
- Log in to post comments
- 19601 reads
melisa
Wed, 04/17/2019 - 11:05
Permalink
замечания
Потому что Вы дважды вызываете функцию. Проверяйте себя. Побудьте как бы сами бездумным интерпретатором, который запускает Ваш код. "Печатайте" значения на листочек, когда встречаете echo. Так всё станет понятнее)
Тут всё интереснее. Прочитайте про область видимости функции и напишите сюда ответ: Почему $number в данном случае undefined(не определена)?
Laven
Thu, 04/18/2019 - 12:16
Permalink
Исправил код задачи
Убрал лишний вызов функции:
Исправил код задачи, где выходило значение два раза.
Laven
Thu, 04/18/2019 - 14:24
Permalink
Исправил код задачи
Исправил код задачи, который выдавал ошибку:
Про область видимости прочитал. Ранее тоже читал. Спасибо за ссылку.
melisa
Thu, 04/18/2019 - 15:33
Permalink
Про область видимости
Хорошо, Вы поняли, почему переменная $number была не определена в строке 14? Напишите в двух словах.
Отлично)))) Вы получаете в результате массив и его же печатаете, как будто он был дан))
Так не пойдёт) Если уж выводите на экран изначальное число, то выводите ИМЕННО ЕГО.
Это важная ошибка с точки зрения алгоритмизации.
Laven
Thu, 04/18/2019 - 14:27
Permalink
Мне, с точки зрения
Мне, с точки зрения разработчика, ближе код № 1, т.к. результат достигается простым вызовом функции без дополнительных действий.
Насколько верно мое мнение, прошу проверяющих товарищей прокомментировать.
melisa
Thu, 04/18/2019 - 15:55
Permalink
побочный эффект
В первом случае функция оказывает побочный эффект в виде печати на экран.
Я понимаю, Вам это ближе, потому что с Вашей точки зрения сейчас это скорее "основной эффект" - основная задача :) НО задача любой функции - возвращать значение (чтобы в дальнейшем его где-то использовать). Вывод на экран нужен нам только для наглядности, для самопроверки.
Хорошая новость: в реальном приложении Вы быстро разберётесь в этом вопросе, т.к. оно просто работает по-другому.
Сейчас, в учебных задачах, это не критично.
Laven
Thu, 04/18/2019 - 20:49
Permalink
Область видимости функции
Потому что она является локальной переменной. Основной код является глобальным пространством. В этом пространстве глобальная переменная $number не объявлена, поэтому выходит сообщение:
Я рассчитывал на то, что, если происходит вызов функции, то локальная переменная будет "видна" в глобальном пространстве, т.е. в основном коде.
melisa
Fri, 04/19/2019 - 12:04
Permalink
всё верно
всё верно
Laven
Thu, 04/18/2019 - 21:50
Permalink
Исправил код задачи
melisa
Fri, 04/19/2019 - 13:59
Permalink
$remOfDiv_arr переделайте на
переделайте на camelCase
нет смысла сокращать слова в названиях. названия должны нести в себе смысл, который должен быть понятен человеку, который видит Ваш код впервые. а вот в длинном названии нет ничего страшного, если, конечно, оно от этого понятнее
vedro-compota
Thu, 04/18/2019 - 22:01
Permalink
какие имена были - те и останутся
вызов обычной функции может либо вернуть значение (надо присвоить другому значению которое уже есть в вашем пространстве) либо изменить какое-то значение по ссылке, либо и то и то одновременно, но в общем случае функция не может добавить никакое имя (переменную) в область пространства.
_____________
матфак вгу и остальная классика =)
Laven
Fri, 04/19/2019 - 20:41
Permalink
Исправил замечания
А условие задачи предусматривает один сам по себе "0" ?
Переделал код:
melisa
Tue, 04/23/2019 - 11:37
Permalink
Принято
Согласна, не предусматривает)
Принято
Laven
Sat, 04/20/2019 - 11:06
Permalink
Вариант кода в случае варианта $number = 0
melisa
Tue, 04/23/2019 - 11:43
Permalink
но раз уж Вы этот вариант выложили
но раз уж Вы этот вариант выложили тоже, прокомментирую его.
это условие никогда не будет выполнено, т.к. находится внутри условия
а должна "0 = 0"
проблема с отступами
Laven
Tue, 04/23/2019 - 12:22
Permalink
Исправил код задачи
melisa
Tue, 04/23/2019 - 12:23
Permalink
принято
принято