- •1. Основные понятия
- •2. Основная структура программы
- •2. Оператор присваивания
- •3. Процедуры ввода-вывода
- •4. Операторы ветвления
- •4.1 Условный оператор if
- •4.2 Оператор варианта case
- •5. Операторы цикла
- •Цикл с предусловием while,
- •Цикл с постусловием repeat
- •Цикл с параметром for.
- •5.1 Цикл с предусловием while
- •5.2 Цикл с постусловием repeat
- •5.3 Цикл с параметром for
- •6. Процедуры передачи управления
- •7. Строковые операции
- •8. Определение типов
- •9. Массивы
- •9.1 Одномерные массивы
- •9.2 Двумерные и многомерные массивы
- •10. Процедуры и функции
- •11. Работа с файлами
5.2 Цикл с постусловием repeat
Тело цикла с постусловием заключено между служебными словами repeat и until, поэтому заключать его в блок не требуется.
repeat
тело цикла
until выражение
В отличие от цикла while, этот цикл будет выполняться, пока логическое выражение после слова until ложно. Как только результат выражения станет истинным, произойдет выход из цикла. Вычисление выражения выполняется в конце каждой итерации цикла.
Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз: например, если в цикле вводятся данные и выполняется их проверка.
5.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' :
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; { плохо! }
Это может привести к зацикливанию программы.
Рекомендации по использованию циклов
Часто встречающимися ошибками при программировании циклов являются использование в теле цикла переменных, которым не были присвоены начальные значения, а также неверная запись условия продолжения цикла. Нужно помнить и о том, что в операторе while истинным должно являться условие повторения вычислений, а в операторе repeat — условие их окончания.
Чтобы избежать ошибок, рекомендуется:
не забывать о том, что если в теле циклов while и for требуется выполнить более одного оператора, нужно заключать их в блок;
убедиться, что всем переменным, встречающимся в правой части операторов присваивания в теле цикла, до этого присвоены значения, а также проверить, возможно ли выполнение других операторов;
проверить, изменяется ли в теле цикла хотя бы одна переменная, входящая в условие продолжения цикла;
предусматривать аварийный выход из итеративного цикла по достижении некоторого предельно допустимого количества итераций (пример см. в следующем разделе).
Если по какой-либо ветви требуется записать не один, а несколько операторов, они заключаются в блок с помощью ключевых слов begin и end.
