Цикл с постусловием repeat

Тело цикла с постусловием заключено между служебными словами 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.

Цикл с параметром for

Этот оператор применяется, если требуется выполнить тело цикла заранее заданное количество раз. Параметр порядкового типа на каждом проходе цикла автоматически либо увеличивается, либо уменьшается на единицу.

for параметр := выражение_1 to выражение_2 do операторfor параметр := выражение_2 downto выражение_1 do оператор

Выражения должны быть совместимы по присваиванию с переменной цикла (о правилах совместимости мы поговорим в конце третьей лекции), оператор — простым или составным. Циклы с параметром обычно применяются при работе с массивами.

Пример 1. Программа выводит на экран числа от 10 до 1 и подсчитывает их сумму:

var i, sum : integer;begin sum := 0; for i := 10 downto 1 do begin writeln(i); inc(sum, i) end; writeln('Сумма чисел: ', sum);end.

В этом цикле переменная i автоматически уменьшается на 1.

Пример 2. Программа выводит на экран символы от'a' до'z' :

var ch : char;begin for ch := 'a' to 'z' do write(ch:2)end.

Здесь счетчик цикла ch символьного типа поочередно принимает значение каждого символа от 'a' до 'z'.

ВНИМАНИЕ Если в теле цикла необходимо выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.

Выражения, определяющие начальное и конечное значения счетчика, вычисляются один раз до входа в цикл. Цикл for реализован в Паскале как цикл с предусловием.

После нормального завершения цикла значение счетчика не определено. Фактически оно равно первому значению, для которого выполняется условие выхода из цикла, но использовать это в программах не рекомендуется. Также не следует изменять значение счетчика внутри цикла вручную, например:

for i := 1 to 10 do begin inc(i,3); ... end; { плохо! }

Это может привести к зацикливанию программы.