Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2- Введение в программирование.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
753 Кб
Скачать
☆

Оператор цикла "до" (с постусловием)

Рассмотренный ранее оператор "Пока" решает выполнять свое тело или нет, еще до первой иттерации. Если это не соответствует логике алгоритма, то можно использовать оператор цикла "До" с постусловием, который решает делать или нет следующую иттерацию лишь после завершения предыдущей. В этом операторе тело цикла будет выполнено по крайней мере один раз. Т.о. эти операторы цикла различаются только первым шагом, далее они веду себя идентично. Формат:

repeat <операторы> until <условие>

Операторы между словами repeat и until образуют тело цикла. В теле можт быть несколько операторов, при этом слова begin и end не требуются, их функции выполнют слова repeat и until (перед until можно не ставить ";"). Cравнение с циклом "Пока", где один оператор в теле.

Условие - логическая переменная, константа или выражение с логическим результатом. В отличии от цикла "Пока", если условие имеет значение True, то цикл завершается. Т.е.

Цикл "Пока" - "пока условие истинно, выполнять операторы тела";

Цикл "До" - "выполнять тело цикла, пока не станет истинным условие, т.е. пока оно ложно";

Известна простая конструкция "вечного цикла", в котором тело - пустой оператор

repeat until False;

Оператор цикла с параметром (цикл по счетчику)

Рассмотренные операторы цикла "Пока" и "До" (они классические) не слишком удобны для организации "строгих" циклов, которые должны быть проделаны данное число раз. Цикл с параметром вводится именно для таких случаев. Синтаксис следующий

for <параметр цикла> := <мл.зн.> to <ст.зн.> do <оператор>

Параметр цикла - переменная порядкового типа, к этому же типу должны относиться младшее и старшее значении. На первом шаге параметру цикла присваивается младшее значение, после чего идет его наращивание с постоянным шагом, равным интервалу между двумя ближайшими значениями в типе, к которому относится параметр цикла (для целочисленных типов - это 1, для символьного - от одного символа к другому при увеличении кода на 1, и т.д.). Например,

Var

I : Integer; C : Char ; B : Boolean;

E : (E1,E2,E3,E4);

Begin

for I := -10 to 10 do Write(I);

for C := 'a' to 'z' do Write(C);

for B := False to True do Write(B);

for E := E1 to E4 do {здесь оператор - составной}

begin

I := ORD(E);

Write(I)

end

End.

Изменение параметра может быть не только возрастающим, как в рассмотренных примерах, но и убывающим. В этом случае несколько изменяется синтаксис:

for <параметр цикла> := <ст.зн.> downto <мл.зн.> do <оператор>

Условие, управляющее работой оператора for проверяется перед выполнением тела цикла. Поэтому, если условие не выполняется в самом начале работы, то тело цикла не будет выполнено ни разу. Например, в таком цикле:

for I := 4 downto 5 do …

Запрещается изменять параметр цикла и его младшее и старшее значения (в том случае, если они заданы переменными или выражениями с ними) изнутри тела цикла. Параметр цикла не может участвовать в построении диапазонов этого цикла (for I := I-5 to I+5 do …).

В тех. описании к ТР отмечается, что после выполнения цикла for значение его параметра не определено. На самом деле скорее всего оно будет иметь конечное значение. Тем не менее корректнее его будет переприсвоить. Исключение выход из цикла с помощью goto. В этом случае значение параметра будет таким, каким оно было к моменту исполнения goto.

Циклы с параметром - быстрые и генерируют компактный код. Но они обладают существенным недостатком - параметр должен принадлежать порядковому типу, а шаг не может быть изменен. Для построения циклов с вещественным параметром и меняющимся шагом приходится обращаться к циклам с условием (цикл "До" и цикл "Пока").

Циклы for допускают вложенность при условии, что никакой из вложенный циклов не использует и не модифицирует переменные - параметры внешних циклов.