Задача 5. Вывести цифры числа в обратном порядке

Выполняется, но с замечаниями.


1
2
3
4
5
PHP Notice:  Uninitialized string offset: 5 in /home/math2/php_tasks/script.php on line 7
PHP Stack trace:
PHP   1. {main}() /home/math2/php_tasks/script.php:0

Notice: Uninitialized string offset: 5 in /home/math2/php_tasks/script.php on line 7

Call Stack:
    0.0002     360408   1. {main}() /home/math2/php_tasks/script.php:0


PHP Notice:  Uninitialized string offset: 6 in /home/math2/php_tasks/script.php on line 7
PHP Stack trace:
PHP   1. {main}() /home/math2/php_tasks/script.php:0

Notice: Uninitialized string offset: 6 in /home/math2/php_tasks/script.php on line 7

Call Stack:
    0.0002     360408   1. {main}() /home/math2/php_tasks/script.php:0

Лучше говорить "цифры числа".
И это не обратный порядок.

moberaptor's picture

1.

Выполняется, но с замечаниями.

Какая IDE?

Лучше говорить "цифры числа".

2. Да, только так и правильно, если, конечно, речь не о поличислах.
3.

И это не обратный порядок.

Спасибо, пофиксил...

Какая IDE?

Просто консоль.

moberaptor's picture

Спасибо!

vedro-compota's picture

Просьба для начала переоформить все задачи в соответствии с: http://fkn.ktu10.com/?q=node/9517 а именно

  • 1) посмотрите как оформляется while
  • 2) для массивов используют традиционно квадратные скобки (фигурные пугают)
  • 3) обратная ссылка на список задач.
  • 4) условие задачи должно быть на странице (а не только код)
  • 5) не надо писать while для цикла с параметром — это читается хуже чем, скажем, for.

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

moberaptor's picture

5) не надо писать while для цикла с параметром — это читается хуже чем, скажем, for.

Что имеется ввиду? Предполагаю, что когда идёт последовательный перебор значений, то нагляднее оформлять цикл с помощью for, а безопаснее с for in, но всё таки просьба пояснить.

<?php
$num = (string)12345;
$len = strlen($num);
while ($len-- >= 0) 
    echo $num{$len}.$nl;

Не определена одна переменная:

PHP Notice:  Undefined variable: nl in /var/www/php_tasks/script3.php on line 5

Допишем немного в этот скрипт, чтобы видеть индекс в выводе:

<?php
$nl = "<br>";
$num = (string)12345;
$len = strlen($num);
while ($len-- >= 0) 
    echo "$len:  ". $num{$len}.$nl;

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

4:  5
3:  4
2:  3
1:  2
0:  1
-1:  5

Выводится на одну цифру больше, чем требуется.
Такой вывод будет, если использовать php7.2.

В php7.0 мы получили бы

PHP Notice:  Uninitialized string offset: -1 in /var/www/php_tasks/script3.php on line 6

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

<?php
$nl = "<br>";
$num = (string)12345;
$len = strlen($num);
for ( $i = $len-1 ; $i >= 0 ; $i-- ) {
    echo "$i: ". $num[$i].$nl;
}

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

4: 5
3: 4
2: 3
1: 2
0: 1
moberaptor's picture

Спасибо за ответ! Чтобы корректно заработал исходник с while нужно заменить $i--, на --$i), тогда всё становится на свои места.
То есть правильно ли, я понял, что цикл for считается более наглядным?

Или же заменить 0 на 1?

while ($len-- >= 1)
    echo "$len:  ". $num{$len}.$nl;

Или убрать знак равенства?

while ($len-- > 0)
    echo "$len:  ". $num{$len}.$nl;
правильно ли я понял, что цикл for считается более наглядным?

Нет, конечно же.
Просто его можно использовать для цикла с параметром.

vedro-compota's picture

То есть правильно ли, я понял, что цикл for считается более наглядным?

Да, более наглядный, но именно для цикла с параметром.

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