Оператор цикла FOR организует выполнение одного оператора или группы операторов заранее известное число раз. Достигается это с помощью управляющей переменной, называемой параметром цикла. Следующий простой пример иллюстрирует использование цикла с параметром:
for I:=1 to 10 do writeln('Привет!');
В данном примере задано десятикратное повторение оператора вывода. Переменная I является параметром цикла и последовательно принимает значения 1, 2, 3, ... , 10 , т.е. параметр цикла автоматически принимает последовательно все целые значения, начиная от начального значения (в примере - от 1) до конечного значения (в примере - до 10).
В результате выполнения данного оператора на экран дисплея будет выведено десять строчек со словом 'Привет!'.
Существует другой вариант оператора цикла FOR. Рассмотрим его на примере:
for I:=10 downto 1 do writeln(I);;
В данном примере вместо ключевого слова TO используется ключевое слово DOWNTO. И это будет означать, что параметр цикла будет уменьшаться на 1 при каждом новом выполнении тела цикла, т.е. переменная I будет принимать последовательно значения 10, 9, 8, ... , 1.
В общем виде оператор цикла с параметром имеет два варианта записи.
Вариант 1:
For <имя>:=<выражение1> TO <выражение2> DO <оператор>
Вариант 2:
For <имя>:=<выражение1> DOWNTO <выражение2> DO <оператор>
В этих операторах:
<имя> - параметр цикла, являющийся переменной порядкового типа (перечислимого или ограниченного);
<выражение1> - выражение, определяющее начальное значение параметра;
<выражение2> - выражение, определяющее конечное значение параметра;
<оператор> - тело цикла (выполняемый оператор или группа операторов, оформленных как составной оператор: begin ... end).
Таким образом, оператор цикла с параметром определяет:
- диапазон изменения значений управляющей переменной и, одновременно, число повторений оператора, содержащего тело цикла;
- направление изменения значения переменной ( возрастание или убывание);
- собственно действия, выполняемые на каждом шаге (тело цикла).
Цикл действует таким образом.
Шаг 1. Сначала вычисляются и запоминаются начальное (<выражение1>) и конечное значение (<выражение2>) параметра цикла.
Шаг 2. Параметру цикла <имя> присваивается начальное значение <выражение2>.
Шаг 3. Значение параметра цикла сравнивается со значением <выражение2>. Если параметр цикла больше конечного значения (в первом варианте оператора), или меньше конечного значения (во втором варианте оператора), то выполнение оператора цикла завершается и управление передается команде, следующей за оператором цикла.
Шаг 4. Выполняется тело цикла.
Шаг 5. После выполнения тела цикла происходит присваивание параметру цикла следующего значения (большего - в первом варианте записи, меньшего -во втором случае). Переход к шагу 3.
На использование управляющей переменной накладываются следующие ограничения:
1. Управляющая переменная должна быть описана в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип.
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной.
4. В теле цикла запрещается явное изменение значения управляющей переменной
( например, оператором присваивания).
5. После завершения оператора цикла значение управляющей переменной становится неопределенным.