В языке паскаль имеется три вида операторов цикла:
9.7.1. Оператор цикла WHILE.
Общий вид:
здесь А - булевское (логическое) выражение, ST - оператор (простой либо составной).
Выражение А вычисляется перед каждым выполнением оператора ST. Если А - TRUE, то ST выполняется и управление передается на вычисление А; если А - FALSE, то ST не выполняется и происходит выход из цикла. Если первоначальное значение А - FALSE, то ST не будет выполнен ни разу.
Пример.
В этом примере вычисляется выражение X <> 0. Если оно - "истина", (Х≠0), будут выполняться оператор С:=С+1/Х; Х: = Х-1 и управление опять будет передано на вычисление выражения Х<>0.
Как только условие X≠0 не выполняется, управление сразу передастся оператору, следующему за END; т. е. цикл повторяется пока Х≠О.
Задача 1.
Вычислить сумму
Результат: S = 4.499...
9.7.2. Оператор цикла REPEAT
Общий вид:
здесь STS - группа выполняемых операторов, A - булевское выражение.
Работает оператор так: выполняются операторы STS, вычисляется выражение А; если оно "ложь" (FALSE), то вновь выполняются операторы STS, если А - "истина" (TRUE) - цикл заканчивается. Если А - "истина" с самого начала, то операторы STS выполняются един раз. Если А никогда не принимает значение "истина", то группа операторов STS выполняется бесконечное число раз, происходит "зацикливание".
Пример. Рассмотрим такой цикл:
Сначала выполнятся операторы С:=С+1/Х; Х:=Х-1, затем проверяется условие X = 0. Если Х≠О (т. е. "ложь"), то повторяется выполнение указанных операторов; если X = 0 ("истина"), то управление передается на оператор, следующий за строкой UNTIL X = 0;
Задача 2. Решить задачу 1 с использованием оператора REPEAT
Результат S=4.499....
9.7.3. Оператор цикла FOR.
Общий вид:
здесь I - переменная цикла, N1 - начальное значение переменной цикла, N2 - конечное значение, ST - оператор (простой либо составной).
I ,N1 и N2 должны быть одного и того же скалярного типа, но не REAL. I принимает последовательные значения данного типа от N1 до N2. Если N1 и N2 - целые числа, а I - целая переменная то шаг всегда равен единице.
Пример.
Для I = 1, 2, 3, ..., 20 будет выполняться оператор A:=A-f-l; Если N1 и N2 символьного типа - например, соответственно, имеют значения А и Z, то переменная I принимает последовательные значения в порядке алфавита: А, В, С, ..., Z.
Если N1 и N2 типа COLOR (тип COLOR = (RED,YELLOW, GREEN,BLUE)), например RED n GREEN соответственно, то переменная I принимает значения RED,YELLOW,GREEN.
Цикл по убывающим значениям параметра I от N2 до N1 имеет
вид:
В этом случае параметр I принимает последовательные убывающие значения данного типа от N2 до N1.
Пример.
I изменяется от 20 до 1 с шагом -1.
Задача 3. Вычислить сумму
Оператор S: = S+1/I выполняется 50 раз соответственно для 1 = 1; 2; 3; . . . 50.
Результат S = 4.499 . . .
Замечания.
1. Внутри цикла нельзя изменять ни начальное, ни конечное значения переменной цикла, а также само значение переменной цикла.
2. Если в цикле по возрастающим значениям переменной начальное значение больше конечного, то цикл не выполняется пи разу.
Аналогично - для цикла с "DOWNTO", если начальное значение меньше конечного.
3. После завершения цикла значение переменной цикла "портится" (становится неопределенным).
Пример.
В этом фрагменте К будет принимать последовательные значения
1, 2, 3, . . ., 50. После завершения всего цикла выполнится оператор L:=I. Будет ошибкой предполагать, что L содержит число 50: пе-, ременная I "испортилась" после окончания цикла. Если необходимо тем не менее запомнить последнее значение переменной 1, то следует выполнить оператор L: = K,