Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
В вышеуказанном варианте есть недоработка - вывод последнего числа фибоначчи (121393) происходит перед его проверкой на условия цикла (<= 100000). Вот мой вариант
Добрый день! Спасибо, важное замечание, я и не заметил. Вы нашли настоящий баг =)
Вариант есть, но для его реализации нужно ознакомиться с оператором break из следующего урока.
Лучше будет убрать условие внутри for(...), и оставить его только внутри тела цикла, как у Вас. Только нужно будет проверять, что если текущее получившееся число стало больше верхнего диапазона, то нужно цикл прервать:
Вариант рабочий, засчитываю. Но не самый оптимальный - в вашем варианте $i увеличивается на единицу и происходит очень много лишних действий. Вместо этого лучше в $i присваивать сумму двух предыдущих значений. Как здесь.
Чет я по ходу намудрил... Зато сам пришел к этому, не глядя в комментарии других пользователей )
Только почему-то у меня выводится последнее лишнее число...
<?php
//найти числа фибоначи меньше 10000
//Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1,
// а каждое последующее число равно сумме двух предыдущих чисел.
$fistCount = 0;
$secondCount = 1;
//выводим на экран 1 и 0, для того чтобы была наглядно видна последовательность
echo $fistCount . '<br>';
echo $secondCount . '<br>';
//цикл с условием начала от 1, но не больше 10000
for ($sumOfCount = 1; $sumOfCount <= 10000;) {
// считаем сумму чисел яч1
$sumOfCount = $fistCount + $secondCount;
// второе значение становится первым яч2
$fistCount = $secondCount;
// сумма чисел становится вторым значением яч3
$secondCount = $sumOfCount;
//вывод результата из цикла
echo $sumOfCount;
echo '<br>';
}
?>
<?php
//попробуем вывести все числа от 1000 до 1000000 делимые на 17 без остатка
//в цикле задаем начальную переменную со значением 1000, второе условаие окончание цикла 1кк, и инкремент по
for ($i = 1000; $i < 1000000; $i++) {
//проверочное условние - если переменная делится без остатка на 17 - то выводим переменную
if ($i % 17 == 0) {
echo $i;
echo '<br>';
}
}
?>
<?php
// Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
$minnum = 1000;
$maxnum = 1000000;
for (;$minnum <= $maxnum;$minnum++) {
if ($minnum % 17 === 0) {
echo $minnum . '</br>';
}
}
/* Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1,
а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ... */
$num2 = 1; //Задаем второе число
for ($num1 = 0;$num1 <= 100000;$num1 += $num2) { // Задамем первое число, условивие при котором отобразяться все числа фибоначи меньше 100000 и выполняем первое сложение
$num2 += $num1; // Второе сложение предыдущего чисоа с текущим
echo $num1. ',' . $num2 . ','; //Выводим оба числа в цикле.
}
Хорошо, но второй пример какой-то сложный. Непонятна логика того, что вычисляется именно сумма двух предыдущих. По идее для этого должна быть использована одна переменная, и ещё две переменные для хранения двух предыдущих чисел. Здесь же это не очевидно, хоть и работает.
Лишний цикл while, можно просто убрать $i++ из скобок и делать его, если число не разделилось. А если разделилось, то можно уже +17 делать.
За то, что вы в принципе задумались об оптимизации, ставлю вам большущий плюс.
Ну да, что-то вы перемудрили тут. Нагуглите алгоритм нахождения чисел фибоначи, он проще, чем вы думаете. Ну или можете поискать более простое решение в комментах выше.
//==================================
$i = 1000;
//Находим первое число больше 1000 которое делится на 17
//в данном случае после прохода цикла $i=1003
while (($i % 17) != 0)
$i++;
//Выводим оставшиеся числа до 1000000, просто прибавляя к $i
//каждый раз значение 17
//кстати в коде выше не совсем правильно, наверное лучше ставить в цикле <=
//в данном примере это не имеет значения, но с другими делителями можно
//недополучить последнее значение
for (; $i <= 1000000; $i += 17)
echo '<br>' . $i;
//Можно одним циклом, но зачем проверять каждый раз делимость на 17,
//если можно не проверять
//хотя может можно и не проверять, и одним циклом сделать,
//но в голову ничего не приходит(
Задачи в комменты писать, или можно прорешивать и у себя оставлять, спросил я решая уже до 16 урока) Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
for ($i = 1000;$i <= 1000000;$i++) {
if ($i % 17 === 0) {
echo $i;
}
}
Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Непонятно, для чего первый foreach.
$i % 17 - лучше явную проверку на 0.
Непонятно, для чего проверка if (($secondFibonacci + $firstFibonacci) == $i) ведь $i всегда будет равно сумме этих значений.
Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ...
В целом норм, но решение с переменной $i выглядит как костыль. В качестве условия остановки цикла можно использовать $value < 100000 и обойтись без переменной $i
В каждой итерации цикла выполняется проверка на то, что $i равно 0. Это существенно замедляет программу. Можно просто добавить в самом начале функции первые элементы в массив и начать вычислять с третьего числа.
Раз уж сделали функцию, то сделайте так, чтобы она принимала в качестве аргумента верхнюю границу, до которой нужно вычислять последовательность. Это Вам эксклюзив, со звездочкой)
По первой, подумалось, что выполнять почти сотню тысяч итераций нерационально :D
Про break уже успел в следующем уроке прочитать, пока на работе скучал.
Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ...
В таком случае алгоритм будет начинаться не с 1000, а с 1001. Инкрементить нужно в конце итерации. Непонятно, почему не использовали классическую запись цикла for.
if($i % 17 == 0)
Почему эта строка уехала влево? Отступы должны соблюдаться. Используйте Ctrl+Alt+L в phpstorm для автоматического форматирования кода.
В числах Фибоначчи - последнее добавленное в массив число не будет выводиться.
Если сделать полностью без условий, то выводится одно значение после 100000. Если поставить одно условие, чтобы показывать числа до 100000, то все работает хорошо за исключением запятой. Она ставится и после последнего числа. Для этого и сделал условия, чтобы вместо запятой получить точку.
Что-то вроде (($num = $fibonacciNum[$i] + $fibonacciNum[$i-1]) < 100000)? Не хотелось в условии присваивать что-то переменной.. А если не загонять значение в переменную, получается снова придется рассчитывать сумму повторно, чтобы добавить как элемент массива. Или такое практикуется и это нормально?
//Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
$numbers17 = [];
for ($a = 1000; $a <= 1000000; $a++) {
if ($a % 17 == 0){
$numbers17 [] = $a;
}
}
var_dump($numbers17);
Со вторым заданием осталась проблема с последним значением, которое больше 100.000, но при этом условие в теле цикла все равно почему то пропускает его, проверял дебагером, и не нашел причины. Надеюсь на подсказку)
Не редактировал комментарий, чтобы показать изменения: сидел ломал голову и понял свою ошибку, что сначала я сохраняю значение в массив, а только потом проверяю его. Поэтому решил сначала вынести проверку, а лишь затем сохранять значение в массив.
Честно говоря, ничего красивого в этом решении нет. Какая-то дикая мешанина в одну строку. Код прежде всего должен читаться легко, чтобы даже дебил понял)
Чтобы избежать проверки условия дважды, достаточно было перенести вывод суммы в начало тела цикла:
Пойдет, но с циклом while было бы лучше - когда вся логика идёт построчно, как будто читаешь книгу. Здесь же часть алгоритма в шапке цикла for, а часть в теле. Приходится прыгать глазами туда-сюда и сводить логику воедино.
#Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
$divBy17 = [];
for ($i = 1000; $i <= 1000000; $i++) {
if ($i % 17 == 0) {
$divBy17[] = $i;
}
}
#Искомые числа лежат в массиве $divBy17[], ибо слишком много чисел, чтобы их все выводить на экран
#Найдите числа Фибоначчи меньше 100000.
function fibonacci(int $num) {
$fibonArr = [0, 1];
for ($i = 2; $i < $num; $i++) {
$fibonArr[$i] = $fibonArr[$i - 1] + $fibonArr[$i - 2];
}
return $fibonArr;
#В каком виде подать результат в задаче не сказано, а т.к. результат довольно объемный, я решил вернуть массив
#(а дальше, типа, уже следующими функциями делайте с этим архивом, что хотите :) )
}
Для блоков if-else всегда используйте фигурные скобки. Где-то уже нахватались плохих примеров :)
После if и else всегда ставятся пробелы.
В целом решение рабочее, но более неоптимальное придумать сложно - на каждой итерации происходит расчет всех предыдущих значений.
Ох как я намаялся с этим фибоначи. В итоге пришлость подсмотреть. Затем долго анализировал другие варианты в комментариях, на подсознании понимаю, а так тяжело дается.
Я в содержании по функциям для работы с массивами не нашел нужной функции, а потом посмотрел выше содержания 'См. также is_array(), explode(), implode(), split(), preg_split() и unset().' Сразу и не заметишь)
Во втором решении выводятся числа куда больше чем 100000:
Число Фибоначчи:=0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141
Судя по предыдущим комментариям, есть подозрение, что до этого в этом уроке, было другое домашнее задание. До этого всегда смотрел как решают другие обучающиеся, а тут ничего не понял... Так и есть или у меня какие-то глюки? )))
Ну собственно, как вы и рекомендовали - после каждого урока знакомлюсь дополнительно с мануалом на php.net по пройденному материалу. Поэтому вспомнил, что что-то такое видел в массивах... )))
Насчет while согласен, получилось более красиво - есть к чему стремиться! ;-) Пока еще не всегда получается понять, какой лучше цикл использовать.
Ну и если честно, я всегда думал, что для дз желательно использовать тему пройденного урока, поэтому и решил через for
Доброго времени суток, я возможно не так понял домашнее задание. Я ознакомился с интерфейсом GodingZone.IO прошёл задачи переходя по ссылке и выполнил вот такое задание, с переменной местами слов.
Привет. Артём, скажи, почему метод решения задачи в PHPStorm работает, а скопированная и вставленная в окно на сайте https://codingzone.io тест не проходит?
Вам нужно считать данные из stdin, а не хардкодить строку "hello world". В тесте, который у вас падает, приходит строка my string, и из неё нужно сделать строку с большими буквами.
Строки пишутся в одинарных кавычках.
Синтаксис array() - устарел, используйте [].
И проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
Результат
Ожидаемый вывод отличается от актуального. Проверьте ваш алгоритм. Детали Input:
hello world2 Expected output:
world2 hello Actual output:
world hello
Хорошо) А что со вторым заданием?
Хорошее решение, только отступы надо лишние убрать.
В вышеуказанном варианте есть недоработка - вывод последнего числа фибоначчи (121393) происходит перед его проверкой на условия цикла (<= 100000). Вот мой вариант
Если есть вариант, как убрать проверку перед включением числа фибоначчи в массив - подскажите)
Добрый день! Спасибо, важное замечание, я и не заметил. Вы нашли настоящий баг =)
Вариант есть, но для его реализации нужно ознакомиться с оператором break из следующего урока.
Лучше будет убрать условие внутри for(...), и оставить его только внутри тела цикла, как у Вас. Только нужно будет проверять, что если текущее получившееся число стало больше верхнего диапазона, то нужно цикл прервать:
Тут всё верно.
Вариант рабочий, засчитываю. Но не самый оптимальный - в вашем варианте $i увеличивается на единицу и происходит очень много лишних действий. Вместо этого лучше в $i присваивать сумму двух предыдущих значений. Как здесь.
Отличное решение! Только уберите пробелы между названием массива и [].
И вот эту строку можно убрать:
P.S. вы можете редактировать свой комментарий.
Хорошее решение! Исправьте кодстайл как я вам уже говорил и попробуйте дать более осмысленные имена переменным.
Чет я по ходу намудрил... Зато сам пришел к этому, не глядя в комментарии других пользователей )
Только почему-то у меня выводится последнее лишнее число...
Добавил проверку в обработку массива ))
Интересное решение, засчитываю) Но советую посмотреть в интернете другие реализации. Мне больше всего нравится вот это решение.
Стоит учитывать, что верхняя граница тоже может подходить под условия. Тогда правильнее будет условие
Отлично) Только стоит переименовать переменные. "Count" - это число чего-то. Просто "число" - это "number".
Как скажете Сенсей!
Очень классное решение, сам не смог решить, начал читать комменты, и ваше решение самое простое и понятное)
Лучше вот так, с проверкой типа:
А так - отличное ДЗ
Понял, благодарю! А почему тождественная проверка лучше?
Так больше уверенности в том, что сравниваются одинаковые данные. Со временем поймёте)
1 задача
Гуд)
Не работает
Понял свои ошибки. Думал никто не ответит, но хорошо, что я ошибался. Спасибо, что поддерживаете проект.
Немного неправильно, должно начинаться на 0, 1, 1, 2... У Вас 0, 1, 2...
А проект жив)
Спасибо за урок!
Хорошо, но второй пример какой-то сложный. Непонятна логика того, что вычисляется именно сумма двух предыдущих. По идее для этого должна быть использована одна переменная, и ещё две переменные для хранения двух предыдущих чисел. Здесь же это не очевидно, хоть и работает.
ок!
Ок! Но можно быстрее, мы с Вами уже это обсуждали =)
За то, что вы в принципе задумались об оптимизации, ставлю вам большущий плюс.
Отлично!
Хорошо, пусть будет с такой оптимизацией)
Хорошо
Имеет ли место такое решение второго задания?
Вполне норм)
Скрипт выдает Notice-ы. Такое не засчитывается.
А что такое сам Notice? В плане перевод то заметка,но в этом случае что оно означает?
Вот что выводит у меня:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,
В коде внутри условия используется неопределенная переменная. Если у вас нет ошибок - нужно включить их вывод в php.ini.
Ну вот я переделал полностью, но не могу понять, у меня ошибки включены, ну и сама переменная была задана в цикле
Она у вас изначально не была определена, но использовалась в условии цикла.
И откуда интерпретатор узнает на первом шаге, что это за $r? Она просто с потолка была взята.
Сейчас всё ок.
Задачи в комменты писать, или можно прорешивать и у себя оставлять, спросил я решая уже до 16 урока)
Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Всё правильно, сюда домашку =)
Сделано на 5
да, спасибо, поторопился скопировать. Исправил.
Непонятно, для чего первый foreach.
$i % 17 - лучше явную проверку на 0.
Непонятно, для чего проверка if (($secondFibonacci + $firstFibonacci) == $i) ведь $i всегда будет равно сумме этих значений.
Хорошо, с оптимизацией)
После if и else всегда ставятся фигурные скобки, даже если одна строка - это стандарт в PHP.
Супер!
Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ...
Хорошо
В целом норм, но решение с переменной $i выглядит как костыль. В качестве условия остановки цикла можно использовать $value < 100000 и обойтись без переменной $i
Стало лучше :)
Норм!
Доброго дня! Спасибо за урок.
Решение первого задания
А второе что то не дойдёт никак...
Ок. Подсмотрите в решения других учеников.
Вот блин, только после того как отправил, понял, что задание не совсем правильно сделано, то есть оно не подходит под условия задачи
Ну так поправьте)
Надеюсь правильно решил или что то стоит переделать?
В целом норм. Но:
Ну огонь же! =)
исправил,теперь вроде норм)
Ок!
По первой, подумалось, что выполнять почти сотню тысяч итераций нерационально :D
Про break уже успел в следующем уроке прочитать, пока на работе скучал.
Отлично!
Отлично!
Отлично.
С фибоначчи очень элегантное решение. Супер!
числа которые делятся без остатка на 17
Числа Фибоначчи
Всё ок)
Отлично!
Первое:
Второе:
Или второе можно вот так...?
Отлично. Разницы в плане быстродействия нет, так что оба варианта годятся.
Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
Отлично
Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ...
Отлично
Зачем дважды проверяете, что число меньше определенного значения?
Задача 1:
Задача 2. Почему-то напрашивается решение с помощью массива:
Если без массива, то так:
Отлично
Можно вопрос, который крутится в голове уже не первый урок?
Почему при проверке четности вы используете
а не
???
А в чем отличие этих операторов?
Я конечно же вернулся на нужный урок и прочитал.
== проверка на равенство
=== проверка на тождественное равенство.
В нашем примере все равно что использовать, а я не могу понять где на практике это не прокатит и нужно будет брать именно ===, а не ==
Почти везде нужно тождественное равенство использовать. Потому что сравниваем именно 0 с 0. Зачем нам использовать приведения типов?
Т.е. если мы знаем что будем сравнивать числовые значения, то использование === уместно и даже быстрее, ибо опускается проверка типов. Верно?
Верно)
Первая задачка:
$i >= 1000 - бесполезное условие. Всегда true.
вторая домашка:
Отлично
Отлично
Код:
Отлично
Первая задача
Отлично
По логике всё хорошо. По оформлению - должны быть пробелы после echo и вокруг операторов. У вас всё в кучу слиплось.
Отлично
В таком случае алгоритм будет начинаться не с 1000, а с 1001. Инкрементить нужно в конце итерации. Непонятно, почему не использовали классическую запись цикла for.
Почему эта строка уехала влево? Отступы должны соблюдаться. Используйте Ctrl+Alt+L в phpstorm для автоматического форматирования кода.
В числах Фибоначчи - последнее добавленное в массив число не будет выводиться.
Самое сложное, это составить алгоритм. От количества вариантов выполнения Фибоначчи пришел в восторг. Вроде бы работает. Вариант с 2 переменными.
Да, вариантов хватает. Отлично!
Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.
Отлично
фибоначчи
Отлично
Почти весь вечер не давал покоя фибоначи, а утром пришло озарение) Все работает, надеюсь озарение не подвело :D
Всё отлично, не подвело
Отлично
Можете сделать так, чтобы каждый раз в цикле не проверять условия? Подсказка: нужно вынести часть кода перед циклом.
Так?
Отлично
Отлично!
Хотя в данном решении лучше заменить цикл for на while
А зачем эти условия про точки и запятые?
Если сделать полностью без условий, то выводится одно значение после 100000. Если поставить одно условие, чтобы показывать числа до 100000, то все работает хорошо за исключением запятой. Она ставится и после последнего числа. Для этого и сделал условия, чтобы вместо запятой получить точку.
А если граница сдвинется? Решение должно быть гибким и не завязываться на конкретное число.
Задача 1
Задача 2
Во второй задаче пришлось забежать вперед, чтоб понять как выйти из цикла.
Чтобы выйти из цикла можно использовать второй параметр цикла for.
Что-то вроде (($num = $fibonacciNum[$i] + $fibonacciNum[$i-1]) < 100000)? Не хотелось в условии присваивать что-то переменной.. А если не загонять значение в переменную, получается снова придется рассчитывать сумму повторно, чтобы добавить как элемент массива. Или такое практикуется и это нормально?
Чем проще тем лучше. Ваше изначальное решение тоже норм.
Отлично
Отлично
Ошибки возникают.
Выглядит ужасно,зато работает)
Зачем столько переменных? Достаточно ведь трёх. Жесть какая-то)
Супер!
Отлично!
1.
2.
Супер!
Отлично
Привет! Это второе задание) первое простое
Отлично
Со вторым заданием осталась проблема с последним значением, которое больше 100.000, но при этом условие в теле цикла все равно почему то пропускает его, проверял дебагером, и не нашел причины. Надеюсь на подсказку)
Не редактировал комментарий, чтобы показать изменения: сидел ломал голову и понял свою ошибку, что сначала я сохраняю значение в массив, а только потом проверяю его. Поэтому решил сначала вынести проверку, а лишь затем сохранять значение в массив.
Отлично!
Первое задание
Отлично. Только закрывающий тег ?> не нужен
Отлично
Зачем два цикла, если можно одним?
Отлично
Супер!
Как избежать проверки одного и того же условия дважды?
(подсмотрел красивое решение)
Честно говоря, ничего красивого в этом решении нет. Какая-то дикая мешанина в одну строку. Код прежде всего должен читаться легко, чтобы даже дебил понял)
Чтобы избежать проверки условия дважды, достаточно было перенести вывод суммы в начало тела цикла:
И правда:)
Все просто, как можно было не додуматься?!
Учитесь, и всё получится)
С числами Фибаначчи сам сделать не смог, нашел вариант с циклом while и переделал для for
Пойдет, но с циклом while было бы лучше - когда вся логика идёт построчно, как будто читаешь книгу. Здесь же часть алгоритма в шапке цикла for, а часть в теле. Приходится прыгать глазами туда-сюда и сводить логику воедино.
Первые два числа последовательности не выводятся. Непонятно, зачем перед каждым числом выводится c=
Второе задание ОК
Отлично
ВТОРАЯ ЗАДАЧА:
Отлично
Первое задание
Второе задание
Долго не мог понять, как вывести первые 0 и 1 :)
Супер! Просто и понятно
Но во втором задании можно без i обойтись, сравнивать сразу значение текущего числа Фибоначчи с максимально допустимым.
Вы имеете ввиду вот так:
Уже после задания нашел вот такое решение, по моему очень элегантное :)
Теперь отлично)
Долго думал над решением, а оказалось всё очень просто.
Отлично
Отлично
Где отступы?
Супер! Только пробел перед открывающейся фигурной скобкой не забывайте ставить.
Ничегошеньки непонятно. Но работает, что уже неплохо. Советую ознакомиться с другими решениями в комментариях.
А вот тут норм! Довольно простое решение.
Результат займет много места)
Результат:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025.
Отлично. Но в целом во втором алгоритме проще в самом начале вывести 0 и избавиться в теле цикла от условий
Вот исправил:
Лучше так
Чтобы цикл был как можно проще
Большое спасибо! Исправил.
Скобка, открывающая тело функции, пишется с новой строки.
В остальном отлично
Спасибо, учту.
Успел привыкнуть на другом курсе - там преподаватель писал именно так
Это не соответствует PSR
Хотя я так понимаю рекурсия далеко не быстрый вариант
Для блоков if-else всегда используйте фигурные скобки. Где-то уже нахватались плохих примеров :)
После if и else всегда ставятся пробелы.
В целом решение рабочее, но более неоптимальное придумать сложно - на каждой итерации происходит расчет всех предыдущих значений.
Отлично
Отлично, и пример с оптимизацией тоже ок!
С названиями функций, конечно, напряженка)
По-хорошему бы первое решение тоже что-то выводить должно
Добрый день!
Отлично
лучше перенести в первую часть круглых скобок
Поспал и все таки понял как должна работать вторая задача
Отличный алгоритм!
?> в конце файла не ставится.
Не нужно and, почитайте документацию по for, там есть примеры объявления нескольких переменных.
?> в конце файла не ставится.
Первое задание:
Второе задание:
Ох как я намаялся с этим фибоначи. В итоге пришлость подсмотреть. Затем долго анализировал другие варианты в комментариях, на подсознании понимаю, а так тяжело дается.
Отлично
Для первой задачи используйте оператор остатка от деления.
Отлично!
С первым всё понятно, та же проверка, что и с четными числами.
Решение с числами Фибоначчи
Отлично!
Во втором задании сможешь без условия сделать?
Отлично
Что с отступами во втором решении?
В оформлении кода или выводит не правильно?
В оформлении
Я в содержании по функциям для работы с массивами не нашел нужной функции, а потом посмотрел выше содержания 'См. также is_array(), explode(), implode(), split(), preg_split() и unset().' Сразу и не заметишь)
Теперь норм.
P.S. отвечайте на комментарии, а не добавляйте новые.
1
2 с вторым сам не справился :( наиболее понятным показался вариант
Оба варианта не работают
Лишние переносы
Во втором решении выводятся числа куда больше чем 100000:
Что не соответствует заданию
1
2
Отлично
Задание 1:
Задание 2:
Исправьте оформление, читать невозможно. Как исправите - напишите комментарий в ответ на мой, проверю.
Прошу прощения. Писал код в sublime text. В следующих заданиях буду учитывать замечание.
Супер!
Ошибка на четвертой строке
И отвечайте на комментарии, а не создавайте новые. Я вам вроде уже писал про это.
У меня все работает. Никаких ошибок. Вот результат;
Число Фибоначчи:= 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025
Тогда вам нужно включить показ notice-ов в php.ini
Ок. Только проблема с форматированием. Делайте отступы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
Ссылка на решение - https://codingzone.io/problems/2/solution/314
Странно, вроде еще вчера было другое задание
Заданий там много)
Не забывайте - строки в одинарных кавычках
https://codingzone.io/problems/2/solution/844
Судя по предыдущим комментариям, есть подозрение, что до этого в этом уроке, было другое домашнее задание. До этого всегда смотрел как решают другие обучающиеся, а тут ничего не понял... Так и есть или у меня какие-то глюки? )))
Так и есть)
Где же вы откопали этот оператор <> ))
Цикл while больше подходит для такой задачи. Пример - https://codingzone.io/ru/problems/2/solution/340
Ну собственно, как вы и рекомендовали - после каждого урока знакомлюсь дополнительно с мануалом на php.net по пройденному материалу. Поэтому вспомнил, что что-то такое видел в массивах... )))
Насчет while согласен, получилось более красиво - есть к чему стремиться! ;-) Пока еще не всегда получается понять, какой лучше цикл использовать.
Ну и если честно, я всегда думал, что для дз желательно использовать тему пройденного урока, поэтому и решил через for
Да, было бы логично использовать for, согласен)
Доброго времени суток, я возможно не так понял домашнее задание. Я ознакомился с интерфейсом GodingZone.IO прошёл задачи переходя по ссылке и выполнил вот такое задание, с переменной местами слов.
Это конечно всё хорошо, но я думал будет задание связанное с уроком "цикл for" чтоб его закрепить...
Решение может быть любым, задания с CZ не связаны с темой урока и сделаны для развития навыка написания алгоритмов
Фуух, понял, тогда все нормально!)
Мой вариант тоже работает)
И еще вопрос: как сбросить пароль на https://codingzone.io/? :)
Ой, напиши на почту, я пока не сделал этого)
Отлично
Привет. Артём, скажи, почему метод решения задачи в PHPStorm работает, а скопированная и вставленная в окно на сайте https://codingzone.io тест не проходит?
Привет. Нажимал кнопку "детали"?
Нажимала. Вот что выдало:
Детали
Input:
my string
Expected output:
MY STRING
Actual output:
HELLO WORLD
Вам нужно считать данные из stdin, а не хардкодить строку "hello world". В тесте, который у вас падает, приходит строка my string, и из неё нужно сделать строку с большими буквами.
Понятно, буду дальше пробовать.
Всё, я разобралась!!!
Отлично)
Задача.
Необходимо фразу hello world вывести как HELLO WORLD.
Зачем новую ветку создали? Отвечайте в ту же. Вопрос тот же - кнопку "показать детали" нажимали?
Нажимала. Вот что выдало:
Детали
Input:
my string
Expected output:
MY STRING
Actual output:
HELLO WORLD
Поменять в строке местами слова. Вот что получилось в PHPStorm
А так получилось решение на на сайте
Строки пишутся в одинарных кавычках.
Синтаксис array() - устарел, используйте [].
И проблема с форматированием. Делайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
Копировать сюда решение не нужно. Достаточно того, что все тесты на CZ прошли
Перевернуть строку.
Что не так? Наверное, я не правильно понял задание...
Вроде конечным результатом строка переворачивается, но тест не засчитан.
Результат
Ожидаемый вывод отличается от актуального. Проверьте ваш алгоритм.
Детали
Input:
hello world2
Expected output:
world2 hello
Actual output:
world hello
Данные нужно брать из stdin. Первый тест у вас прошёл, во втором - другая строка и другой ожидаемый результат.
Где можно подробнее почитать об stdin и stdout?
в гугле или тут
Числа Фибоначчи, я их родственник, -2 часа из жизни, и всё из-за хитрых проверок с числами 0 и 1.
Но теперь этот ответ удовлетворяет всем запросам, включая 0 и 1.
Отлично
Всё отлично, но проблема с форматированием. Сделайте отступы и переносы как в уроках. Для этого в шторме можно нажать Ctrl+Alt+L
P.S. Код для задач, на котором прошли тесты, можно не скидывать.
Не нужно скидывать код, если прошли все тесты. Если же тесты не прошли и вам что-то непонятно - задавайте вопрос)