Цикл с постусловием repeat
Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется.
repeat тело циклаuntil выражениеВ отличие от цикла while, этот цикл будет выполняться, пока логическое выражение после слова until ложно. Как только результат выражения станет истинным, произойдет выход из цикла. Вычисление выражения выполняется в конце каждой итерации цикла.
Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз: например, если в цикле вводятся данные и выполняется их проверка.
Пример. Программа, вычисляющая квадратный корень вещественного аргументаX с заданной точностьюeps по итерационной формуле:
где y ( n–1) — предыдущее приближение к корню (в начале вычислений выбирается произвольно), y ( n ) — последующее приближение. Процесс вычислений прекращается, когда приближения станут отличаться друг от друга по абсолютной величине менее, чем наeps — величину заданной точности (пример 2.3)..
Цикл с параметром 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' :
Здесь счетчик цикла ch символьного типа поочередно принимает значение каждого символа от 'a' до 'z'.
ВНИМАНИЕ Если в теле цикла необходимо выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.
Выражения, определяющие начальное и конечное значения счетчика, вычисляются один раз до входа в цикл. Цикл for реализован в Паскале как цикл с предусловием.
После нормального завершения цикла значение счетчика не определено. Фактически оно равно первому значению, для которого выполняется условие выхода из цикла, но использовать это в программах не рекомендуется. Также не следует изменять значение счетчика внутри цикла вручную, например:
for i := 1 to 10 do begin inc(i,3); ... end; { плохо! }Это может привести к зацикливанию программы.