Этот цикл используется, если известно условие прекращения цикла, но неизвестно количество итераций.
While <выражение типа Boolean> do <оператор>;
В данном случае <выражение типа Воо1еап> - это условие продолжения цикла (пока условие - истинно, тело цикла выполняется).
Если условие принимает с самого начала значение false, то тело цикла вообще не выполняется.
Конструкция цикла предусмотрена на случай того, что телом является только один оператор, который непосредственно следует за структурой While... do, а для включения в тело цикла нескольких операторов необходимо объединить их в один составной.
Примеры:
1)
While x < у do х: = х - 1 ;
2)
while (a < m) or (b < n) do
begin
a : = a - t ;
b : = b - z ;
end;
При организации цикла While может возникнуть ситуация "зацикливания". Чтобы этого не произошло, по крайней мере, один из повторяемых в теле цикла операторов должен влиять на значение условия прекращения цикла, иначе он будет выполнятся бесконечно.
Примеры:
1)
While true do Writeln('2=2') ;
Данный цикл будет выполнятся бесконечно, так как в теле цикла нет оператора, который бы мог изменить условие продолжения цикла.
2)
while (a < 100) or (a > 100) or (a = 100) do Writeln(a);
В этом цикле условие его продолжения будет всегда выполняться (а – переменная целого типа), а в теле цикла нет оператора влияющего на условие его продолжения. Следовательно цикл будет продолжаться бесконечно.
Задача. Используя алгоритм Евклида, найти НОД (наибольший общий делитель) двух чисел.
Алгоритм Евклида:
1) Если переменные неравны, то заменить большее значение на разность большего и меньшего и перейти на начало пункта 1).
2) Если же переменные равны, выбрать любое значение в качестве результата и закончить алгоритм.
program p7_7;
var
а, b, х, у: integer;
begin
Write('Введите а и b: ');
Readln (a, b);
х := а; {запоминаем начальные значения а и b}
у:=b;
While a <> b do if a > b then a:= a - b else b:= b – a;
Writeln (‘ HOД( ‘, x, ', ' , y, ') = ' , a);
end.