В случаях, когда число повторений заранее известно, для организации циклической обработки информации применяется оператор повтора FOR.
Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла, или управляющей переменной.
Оператор повтора FOR состоит из заголовка и тела цикла:
прямой вид цикла:
FOR <параметр цикла> := TO DO <оператор>;
обратный вид цикла:
FOR <параметр цикла> := DOWNTO DO <оператор>;
где
S1 и S2 – выражения, определяющие соответственно начальное и конечное значения параметра цикла;
FOR … DO – заголовок цикла;
<оператор> – тело цикла.
Тело цикла может являться простым или составным оператором. Оператор FOR обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного. Заголовок оператора повтора FOR определяет:
– диапазон изменения значений управляющей переменной (параметра цикла) и одновременно число повторений оператора, содержащегося в теле цикла;
– направление изменения значения параметра цикла (возрастание – to или убывание – downto).
Пример:
for I:= 1 to 100 do Read(M[I]); {Чтение элементов массива}
for I: = 100 downto 1 do Write(M[I]); {Вывод элементов массива}
При первом обращении к оператору FOR вначале вычисляются выражения S1, S2 и осуществляется присваивание «параметр цикла>:=51. После этого циклически повторяются следующие действия.
1. Проверяется условие <параметр цикла>:<=S2.
2. Если условие выполнено, то оператор FOR продолжает работу (выполняется оператор в теле цикла), если условие <параметр цикла>:<=52 не выполнено, то оператор FOR завершает работу, и управление в программе передается на оператор, следующий за циклом.
3. Значение управляющей переменной изменяется на +1 (TO) или -1 (DOWNTO) и далее с п. 1. Обратите внимание, что шаг изменения управляющей переменной – единица.
На использование управляющей переменной (параметра цикла) в цикле FOR накладываются следующие ограничения.
1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип.
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кроме вещественного.
4. В теле цикла запрещается явное изменение значения управляющей переменной (например, при помощи оператора присваивания).
5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора не было прервано оператором перехода.