НИПОНЯТНАЯ ПРОСТАЯ ПРОГРАМмА

  • Автор темы typak
  • Дата начала
T

typak

#1
Тут неделю как пхп учу дошол до циклов все более менее понятно а от одна програмка никак немогу разобрать ка она работает.
ПРОГРАММА ДЛЯ НАХОЖДЕНИЯ ПРОСТЫХ ЧИСЕЛ
КОД ПРОГРАММЫ:
Код:
<?php
echo "<h1>Программа нахождения простых чисел</h1><p>";
$flag = NULL;
for ($i = 2; $i < 100; $i++)
{
for ($j = 2; $j < $i; $j++)
{
if (($i%$j) !=0 ) continue;
else
{
$flag = true;
break;
}
}
if (!$flag) echo $i." ";
$flag = false;
}
?>
В результате выводит:
Программа нахождения простых чисел
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Все работает правильно так как и должно без ошибок тока как? :mellow:
Щас будем разбиратся:


круг 1:

i =2 i<100 да //выполняетса подцикл
j = 2 j<i нет // выход с цыкла переход к третей части
if !0 -> true вивод i=2 // с первой двойкой понятно вроде

круг 2: // i = 3, а j=2 неизменилось так как вроде условие внутреннего цикла невыполнилось
i = 3 i<100 да // переходим к подциклу к оператору 1
j = 2 j<i да // переходим к первому оператору подцикла
if (3%2 !=0)-> TRUE->continue// конец текущей итерации подцикла начало новой j прибавило 1 j=3
j = 3 j<i = 3 < 3 -> false // выход из подцикла-переход к следующему оператору ко второму оператору внешнего цикла
if !0 -> true вивод i=3 // Вывелась вроде тройка

ИДЕМ ДАЛЬШЕ ЩАС ОШИБКА нифакт шо ее раньше небыло
круг 3: // i стало 4, J = 3
i= 4 i<100 да // переход к подциклу (оператору 1)
j=3 j<i да //переход к первому оператору подцикла
if (4%3 !=0)-> TRUE->continue// конец текущей итерации подцикла начало новой j прибавило 1 j=4
j = 4 j<i = 3 < 3 -> false // выход из подцикла-переход к следующему оператору ко второму оператору внешнего цикла
if !0 -> true вивод i=4 // Вывелась вроде четверка


так от по моим рассуждением получаетса что оно выведет все цифры подряд 1 2 3 4 5 ... 100

НАСАМОМ ЖЕ ДЕЛЕ АНА ВЫВОДИТ СЛЕДУЩИЕ ЦИФРЫ:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97


код програмы правельный все работает правильно тока я немогу догнать как она так выводит. кто шарит мож опишет или намикнет где я ошибся :) :) :)
ВЫШКА У МЕНЯ ПЯТИФАН БЫЛА НАМИКНИТЕ РАЗБЕРУСЬ ;)
 
T

typak

#3
ААААА ТЕРЬ ВСЕ ЯСНО:

Я просто считак шо J изменилось и када мы входим и на новый цикл

вообщем помоему ясно где я ошибался:
внешний цикл неизменяется i растет
внутренний цикл при каждой новой итерации i++ остаетса равным j=2 начинаетса поновой так как мы вышли из цикла

ща попробуем расписать поновому:

круг 3 // i=4: j=2 j новый цикл тошо мы из него вышли в прошлий раз!!!
i=4 i>100 да // первый оператор
j=2 j<i да // первый оператор подцикла
if i%j !=o -> false // перходим к камандам else
flaf= true и break // вообщем выход с подцикла
идем на вывод вообщем ничо невыводитса так как !true = false //опа норм 4 невывидась как и должно быть идем дальше ....

круг 4 //i=5; j=2
i=4 i>100 да // первый оператор
j=2 j<i да // первый оператор подцикла
if i%j !=0 -> true continue //следущая итерация
j = 3 j < i да //
if i%j !=0 -> true; continue //следущая итерация
j = 4 и опять continue //следущая итерация
J = 5 j < i нет //прерываем внутренний цикл
выводим 5 // О_О терь все работает так как и должно так как и работало

Спасибо OKEN помог понять где я нитак расписывал