Задача №3 - Больше или меньше предыдущего
Primary tabs
Задачи №3 из этого списка:
Условие задачи:
Вывести на экран N случайных чисел (каждое с новой строки). Для каждого числа, начиная со второго, рядом выводить - больше ли оно предыдущего или меньше
Мое решение:
<?php $a = rand(8, 15); for ($i=0; $i<$a; $i++){ if ($i==0){ echo $random1 = rand(-25, 35) . '<br>'; } elseif ($i>0) { echo $random2 = rand(-25, 35); if ($random2 > $random1) { echo ' больше ' . $random1; } elseif ($random2 < $random1) { echo ' меньше ' . $random1; } elseif ($random2 == $random1) { echo ' равно ' . $random1; } $random2 = $random1; } }
- Log in to post comments
- 15505 reads
melisa
Mon, 10/15/2018 - 16:32
Permalink
замечания
Здесь ошибка в оформлении: лишний отступ
Здесь оператор elseif() излишен, т.к. условие только одно. elseif следует применять когда есть разные варианты развития событий после if, а ещё лучше воспользоваться в таких случаях конструкцией switch.
iov84
Tue, 10/16/2018 - 13:28
Permalink
По п.1:
По п.1:
Это отступ в первом if, я правильно понял? Вроде исправил!
По п.2:
Принял, спасибо, учту на будущее!
По п.3:
Да, запустил, увидел свой косяк, сорри за невнимательность!
Исправил:
НО почему-то у меня такое впечатление складывается, что в swith у меня получились "костыли". Почему-то не получается в case загнать только условие (>0,
melisa
Tue, 10/16/2018 - 15:32
Permalink
продолжаем
Но если уж называть, постарайтесь, чтобы по названию можно было понять что хранит в себе переменная. Например, $current - общепринятое название для текущего элемента. А следующий элемент может называться $next. Так будет даже без русских комментариев понятно, что делает код, да и Вам удобнее разрабатывать.
Это лишняя строка, без неё будет работать.
iov84
Tue, 10/16/2018 - 18:51
Permalink
да, продолжаем )))
У Вам очень хорошее чувство юмора! Очень приятно общаться с умными людьми с классным чувством юмора!!!
Мне кажется я понял, что Вы пытались до меня донести, в т.ч. фразой из мультика про Винни Пуха (кстати я его очень люблю, недавно с огромным удовольствием посмотрел фильм Кристофер Робин)
Проверьте...
P.S. и Вы были правы... действительно проще обзывать переменные $current и $next. В голове проще выстроить из таких названий логические цепочки что за чем последует. Спасибо!
melisa
Tue, 10/16/2018 - 19:32
Permalink
хихих))
ну что Вы, спасибо :))) А мне приятно проверять, когда Вы заинтересованы в результате, то ли ещё будет)
Новый, 2018го? Советуете?
Я Вас наверное запутала упоминанием switch. В данном случае он тоже не совсем уместен. В этой задаче его вообще не нужно использовать.
Во-первых, потому что варианта (case) всего 2. Всё-таки назначение switch в динных переборах. Не нужно усложнять то, что можно написать с помощью простого if, else, как у Вас и было раньше.
Во-вторых, потому что во втором случае не проверка равенства $i, а снова целое условие. Это лишнее. Чем проще, тем лучше.
Т.к. break отсутствует, в первой итерации цикла for выполняются оба case. Это приводит к тому, что выводится на экран не $a чисел, а $a+1. Можете убедиться в этом, задав $a значение 1 для отладки.
Отладьте этот вариант для упражнения (кстати, если break поставить на место, появится другая ошибка). Запостите этот вариант сюда.
Но в этой задаче всё-таки лучше использовать if и else. И этот вариант тоже опубликуйте.
iov84
Thu, 10/18/2018 - 19:29
Permalink
любезности )))
Да, советую, Винни Пух там такие простые и очевидные вещи говорит, что в жизни ты даже как-то не задумываешься, а посмотрел этот фильм и подумал... а ведь так оно и есть.
В общем рекомендую!
iov84
Thu, 10/18/2018 - 19:35
Permalink
обновленный код, но есть баг
Я переделал код в соответствии с рекомендациями, постарался его сделать меньше
Вот он:
Но есть проблема, после второй итерации, появляется дополнительный перенос каретки... посмотрел в браузере через F12 код HTML, да, там прям нагло торчит откуда-то взявшийся br.
Я не могу понять откуда он взялся. I need help!
melisa
Fri, 10/19/2018 - 15:48
Permalink
коварное =
Посмотрите внимательно на эту строку. В ней одновременно происходит и присвоение значения, и печать. Так к чему Вы хотели приконкатенировать
?
iov84
Sun, 10/21/2018 - 16:34
Permalink
работает, но я не понял почему...
Я обратил внимание на эту строчку, немного передал, заработало!
Вот обновленный код:
... но я не понял почему так происходит... неужели при присвоении значения переменной каретка автоматом переносится на новую строку? И что также мне не понятно... по сути это строка печатает первое значение переменной, однако дополнительные перенос был после первого определения "больше/меньше" (т.е. условно в конце второй строки) ... как так? Где магия? )))
melisa
Mon, 10/22/2018 - 13:50
Permalink
но я не понял почему так
Так происходит потому, что Вы присваиваете переменной $current не "7", а "7 br", к примеру(скобки тега опустила намеренно, иначе строку переносит))). Т.к. в php типизация не строгая, то тип $current при конкатенации числа со строкой спокойно преобразуется в строку "7 br".
В первой строке перенос, как Вы и оживаете 1, буквально строка выглядит так:
А вторая строка выглядит так (если опустить if):
Но т.к. $current = "7 br", буквально получится:
После второй строки происходит переприсвоение значения $current, и из него удаляется br:
Справедливость восстановлена.
Если Вы видите в совей программе ошибку, но не можете понять, в чём она, отлаживайте код построчно. Строго делайте die(); после каждой строки. Как только ошибка появилась - значит, Вы нашли строку, в которой она скрывается. Дальше, чтобы понять, что не так, выводите значения переменных, используемых в данной строке на экран.
Здесь важна дотошность: каждую строку. И внимательность: следите, куда идёт программа, как она работает. Обычно помогает :)
Вот есть статья про отладку, там некоторые простые вещи описаны. Если что-то изобретёте своё, напишите, будем дополнять.
iov84
Mon, 10/22/2018 - 19:47
Permalink
я понял )))
Спасибо за подробный ответ!
Оказывается нет ни какой магии... я прям даже расстроился )))
Я так понимаю задача принята?
melisa
Wed, 10/24/2018 - 13:06
Permalink
да, принято
да, принято
iov84
Tue, 10/16/2018 - 19:31
Permalink
вопрос?
В предыдущем комментарии я пытался переменные current и next правильно отобразить... у меня не получилось... Подскажите, как Вы это делаете...
melisa
Tue, 10/16/2018 - 19:43
Permalink
есть статья
Есть статья о том, как оформлять статьи на сайте fkn.ktu10.com.
А про теги конкретно смотрите в видео. Ссылка на него также есть в статье.