Чат Telegram
Группа ВКонтакте
Новый комментарий


trialex3
<?php
for ($x = 1000;$x<100000;$x++) {
    if ($x % 17 == 0) {
        echo "$x, ";
    }
}
?>
ivashkevich

Хорошо) А что со вторым заданием?

SBTesla
$prevPrev = 0;
$prev = 1;

echo $prevPrev.'<br>';
echo $prev.'<br>'
for ($x = 1; $x <= 100000;) {
    $x        = $prev + $prevPrev;
    $prevPrev = $prev;
    $prev     = $x;

    echo $x . '<br>';
}
ivashkevich

Хорошее решение, только отступы надо лишние убрать.

humanidis@gmail.com

В вышеуказанном варианте есть недоработка - вывод последнего числа фибоначчи (121393) происходит перед его проверкой на условия цикла (<= 100000). Вот мой вариант

<?php
    $arr = [0, 1];
    $prev = 0;

    for ($i = 1; $i <= 100000; ){

        $i += $prev;
        $prev = $i - $prev;

        if ($i <= 100000) {
            $arr [] = $i;
        }
    }
    var_dump($arr);

Если есть вариант, как убрать проверку перед включением числа фибоначчи в массив - подскажите)

ivashkevich

Добрый день! Спасибо, важное замечание, я и не заметил. Вы нашли настоящий баг =)

Вариант есть, но для его реализации нужно ознакомиться с оператором break из следующего урока.

Лучше будет убрать условие внутри for(...), и оставить его только внутри тела цикла, как у Вас. Только нужно будет проверять, что если текущее получившееся число стало больше верхнего диапазона, то нужно цикл прервать:

    $arr = [0, 1];
    $prev = 0;

    for ($i = 1;;){
        $i += $prev;
        $prev = $i - $prev;

        if ($i > 100000) {
            break;
        }

        $arr [] = $i;
    }
WarLikeLaux

enter image description here

ivashkevich

Тут всё верно.

WarLikeLaux
<?php
$temp = array(0,1);
echo $temp[0] . ' ' . $temp[1] . ' ';
for ($i = 1; $i < 100000 ; $i++) {
    if ($i == $temp[0] + $temp[1]) {
        $temp[0] = $temp[1];
        $temp[1] = $i;
        echo $i . ' ';
    }
}
ivashkevich

Вариант рабочий, засчитываю. Но не самый оптимальный - в вашем варианте $i увеличивается на единицу и происходит очень много лишних действий. Вместо этого лучше в $i присваивать сумму двух предыдущих значений. Как здесь.

serb2017
<?php
//* числа Фиббоначи

$i1 = 100000;
$arrayF [0] = 0;
$arrayF [1] = 1;
$arrayF [2] = 1;

for ($i = 1; $arrayF [$i] <= $i1; $i++) {
    $arrayF [$i + 1] = $arrayF [$i] + $arrayF[$i - 1];
    echo  'число Фиббоначчи  ' . $i . '=' . $arrayF [$i] . '<br>';
}
ivashkevich

Отличное решение! Только уберите пробелы между названием массива и [].

И вот эту строку можно убрать:

$arrayF[2] = 1;

P.S. вы можете редактировать свой комментарий.

serb2017
<?php
//* Числа кратные m
$n = 1;
$m = 17;
$i = 1000;
$i1 = 1000000;
for (; $i <= $i1; $i += $n) {
    if ($i % $m === 0) {
        $array1 [] = $i;
        $n = $m;
    }
}
foreach ($array1 as $i) {
    echo 'число  ' . $i . 'делится на   ' . $m . '=' . $i / $m;
    echo '<br>';
}
ivashkevich

Хорошее решение! Исправьте кодстайл как я вам уже говорил и попробуйте дать более осмысленные имена переменным.

Andreo
<?php
for ($x = 1000; $x <= 1000000; $x++) {
    if ($x % 17 == 0) {
        echo $x . '<br>';
    }
}

$arr = [0, 1];

for ($i = 0; $fib <= 100000; $i++) {
    $fib = $arr[$i] + $arr[$i + 1];
    $arr[] = $fib;
}
foreach ($arr as $fibon) {
    echo $fibon . '<br>';
}

Чет я по ходу намудрил... Зато сам пришел к этому, не глядя в комментарии других пользователей )
Только почему-то у меня выводится последнее лишнее число...

Добавил проверку в обработку массива ))

$arr = [0, 1];

for ($i = 0; $fib <= 100000; $i++) {
    $fib = $arr[$i] + $arr[$i + 1];
    $arr[] = $fib;
}
foreach ($arr as $fibon) {
    if ($fibon <= 100000) {
        echo $fibon . '<br>';
    }
}
ivashkevich

Интересное решение, засчитываю) Но советую посмотреть в интернете другие реализации. Мне больше всего нравится вот это решение.

Lungren
<?php
    for($i=1000; $i<1000000; $i++){
    if($i%17===0){
        echo $i;
        echo '';
        echo '<br/>';
    }
    }
?>
ivashkevich

Стоит учитывать, что верхняя граница тоже может подходить под условия. Тогда правильнее будет условие

$i <= 1000000
DmitryGavrilov
<?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>';
}

?>
ivashkevich

Отлично) Только стоит переименовать переменные. "Count" - это число чего-то. Просто "число" - это "number".

DmitryGavrilov

Как скажете Сенсей!

Bizzzon

Очень классное решение, сам не смог решить, начал читать комменты, и ваше решение самое простое и понятное)

DmitryGavrilov
<?php
//попробуем вывести все числа от 1000 до 1000000 делимые на 17 без остатка
//в цикле задаем начальную переменную со значением 1000, второе условаие окончание цикла 1кк, и инкремент по
for ($i = 1000; $i < 1000000; $i++) {
    //проверочное условние - если переменная делится без остатка на 17 - то выводим переменную
    if ($i % 17 == 0) {
        echo $i;
        echo '<br>';
    }
}
?>
ivashkevich

Лучше вот так, с проверкой типа:

$i % 17 === 0

А так - отличное ДЗ

DmitryGavrilov

Понял, благодарю! А почему тождественная проверка лучше?

ivashkevich

Так больше уверенности в том, что сравниваются одинаковые данные. Со временем поймёте)

1nSide

1 задача

for($i = 1000; $i <= 1000000; $i++){
    if ($i % 17 === 0){
        echo $i;
        echo ' ';
    }
}
ivashkevich

Гуд)

andropij
<?php
$Fibonachi = 1;
$sim = 0;
for ($i = 0; $i < 100000; $i++) {
    if ($Fibonachi == $i) {
        $Fibonachi += $i;
    }
}
echo $Fibonachi;
ivashkevich

Не работает

andropij
<?php
$a = 100000;
$fibonachi = 1;
$array = [0, 1];
for ($i = 1; ; $i++) {
    if ($fibonachi > $a) {
        break;
    }
    $fibonachi += $array[$i - 1];
    array_push($array, $fibonachi);
}
unset($array[$i]);
var_dump($array);

Понял свои ошибки. Думал никто не ответит, но хорошо, что я ошибался. Спасибо, что поддерживаете проект.

ivashkevich

Немного неправильно, должно начинаться на 0, 1, 1, 2... У Вас 0, 1, 2...
А проект жив)

Fox-24

Спасибо за урок!

<?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 . ',';                //Выводим оба числа в цикле.
}
ivashkevich

Хорошо, но второй пример какой-то сложный. Непонятна логика того, что вычисляется именно сумма двух предыдущих. По идее для этого должна быть использована одна переменная, и ещё две переменные для хранения двух предыдущих чисел. Здесь же это не очевидно, хоть и работает.

Dilik
for ($i = 1000; $i <= 100000; $i++) {
    if ($i % 17 == 0) {
        echo $i . '<br>';
    }
}
ivashkevich

ок!

Dilik
<?php
$arr = [0, 1];
$a = 0;
$b = 1;
for ($i = 0; $i <= 100; $i++) {
    if ($i === $a + $b) {
        $a = $b;
        $b = $i;
        $arr[] = $i;
    }
}
var_dump($arr);
ivashkevich

Ок! Но можно быстрее, мы с Вами уже это обсуждали =)

ArtemijeKA
  1.    for ($i = 1000; $i <= 1000000; $i++) {
            if ($i % 17 == 0) {
                while ($i <= 1000000) {
                    echo $i . '<br />';
                    $i+=17; // экономия ресурсов
                }
                break;
            }
        }
  2. Сомневаюсь, что это нормальное решение:
        for ($a = 0, $b = 1, $i = 0; $a <= 100000 || $b <= 100000; $i++) {
            if ($a == 0) {
                echo $a.'<br />';
            }
            if ($a < $b) {
                $a = $a+$b;
                echo $a.'<br />';
            } elseif ($a >= $b) {
                $b = $a+$b;
                echo $b.'<br />';
            }
            if ($b == 1) {
                echo $b.'<br />';
            }
        }
ivashkevich
  1. Лишний цикл while, можно просто убрать $i++ из скобок и делать его, если число не разделилось. А если разделилось, то можно уже +17 делать.
    За то, что вы в принципе задумались об оптимизации, ставлю вам большущий плюс.
  2. Ну да, что-то вы перемудрили тут. Нагуглите алгоритм нахождения чисел фибоначи, он проще, чем вы думаете. Ну или можете поискать более простое решение в комментах выше.
stasokulov@gmail.com
<?php

$a = 0;
$b = 1;

for(;$a<=100000;)
{
    echo $a.'<br>';
    $b = $b + $a;
    $a = $b - $a;   
}
ivashkevich

Отлично!

Art
//==================================
$i = 1000;
while (($i % 17) != 0)
    $i++;

for (; $i < 1000000; $i += 17)
    echo '<br>' . $i;

//==================================
$pre = 0;
for ($fib = 1; $fib < 100000; $fib += $pre) {
    echo '<br>' . $pre;
    echo '<br>' . $fib;
    $pre += $fib;
}
ivashkevich
  1. Сложно, подумайте над упрощением. Можно обойтись одним циклом.
  2. Всё хорошо.
Art
//==================================
$i = 1000;
//Находим первое число больше 1000 которое делится на 17
//в данном случае после прохода цикла $i=1003
while (($i % 17) != 0)
    $i++;

//Выводим оставшиеся числа до 1000000, просто прибавляя к $i
//каждый раз значение 17
//кстати в коде выше не совсем правильно, наверное лучше ставить в цикле <=
//в данном примере это не имеет значения, но с другими делителями можно 
//недополучить последнее значение
for (; $i <= 1000000; $i += 17)
    echo '<br>' . $i;

//Можно одним циклом, но зачем проверять каждый раз делимость на 17, 
//если можно не проверять

//хотя может можно и не проверять, и одним циклом сделать, 
//но в голову ничего не приходит(
ivashkevich

Хорошо, пусть будет с такой оптимизацией)

tmv.nika@mail.ru
$x = 0;
$y = 1;
echo $x;
for (; $z <= 100000; $z = $x + $y) {
    echo $z . ' ';
    $x = $y;
    $y = $z;
}
ivashkevich

Хорошо

ilyaOrlov

Имеет ли место такое решение второго задания?

<?php
$a = 0;
$b = 1;
$c = 0;
echo $a . ' ';
echo $b . ' ';
for (; $b < 100000; ) {
    $c = $a + $b;
    $a = $b;
    $b = $c;
    if ($b < 100000) {
        echo $b . ' ';
    }
}
ivashkevich

Вполне норм)

lordbear53@gmail.com
<?php
$arr = [0,1];
for($i = 0; $r <10000; $i++ )
{
   if($i>1)
   {
       $arr[$i] = $arr[$i-2]+$arr[$i-1];
       $r = $arr[$i];
       echo $arr[$i] . ', ';
   }else
   {
       echo $arr[$i] . ', ';
   }
}
ivashkevich

Скрипт выдает Notice-ы. Такое не засчитывается.

lordbear53@gmail.com

А что такое сам Notice? В плане перевод то заметка,но в этом случае что оно означает?

Вот что выводит у меня:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,

ivashkevich

В коде внутри условия используется неопределенная переменная. Если у вас нет ошибок - нужно включить их вывод в php.ini.

lordbear53@gmail.com

Ну вот я переделал полностью, но не могу понять, у меня ошибки включены, ну и сама переменная была задана в цикле

<?php
$x1 = 0;
$x2 = 1;

for( ; $x1<=100000 ; )
{
echo $x1.', ';
    $x2 = $x2 + $x1;
    $x1 = $x2 - $x1;
}
ivashkevich

Она у вас изначально не была определена, но использовалась в условии цикла.

for($i = 0; $r <10000; $i++ )

И откуда интерпретатор узнает на первом шаге, что это за $r? Она просто с потолка была взята.

Сейчас всё ок.

demyanovpaul@yandex.ru

Задачи в комменты писать, или можно прорешивать и у себя оставлять, спросил я решая уже до 16 урока)
Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.

for ($i = 1000;$i <= 1000000;$i++) {
    if ($i % 17 === 0) {
        echo $i;
    }
}

Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.

for ($s = 0, $i = 1, $fib = 0; $fib < 100000; $s = $i, $i = $fib, $fib = $i + $s) {
    echo $fib . ' ';
}
ivashkevich

Всё правильно, сюда домашку =)
Сделано на 5

virtual2018
<?php
// все числа кратные 17 без остатка
for ($i = 1000; $i <= 1000000; $i++) {
    if (($i % 17) == 0) {
        echo '<br>' . $i;
    }
}
// фибоначчи от 0 до 1000000
$firstFibonacci = 0;
echo '<br>' . $firstFibonacci;
$secondFibonacci = 1;
echo '<br>' . $secondFibonacci;
for ($i = 1; $i < 1000000; $i = ($secondFibonacci + $firstFibonacci)) {
        $firstFibonacci = $secondFibonacci;
        $secondFibonacci = $i;
        echo '<br>' . $i;
}

да, спасибо, поторопился скопировать. Исправил.

ivashkevich

Непонятно, для чего первый foreach.
$i % 17 - лучше явную проверку на 0.
Непонятно, для чего проверка if (($secondFibonacci + $firstFibonacci) == $i) ведь $i всегда будет равно сумме этих значений.

7vs13@inbox.ru
for ( $i = 1000; $i <= 1000000;){
    if ( $i % 17 === 0){
        echo $i;
        echo '<br>';
        $i = $i + 17;
    }
    else
        $i++;
}
ivashkevich

Хорошо, с оптимизацией)
После if и else всегда ставятся фигурные скобки, даже если одна строка - это стандарт в PHP.

Mike
<?php
$x=0;
$y=1;
$fibonachi=[0, 1,];

for ($z=0; $z<100000; ) {
    $z=$x+$y;
    $fibonachi[]= $z;
    $x=$y;
    $y=$z;
}
var_dump($fibonachi);
ivashkevich

Супер!

Bogdan

Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.

for ($numbers = 1000; $numbers < 1000000; $numbers++ ) {
    echo $numbers % 17 === 0 ? "$numbers<br>": "";
}

Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ...

for ($i = 1, $start = 0; $i < 100000; $i += $start) {
    echo "$start<br>$i<br>";
    $start += $i;
}
ivashkevich

Хорошо

tigr
<?php
$fib = [
    0,
    1
];

    for ($i=1;$i>0;) {
        $value = $fib[$i] + $fib[$i-1];
        if ($value < 100000) {
            $fib[] = $value;
            $i++;
        } else {
            $i = 0;
        }
    }
    foreach ($fib as $value) {
        echo $value . ", ";
    }
?>
ivashkevich

В целом норм, но решение с переменной $i выглядит как костыль. В качестве условия остановки цикла можно использовать $value < 100000 и обойтись без переменной $i

tigr
<?php
$fib[] = 0;
$value = 1;

    for ($i=1;$value < 100000;$i++) {
        $fib[] = $value;
        $value = $fib[$i] + $fib[$i-1];
    }

    foreach ($fib as $value) {
        echo $value . ", ";
    }
?>
ivashkevich

Стало лучше :)

SashkoUkraine
<?php

$startNumber = 1000;
$endNumber = 1000000;

for ($i = $startNumber; $i <= $endNumber; $i++) {

    if ($i % 17 == 0) {
        echo $i . "<br>";
    }
}
ivashkevich

Норм!

excent63

Доброго дня! Спасибо за урок.
Решение первого задания

<?php
for ($i = 1000; $i < 1000000; $i++){
    if ($i % 17 == 0){
        echo $i . ' ';
    }
}

А второе что то не дойдёт никак...

ivashkevich

Ок. Подсмотрите в решения других учеников.

MrElektron
<?php
$sum = [0, 1];
echo $sum[0] . '<br>';
echo $sum[1] . '<br>';
for ($i = 0; $i < 100000; $i++){
    $sum[] = $sum[$i] + $sum[$i+1];
    echo $sum[$i+2] . '<br>';
}

Вот блин, только после того как отправил, понял, что задание не совсем правильно сделано, то есть оно не подходит под условия задачи

ivashkevich

Ну так поправьте)

Bugaga159
function fibonachiNum(){
    $arr = [];
    $lastNum = 0;
    for($i=0; $i <1000; ){
        if($i == 0){
            $arr[] = $i;
            $i++;
        }else {
            $arr[] = $i;
            $prev = $i;
            $i += $lastNum;
            $lastNum = $prev;
        }
    }
    return $arr;
}
foreach (fibonachiNum() as $key => $value){
    echo $key+1 . ' - ' . $value . '<br>';
}

Надеюсь правильно решил или что то стоит переделать?

ivashkevich

В целом норм. Но:

  1. В каждой итерации цикла выполняется проверка на то, что $i равно 0. Это существенно замедляет программу. Можно просто добавить в самом начале функции первые элементы в массив и начать вычислять с третьего числа.
  2. Раз уж сделали функцию, то сделайте так, чтобы она принимала в качестве аргумента верхнюю границу, до которой нужно вычислять последовательность. Это Вам эксклюзив, со звездочкой)
Bugaga159
<?php
function fibonachiNum(int $doNum){
    $arr = [];
    $lastNum = 0;
    $arr[] = $lastNum;
    for($i=1; $i <$doNum; ){
        $arr[] = $i;
        $prev = $i;
        $i += $lastNum;
        $lastNum = $prev;
    }
    return $arr;
}

$num = 1000;
foreach (fibonachiNum($num) as $key => $value){
    echo $key+1 . ' - ' . $value . '<br>';
}
ivashkevich

Ну огонь же! =)

red.shuhov48@gmail.com
        $count = 0;
        for ($x=1000; $x <= 100000;$x++){
            if ($x % 17 == 0){
                echo $x;
                echo '<br>';
                $count++;
            }
        }

        echo $count;

        $x = 0;
        $y = 1;
        echo $x . '  ' ;

        for ($z = 0; $z <= 100000;$z++ ){

            $x += $y;
            $y = $x - $y;

            if ($x < 100000){

                    echo $x . '  ';

            }
        }
ivashkevich
  1. ОК
  2. Программа выполняется бесконечно
red.shuhov48@gmail.com

исправил,теперь вроде норм)

volodia.pavloff201343@gmail.com
<?php
$one = 0;
$two = 1;
$sum = 0;
for ($i = 0;$i <= 1000; $i++) {
  echo $sum . ', ';
  if ($one != 0) {
    $sum = $one + $two;
    $one = $two;
    $two = $sum;
  }
  else {
    $sum = $one + $two;
    $one = $two;
  }
  if ($sum > 1000) {
    break;
  }

}

?>
ivashkevich

Ок!

Fellini

По первой, подумалось, что выполнять почти сотню тысяч итераций нерационально :D
Про break уже успел в следующем уроке прочитать, пока на работе скучал.


<?php
for ($z=1000;$z<100000;++$z){
    if ($z%17===0){
        while ($z<=100000){
            echo $z.' ';
            $z+=17;
        }
        break;
    }
}
echo '<hr>';
$arrFib=[0,1];
for ($i = 2; $arrFib[$i - 2] + $arrFib[$i - 1] < 100000; ++$i){
    $arrFib[] = $arrFib[$i - 2] + $arrFib[$i - 1];
    echo $arrFib[$i].' ';
}
ivashkevich

Отлично!

ashfedor
for ($i= 1000; $i <= 10000; $i++){
    if ($i % 17 === 0){
        echo $i . ' ';
    }
}
echo '<br>';
$a = 0;
$b = 1;
echo $a . ' ' . $b . ' ';
for ($i= 1; $i <= 100000;){
   $i = $a + $b;
   $a = $b;
   $b = $i;
   echo $i . ' ';
}
ivashkevich

Отлично!

babls2332@gmail.com
for ($i = 1000; $i <= 10000; $i++) {
    if ($i % 17 === 0) {
        echo $i . '<br>';
    }
}

//Числа Фибоначчи
$fib = [0,1];
for($i=1;$i<100000;$i++)
{
    $fib[] = $fib[$i]+$fib[$i-1];
}
ivashkevich

Отлично.
С фибоначчи очень элегантное решение. Супер!

ilshatgb@mail.ru

числа которые делятся без остатка на 17

<?php
$firstNumber = 1000;
$lastNumber = 1000000;

for ($i = $firstNumber; $i <= $lastNumber; $i++) {
    if ($i % 17 === 0) {
        echo $i . ' ';
    }
}

Числа Фибоначчи

<?php
$x = 0;
$y = 1;

echo $x . ' ' . $y . '  ';

for ($i = 1; $i < 100000; $i++) {
    if ($i === $x + $y) {
        echo $i . ' ';
        $x = $y;
        $y = $i;
    }
}
ivashkevich

Всё ок)

Grewi
// Делим без остатка на 17
for($min = 1000; $min <= 10000; $min++){
    if($min % 17 === 0){
        echo $min.', ';
    }
}
echo '</br></br>';

// Число Фибоначи
$fib0 = 0;
$fib1 = 1;
echo $fib0.', '.$fib1.', ';
for($fib = 1; $fib <= 10000;){
    echo $fib.', ';
    $fibNext = $fib1 + $fib;
    $fib1 = $fib;
    $fib = $fibNext;
}
ivashkevich

Отлично!

lilit

Первое:

<?php
for ($i = 1000 ;$i <= 1000000;$i++) {
    if ($i % 17 == 0) {
        echo $i;
        echo ' ';
    }
}

Второе:

<?php

$firstNumber = 0;
$secondNumber = 1;
echo $firstNumber . ' ' . $secondNumber . ' ';
for ($sumNumber = 0;$sumNumber <= 100000;) {

    $sumNumber = $secondNumber + $firstNumber;
    $firstNumber = $secondNumber;
    $secondNumber = $sumNumber;
    echo $sumNumber;
    echo ' ';
}
lilit

Или второе можно вот так...?

<?php
$secondNumber = 1;

for ($firstNumber = 0;$firstNumber <= 100000;) {
    echo $firstNumber . ' ';
    $sumNumber = $secondNumber + $firstNumber;
    $firstNumber = $secondNumber;
    $secondNumber = $sumNumber;
}
ivashkevich

Отлично. Разницы в плане быстродействия нет, так что оба варианта годятся.

Boodoo

Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.

<?php
    for($i=1000; $i<=1000000; $i++) {
        if($i % 17 == 0) {
            echo $i . '<br>';
        }
    }
ivashkevich

Отлично

Boodoo

Найдите числа Фибоначчи меньше 100000. Числа Фибоначчи – это последовательность чисел, в которой первые два числа равны 0 и 1, а каждое последующее число равно сумме двух предыдущих чисел.
Должно получиться: 0, 1, 1, 2, 3, 5, 8 ...

<?php
    for($i=0, $j=1;$i<=100000,$j<=100000;) {
        echo $i . '<br>';
        echo $j . '<br>';
        $i += $j;
        $j += $i;
    }
ivashkevich

Отлично

che4151999@gmail.com
<?php

for ($i = 1000;$i <= 1000000;$i++) {
    if($i%17===0){
        echo $i.'<br>';
    }
}
$arr = [0, 1];
$start = 0;

for ($x = 1; $x <= 100000;) {

    $x += $start;
    $start = $x - $start;

    if ($x<= 100000) {
        $arr [] = $x;
    }
}
var_dump($arr);
ivashkevich

Зачем дважды проверяете, что число меньше определенного значения?

artemship

Задача 1:

for ($i = 1000; $i <= 1000000; $i++) {
    if ($i % 17 === 0) {
         echo $i . ' ';
    }
}

Задача 2. Почему-то напрашивается решение с помощью массива:

$fib = [0, 1];
for ($i = 1; $fib[$i] < 100000; $i++) {
    $fib[] = $fib[$i] + $fib[$i - 1];
}
unset($fib[$i]);
var_dump($fib);

Если без массива, то так:

$previous = 0;
$current = 1;
echo $previous . ' ';
for ($i = 1; $current < 100000; $i++) {
    $current += $previous;
    $previous = $current - $previous;
    echo $previous . ' ';
}
echo '<br>Всего чисел: ' . $i;
ivashkevich

Отлично

Dram

Можно вопрос, который крутится в голове уже не первый урок?
Почему при проверке четности вы используете

if ($i % 2 === 0)

а не

if ($i % 2 == 0)

???

ivashkevich

А в чем отличие этих операторов?

Dram

Я конечно же вернулся на нужный урок и прочитал.
== проверка на равенство
=== проверка на тождественное равенство.

В нашем примере все равно что использовать, а я не могу понять где на практике это не прокатит и нужно будет брать именно ===, а не ==

ivashkevich

Почти везде нужно тождественное равенство использовать. Потому что сравниваем именно 0 с 0. Зачем нам использовать приведения типов?

Dram

Т.е. если мы знаем что будем сравнивать числовые значения, то использование === уместно и даже быстрее, ибо опускается проверка типов. Верно?

ivashkevich

Верно)

Dram

Первая задачка:

<?php
$z=0;
for ($i=1000;$i >= 1000 && $i <= 1000000;$i++){
    if ($i % 17 == 0){
        $z++;
        echo $i .'<br>';
    }
}
echo "В указанном диапазоне таких чисел " . $z . " штук";
ivashkevich

$i >= 1000 - бесполезное условие. Всегда true.

Dram

вторая домашка:

<?php
$n=0;
$m=1;
echo $n .' ';
for ($i=0;$m <= 100000;){
    echo $m .' ';
    $tpm = $n + $m;
    $n = $m;
    $m = $tpm;
}
ivashkevich

Отлично

krollik1000000@gmail.com
for ($i = 1000; $i <= 1000000; $i++) {
    if ($i % 17 === 0) {
        echo $i.'<br>';
    }
};

$number = 1000;

while ($number <= 1000000) {
    if ($number % 17 === 0) {
        echo $number.'<br>';
    }
    $number++;
};

$a = 1;
$b = 1;
for ($i = 3; $i <= 100000; $i++) {
    $x = $a + $b;
    $a = $b;
    $b = $x;
    echo $x.'<br>';
}
$i = 3;
while ($i <= 100000) {
    $x = $a + $b;
    $a = $b;
    $b = $x;
    echo $x.'<br>';
    $i++;
}
ivashkevich

Отлично

Moskva

Код:

for ($i = 1000; $i <1000000; $i++){
    if ($i % 17 == 0){
        echo $i . '  ';
    }
}
echo '<br>';

for($i1=1, $i2 = 0 , $fibonacciNumbers = 0;  $fibonacciNumbers<100000; ){
    $i2 = $i1;
    $i1 = $fibonacciNumbers;
    echo $fibonacciNumbers . '<br>';
    $fibonacciNumbers = $i1+$i2;
}
ivashkevich

Отлично

Bizzzon
<?php
for($i = 1000; $i <= 1000000; $i++) {
    if ($i % 17 == 0) {
        echo $i;
        echo "</br>";
    }
}

Первая задача

ivashkevich

Отлично

Reechniy
Первая:
<?php

for ($i=1000;$i<=1000000;$i++){
    if($i%17==0){
        echo $i;
        echo '<br>';
    }
}

вторая:
<?php
$febo=array(0,1);
echo$febo[0] . ' ' . $febo[1] . ' ';
for($feboStep=1; $feboStep<=100000 ; $feboStep++) {
    if($feboStep==$febo[0]+$febo[1]) {
        $febo[0]=$febo[1];
        $febo[1]=$feboStep;
        echo$feboStep . ' ';
    }
}
ivashkevich

По логике всё хорошо. По оформлению - должны быть пробелы после echo и вокруг операторов. У вас всё в кучу слиплось.

kvakazuabr
for($i = 1000; $i < 1000000; $i++) {
        if($i%17===0) {
            echo $i . ', ';
        }
    }
ivashkevich

Отлично

AlexxxEy
/*Числа кратные 17*/
$Sum = 0;
$i=1000;
for(; $i<1000000;){
    $i++;
if($i % 17 == 0)
{
    print $i;
    print '</br>';
}
}
print '</br>';

/*Числа фибоначчи*/
$array = [0];
    print $array[0] . '</br>';
$f = 0;
for($i=1; $array[$i] < 100000; $i++){

       $array[$i + 1] = $array[$i] + $array[$i - 1];
    print $array[$i] . '</br>';
    }
ivashkevich
$i=1000;
for(; $i<1000000;){
    $i++;

В таком случае алгоритм будет начинаться не с 1000, а с 1001. Инкрементить нужно в конце итерации. Непонятно, почему не использовали классическую запись цикла for.

if($i % 17 == 0)

Почему эта строка уехала влево? Отступы должны соблюдаться. Используйте Ctrl+Alt+L в phpstorm для автоматического форматирования кода.

В числах Фибоначчи - последнее добавленное в массив число не будет выводиться.

paskelas

Самое сложное, это составить алгоритм. От количества вариантов выполнения Фибоначчи пришел в восторг. Вроде бы работает. Вариант с 2 переменными.

$a=0;
$b=1;
echo $a . ',';
echo $b . ',';
for (; $a+$b < 100000;) {
  echo $a + $b . ', ';
  $a = $a + $b;
  echo $a + $b . ', ';
  $b = $a + $b;
}
ivashkevich

Да, вариантов хватает. Отлично!

Aleks

Найдите числа от 1000 до 1000000, которые делятся на 17 без остатка.

<?php
for ($i = 1000; $i < 1000000; $i++) {
    if ($i % 17 == 0) {
        echo $i;
        echo '<br>';
    }
}
ivashkevich

Отлично

Aleks

фибоначчи

<?php
echo $prev0 = 0;
echo'<br>';
echo $prev1 = 1;
echo'<br>';
for ($i = 1; $i <= 100000;) {
    $i = $prev0 + $prev1;
    $prev0 = $prev1;
    $prev1 = $i;
    echo $i;
    echo '<br>';
}
ivashkevich

Отлично

Vladimir96

Почти весь вечер не давал покоя фибоначи, а утром пришло озарение) Все работает, надеюсь озарение не подвело :D

    //Первое задание
   for($i = 1000; $i < 1000000; $i++) {

        if($i % 17 == 0) {
            echo $i . ', ';
        }
    }

    //Второе задание
    $fiboOne = 0;
    $fiboTwo = 1;

    for($f = 0; $fiboOne <= 100000; $f++) {

        echo $fiboOne . ', ';
        echo $fiboTwo . ', ';
        $fiboOne += $fiboTwo ;
        $fiboTwo += $fiboOne;
    }
ivashkevich

Всё отлично, не подвело

romaartemov1999@gmail.com
<?php
$i = 1000;

$divisibility = [];
for (; $i<=10000; $i++)
{
    if($i % 17 == 0 )
    {
        $divisibility[] = $i;
    }
}
foreach ($divisibility as $value)
{
    echo $value . '<br>';
}
ivashkevich

Отлично

Ooleg
$seventeen = [];

for ($i = 1000; $i <= 1000000; $i++){
    if ($i % 17 === 0){
        $seventeen[] = $i;
    }
}

var_dump($seventeen);

$fibo = [];
$prevNumber = 0;
$number = 1;

for ($i = 0; $i <= 100000; $i = $number + $prevNumber){
    if ($i == 0){
        $prevNumber = 0;
        $number = 1;
        $fibo[] = 0;
        $fibo[] = 1;
    }
    else {
        $fibo[] = $i;
        $prevNumber = $number;
        $number = $i;
    }
}

var_dump($fibo);
ivashkevich
if ($i == 0){
        $prevNumber = 0;
        $number = 1;
        $fibo[] = 0;
        $fibo[] = 1;
    }

Можете сделать так, чтобы каждый раз в цикле не проверять условия? Подсказка: нужно вынести часть кода перед циклом.

Ooleg

Так?

$fibo = [];
$prevNumber = 0;
$number = 1;

array_push($fibo, $prevNumber, $number);

for ($i = 1; $i <= 100000; $i = $number + $prevNumber){
        $fibo[] = $i;
        $prevNumber = $number;
        $number = $i;
}

var_dump($fibo);
ivashkevich

Отлично

Dreft
<?php

for ($i = 1000; $i <= 100000; $i++) {
    if ($i % 17 == 0) {
        echo $i . "<br>";
    }
}

//-----------------------------------------//

$firstNum = 0;
$secondNum = 1;
echo $firstNum . ", ";
echo $secondNum . ", ";
for ($numbers = 1; $numbers <= 100000;) {
    $numbers = $secondNum + $firstNum;
    $firstNum = $secondNum;
    $secondNum = $numbers;
    echo $numbers . ", ";
}
ivashkevich

Отлично!

XXX
<?php
$a = 0;
$b = 1;
echo $a . ', ' . $b . ', ';
for (; $fibonacci <= 100000;) {
    $fibonacci = $a + $b;
    $a = $b;
    $b = $fibonacci;
    if ($fibonacci < 75025) {
        echo $fibonacci . ', ';
    }
    elseif ($fibonacci <= 100000){
        echo $fibonacci.'.';
    }
}

Хотя в данном решении лучше заменить цикл for на while

ivashkevich

А зачем эти условия про точки и запятые?

XXX

Если сделать полностью без условий, то выводится одно значение после 100000. Если поставить одно условие, чтобы показывать числа до 100000, то все работает хорошо за исключением запятой. Она ставится и после последнего числа. Для этого и сделал условия, чтобы вместо запятой получить точку.

ivashkevich

А если граница сдвинется? Решение должно быть гибким и не завязываться на конкретное число.

Clawson

Задача 1

<?php
for ($i = 1000; $i <= 1000000; $i++) {
    if ($i % 17 === 0) {
        echo $i . ' ';
    }
}

Задача 2

<?php
$fibonacciNum = [0, 1];
$endPoint = 100000;
for ($i = 1;; $i++) {
    $num = $fibonacciNum[$i] + $fibonacciNum[$i-1];
    if ($num < $endPoint) {
        $fibonacciNum[$i+1] = $num;
    }
    else {
        break;        
    }
}

foreach ($fibonacciNum as $num) {
    echo $num . ' ';
}

Во второй задаче пришлось забежать вперед, чтоб понять как выйти из цикла.

ivashkevich

Чтобы выйти из цикла можно использовать второй параметр цикла for.

Clawson

Что-то вроде (($num = $fibonacciNum[$i] + $fibonacciNum[$i-1]) < 100000)? Не хотелось в условии присваивать что-то переменной.. А если не загонять значение в переменную, получается снова придется рассчитывать сумму повторно, чтобы добавить как элемент массива. Или такое практикуется и это нормально?

ivashkevich

Чем проще тем лучше. Ваше изначальное решение тоже норм.

H3licoptero
for ($i = 1000; $i < 10000; $i++) {
    if ($i % 17 === 0) {
        echo $i . ', ';
    }
}
ivashkevich

Отлично

dliashchenko
<?php

for($i = 1000; $i <= 1000000; $i++){
    if($i % 17 == 0){
        echo $i.", ";
    }
}

$numFirst = 0;
$numSecond = 1;
echo $numFirst.", ".$numSecond.", ";

for($j = 0; $j < 100000;){
    $j= $numFirst + $numSecond;
    $numFirst = $numSecond;
    $numSecond = $j;
    echo $j.", ";
}
ivashkevich

Отлично

iev37
<?php
echo $num0 = 0 . ' ';
echo $num1 = 1 . ' ';
for ($x = 0 ; $x < 100000 ;) {
    echo $x = $num0 + $num1 . ' ';
    $num0 = $num1;
    $num1 = $x;
}
ivashkevich

Ошибки возникают.

Notice: A non well formed numeric value encountered in [...][...] on line 6
prinzplanloser0514@gmail.com
<?php
$zero = 0;
echo $zero.'<br>';
$one = 1;
echo $one.'<br>';
$fibo=0;
for (; $fibo < 100000; ) {
    $z=$zero+$one;
    echo $z.'<br>';
    $fibo=$z+$one;
    echo $fibo.'<br>';
    $zero=$fibo+$z;
    echo $zero.'<br>';
    $z=$fibo+$zero;
    echo $z.'<br>';
    $one = $z +$zero;
    echo $one.'<br>';
}

Выглядит ужасно,зато работает)

ivashkevich

Зачем столько переменных? Достаточно ведь трёх. Жесть какая-то)

ZeeCaptain
<?php
$prev=0;
$prevMem = 0;
echo $prev.'<br>';

for ($now =1; $now < 100000;) {
    $prevMem = $now;
    $now = $now + $prev;
    $prev = $prevMem;
    echo $now.'<br>';

}
ivashkevich

Супер!

kvakazuabr
for($i = 1000; $i < 1000000; $i++) {
  if($i%17==0) {
    echo $i . ' ';
  }
}
$n1=0;
$n2=1;
for(;$n1 < 100000;) {
  echo $n1 . ' ';
  [$n1,$n2] = [$n2, $n1+$n2];
  $i++;
}
ivashkevich

Отлично!

Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно
Логические задачи с собеседований