Между зарезервированными словами Repeatи Untilможет быть произвольное количество операторов, разделенных точкой с запятой. В частном случае здесь может быть лишь один пустой оператор. В отличие от цикла While группу операторов в теле цикла Repeat не нужно заключать в операторные скобки Begin … End.
Оператор Repeat выполняется до тех пор, пока не станет истинным логическое выражение, записанное после слова Until. При этом тело цикла (операторы между Repeatи Until) выполняется по крайней мере один раз. Выражение после Untilдолжно иметь тип boolean.
В теле цикла Repeat должно изменяться значение выражения, записанного после слова Until, таким образом, чтобы это выражение в конечном счете приняло значение true, в противном случае будет иметь место зацикливание программы.
Схема выполнения:
Пример 1. Алгоритм Евклида.
Program Evklid3;
Varm,n,d,r : word;
Begin
Read(m,n); Writeln('m = ',m,' n = ',n);
If m<n then { обмен значений m и n, }
Begin { если n > m }
r:=m; m:=n; n:=r;
End;
Ifn>0 then
Repeat
r:=m mod n;
m:=n; n:=r;
Until n=0;
d:=m; Writeln('d = ',d)
End.
Если бы в программе не была предусмотрена проверка n > 0, то оператор Repeat выполнялся бы при любых значениях исходных данных, в том числе и при n = 0. В последнем случае в теле цикла имело бы место деление на нуль, что привело бы к прерыванию работы программы.
Оператор цикла с постусловием, как и оператор цикла с предусловием, в основном применяется для реализации итерационных процессов.
Пример 2. Итерационная формула Ньютона для .
Program Newton2;
Consteps = 0.00001;
Var x,y,yn : real;
Begin
Ввод и печать x
y:=x;
Ifx>0 then
Repeat
yn:=y;
y:=0.5*(yn+x/yn);
Until abs(y-yn)<eps;
Печать y
End.
Здесь в отличие от программы Newton1, использующей оператор While, не требуется до начала цикла искусственно создавать разницу между переменными y и yn, превышающую значение eps.
Пример 3. Определить значение и порядковый номер наибольшего числа Фибоначчи, не превышающего заданного значения b.
Числа Фибоначчи получаются с помощью рекуррентного отношения
Примечание. Поскольку после окончания цикла While будет получено fi2 > b, а в самом теле цикла произведен перенос , то ближайшим наибольшим числом Фибоначчи, не превышающим заданную величину b, является значение переменной fi.