Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется.
repeat
тело цикла
until выражение
В отличие от цикла while, этот цикл будет выполняться, пока логическое выражение после слова until ложно. Как только результат выражения станет истинным, произойдет выход из цикла. Вычисление выражения выполняется в конце каждой итерации цикла.
Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз: например, если в цикле вводятся данные и выполняется их проверка.
Пример. Программа, вычисляющая квадратный корень вещественного аргументаX с заданной точностьюeps по итерационной формуле:
где y(n–1) — предыдущее приближение к корню (в начале вычислений выбирается произвольно), y(n) — последующее приближение. Процесс вычислений прекращается, когда приближения станут отличаться друг от друга по абсолютной величине менее, чем на eps — величину заданной точности (пример 2.3)..
program square_root;
var X, eps, { аргумент и точность }
Yp, Y : real; { предыдущее и последующее приближение }
begin
repeat
writeln('Введите аргумент и точность (больше нуля): ');
readln(X, eps);
until (X > 0) and (eps > 0);
Y := 1;
repeat
Yp := Y;
Y := (Yp + X / Yp) / 2;
until abs(Y - Yp) < eps;
writeln('Корень из ', X:6:3, ' с точноcтью ', eps:7:5,
'равен ', Y:9:5);
end.