Например у нас такая программа, где i = 2, n = 10
While i * i <= n - это цикл пока выполняется условие i * i <= n
Begin
i = i + 1;
End;
Решение
Подставляем i = 2, n = 10 (смотрим куда указывает стрелка туда и подствляем)
2 * 2 <= 10 да меньше значит цикл пока не прерывается и выполняем следующую строку:
i = i + 1 = 2 + 1 = 3; i становится равно 3 запоминаем
Подставлем в условие i * i <= n число 3
3 * 3 <= 10 да 9 меньше 10 значит цикл не прерывается строка ниже выполняется
i = i + 1 = 3 + 1 = 4; i становится равно 4 запоминаем
Подставлем в условие i * i <= n уже число 4
4 * 4 <= 10 нет 16 > 10 условие не выполняется цикл прерывается
В нашей программе это означает что этот участок кода будет выполняться пока i*i не станет больше n
var
i, n: integer;
begin
write('Введите число: ');
readln(n);
i := 2;
while i*i<=n do
begin
if n mod i = 0 then
begin
write(i, ' ');
n := n div i;
end
else
inc(i);
end;
if n > 1 then
write(n);
end.
Когда i*i станет больше n цикл прервется и будет выполняться
следующий код за этим блоком
While i * i <= n это начальное условие, если даже мы сразу введем число 3, которое сразу не удовлетворит это условие (2 * 2 <= 3)
То мы ее все равно в конце выведем, вот тут:
if n > 1 then
write(n);
то есть это условие в самом начале программы должно в первый раз обязательно выполниться, если мы даже введем числа больше 3.
Далее по ходу цикла While i * i <= n
n будет меняться (вот здесь n := n div i), а значит и критерий условия будет меняться.
Например число n = 18;
Проверим саму программу с этим примером начнем программу со строчки с while i*i<=n
2 * 2 <= 18 да меньше значит выполняем:
If 18 mod 2 = 0 да равно 0 значит выводим первый множитель 2
И значит еще меняется и само n = n div i = 18 div 2 = 9 значит n = 9
Возвращаемся в цикл while:
2 * 2 <= 9 вот n поменялся стал равным 9 , условие выполняется
If 9 mod 2 = 0 не равно 0 значит выолним inc(i) i = i + 1 = 2 + 1 = 3
Возвращаемся в цикл while:
3 * 3 <= 9 равно
If 9 mod 3 = 0 да равно 0 значит выводим второй множитель 3
И значит еще меняется и само n = n div i = 9 div 3 = 3 значит n = 3
Возвращаемся в цикл while:
3 * 3 < = 3 не равно цикл while прерывается
Переходим к строке
if n > 1 then
write(n); n в конце у нас оставался равным 3 его и выводим
Ответ: 2 3 3