ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ
·
Оператор цикла с заданным числом повторений
·
Оператор цикла с постусловием
·
Оператор цикла с предусловием
Для действий которые должны периодически повторяться в ТР
существуют циклические конструкции.
Циклы позволяют многократно выполнять отдельный оператор или последовательность
операторов, причем при этом нет необходимости записывать в тексте программы
одинаковые операторы несколько раз. Для изучения циклических конструкций
воспользуемся одним из примеров: Определить суммирования чисел от 1 до
50. Циклическую конструкцию можно составить и при помощи условного и оператора
безусловного перехода GOTO На блок – схеме это выглядит следующим образом: ,
программа?
Конструкции FOR ... ТО ( DOWNTO ) ... DO (Оператор
цикла с заданным числом повторений)
Первая из конструкций, позволяющих реализовать повторение в Паскаль - программах, называется перечисляемым циклом, циклом со
счетчиком или циклом с заданным параметром. В этом операторе обязательно
указываются следующие параметры:
- имя переменной, в которой хранится число повторений цикла (переменной
цикла пли счетчика цикла),
- некоторое начальное значение для переменной цикла (счетчика), которое
она получает при первом выполнении цикла,
- некоторое конечное значение для переменной цикла, достигнув которое
повторение цикла прекращается (условие завершения цикла).
FOR <Переменная_цикла>:=<Начальное_значение> ТО
<Конечное значение > DO Оператор;
Пока переменная цикла (счетчик цикла) изменяется, увеличиваясь до конечного
значения, будет выполняться оператор стоящий после do. Переменная цикла может
изменяться в противоположном направлении — убывать. Для этого необходимо
заменить зарезервированное слово ТО
на DOWNTO. Таким образом, форма циклической конструкции "цикл со
счетчиком" целиком определяет режим повторения. Если в цикле необходимо
выполнить несколько операторов, то применяют операторные скобки или составной
оператор.
BEGIN……….. END; пример. (блок - схема).
Оператор цикла for
имеет одну из двух форм:
for
переменная:=начальное значение to конечное
значение do
оператор
или
for
переменная:=начальное значение downto конечное
значение do
оператор
Текст от слова for
до слова do
включительно называется заголовком цикла, а оператор после do
- телом
цикла. Переменная после слова for
называется параметром цикла. Для первой формы цикла с ключевым словом to
параметр цикла меняется от начального значения до конечного значения, увеличиваясь всякий раз на единицу, а для второй формы
ключевым словом downto
- уменьшаясь на единицу. Для каждого значения переменной-параметра выполняется
тело цикла. Однократное повторение тела цикла называется итерацией цикла.
Значение параметра цикла после завершения цикла
считается неопределенным.
Если для цикла for
... to
начальное значение переменной цикла больше конечного значения или для цикла
for
... downto
начальное значение переменной цикла меньше конечного значения, то тело цикла не
выполнится ни разу.
Если цикл используется в процедуре или функции, то
переменная-параметр цикла должна быть описана как локальная.
Тело цикла for
в Pascal ABC не может быть пустым. Это
сделано для защиты от часто встречающейся у начинающих ошибки ставить после do
точку с запятой.
Изменение переменной-параметра цикла внутри цикла
является логической ошибкой. Например, следующий фрагмент со
вложенным оператором for
является ошибочным:
for
i:=1 to 10 do
for
i:=1 to 5 do
write(i);
Переменная-параметр цикла может иметь любой порядковый
тип (целый, символьный, перечислимый или интервальный). При этом типы
начального и конечного значения должны соответствовать типу параметра цикла.
Например:
var
en: (red,green,blue,white);
c: char;
...
for
en:=red to blue do
write(Ord(en):2);
for
c:='a' to 'z' do
write(c);
В некоторых программах не всегда задаются начальные и конечные параметры при которых должен выполняться цикл. Они могут
формироваться в процессе выполнения программы. В таких случаях в ТР имеются операторы, которые позволяют организовать
подобный цикл. Это операторы цикла с постусловием и с предусловием.
Конструкции REPEAT ... UNTIL (оператор цикла с постусловием)
При использовании в программе циклической конструкции последовательность операторов (тело цикла)
обрамляется зарезервированными словами REPEAT и UNTIL. В любом случае последовательность операторов, входящих в тело цикла,
выполняется один раз, после чего проверяется условие завершения цикла,
записанное следом за зарезервированным словом UNTIL. Если это условие
выполняется, цикл завершается. В противном случае — тело цикла повторяется еще
раз, после чего снова проверяется условие завершения цикла: REPEAT
<Операторы>;
UNTIL <Условие>;
Т.к. зарезервированные слова REPEAT и UNTIL обрамляют тело
цикла, дополнительные пары операторов BEGIN ... END уже не нужны, хотя их использование не запрещено.
(* вернемся к нашему примеру вычисления суммы
чисел от 1 до 50 и преобразуем программу так, чтобы в ней использовался цикл
типа REPEAT ... UNTIL, *)
Здесь необходимо учесть, что для увеличения на 1 значения переменной i на каждом шаге цикла требуется
отдельный оператор. Это связано с тем, что цикл REPEAT... UNTIL, в отличие от цикла FOR ... ТО ... DO, не делает это автоматически.
Оператор цикла repeat имеет
следующую форму:
repeat
операторы
until условие
В отличие от цикла while,
условие вычисляется после очередной итерации цикла, и если оно истинно, то
происходит выход из цикла. Таким образом, операторы, образующие тело цикла
оператора repeat, выполняются
по крайней мере один раз.
Если условие всегда оказывается ложным, то может
произойти зацикливание:
repeat
write(1);
until 2=1;
Конструкции WHILE ... DO (Оператор цикла с
предусловием)
Теперь рассмотрим третью и последнюю форму оператора цикла WHILE <условие> DO <оператор>;
Между конструкциями REPEAT ... UNTIL и WHILE ... DO имеются существенных отличия.
1. В конструкции WHILE ... DO проверка условия
выхода выполняется в начале, а не в конце цикла, поэтому, если условие не
удовлетворяется до начала выполнения цикла, то тело цикла игнорируется и
выполнятся оператор, стоящий сразу же после окончания тела цикла.
2. В конструкции WHILE ... DO условие выхода
удовлетворяется, если выражение, определяющее условие выхода, ложно, а в
конструкции REPEAT ... UNTIL —если это выражение истинно.
3. Между зарезервированными словами REPEAT и UNTIL может размещаться несколько операторов, в то время как
конструкция WHILE ... DO может содержать только один. Для размещения внутри
конструкции WHILE DO нескольких
операторов используется составной
оператор : WHILE <Условие >DO BEGIN <Оператоы>; END;
пример
Оператор цикла while имеет
следующую форму:
while условие do
оператор
Условие представляет собой выражение логического типа, а
оператор после do называется телом цикла.
Перед каждой итерацией цикла условие вычисляется, и если оно истинно, то
выполняется тело цикла, в противном случае происходит выход из цикла.
Если условие всегда оказывается истинным, то может
произойти зацикливание:
while 2>1 do
write(1);