Цикл типа While

Этот цикл используется, если известно условие прекращения цикла, но неизвестно количество итераций.

 

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.