Оператор цикла с параметром

Цикл с параметром используется обычно в тех случаях, когда заранее (до начала выполнения цикла) можно определить количество повторений цикла. Цикл с параметром служит для организации N-кратного выполнения тела цикла для значений параметра цикла из некоторого упорядоченного дискретного множества.

Оператор цикла с параметром имеет две формы записи:

 

1. for <параметр> := <выражение_1> to <выражение_2> do

<тело_цикла>;

2. for <параметр> := <выражение_1> downto <выражение_2> do

<тело_цикла>;

 

Параметр (его еще называют параметром цикла, управляющей переменной, индексом, счетчиком) – это переменная дискретного типа, т.е.типа, на множестве значений которого определены понятия "предыдущий элемент" и "последующий элемент". Чаще всего используются переменные типа integer (но допустимы char и boolean). Не разрешен к применению параметр типа real.

Выражение_1 (начальное значение параметра) – это константа, переменная или выражение того же типа, что и параметр цикла.

Выражение_2 (конечное значение параметра) имеет тот же способ определения, что и Выражение_1.

Тело цикла – это оператор, следующий за ключевым словом do. Если необходимо повторить несколько операторов, то они заключаются в операторные скобки begin и end, и телом цикла становится составной оператор.

Рассмотрим процесс выполнения операторов цикла с параметром:

1. Цикл for/to:

for i := a to b do

<тело цикла>;

Параметру цикла i присваивается начальное значение a. Оно сравнивается со значением b. Если в упорядоченном множестве (на котором определены значения i и b) i предшествует b или совпадает с ним, то выполняется тело цикла. После этого параметру i присваивается значение, следующее в указанном множестве за тем, которое у него было (т.е. вычисляется значение функции Succ(i) ). Затем происходит возврат на сравнение текущего значения i с конечным значением b. Если при этой проверке выясняется, что текущее значение i следует за конечным значением b, то происходит выход из цикла – выполняется следующий за телом цикла оператор.

2. Цикл for/downto:

for i := a downto b do

<тело цикла>;

Этот цикл выполняется следующим образом. Параметру цикла присваивается начальное значение a. Значение параметра сравнивается с конечным значением b. Если в упорядоченном множестве оно предшествует конечному значению, то происходит выход из цикла. В противном случае выполняется тело цикла, переменной i присваивается значение Pred(i) и происходит возврат на сравнение текущего значения i с конечным значением b.

Замечания:

1. Цикл с параметром удобно использовать в тех случаях, когда количество повторений цикла можно определить заранее.

2. Тело цикла for может не выполниться ни разу. Это произойдет, если в упорядоченном множестве конечное значение параметра цикла предшествует начальному (в случае цикла to) или начальное значение предшествует конечному (в случае цикла downto). Так происходит потому, что проверка условия выполнимости цикла for происходит перед выполнением цикла. Поэтому на Паскале цикл с параметром является частным случаем цикла с предусловием и имеет такую же структурную схему.

3. Параметр цикла не должен изменяться каким-либо оператором внутри цикла. Параметр может произвольным образом использоваться в выражениях в теле цикла, но присваивать ему новое значение внутри тела цикла нежелательно, т.к. это может привести к непредсказуемым последствиям.

4. Параметр цикла, как и любая другая переменная, должен быть описан в разделе переменных.

5. После выполнения оператора цикла параметр цикла считается неопределенным и не должен использоваться в последующих операторах без предварительного присвоения ему значения.

6. Вход в тело цикла возможен только через его заголовок.

7. Разрешено использование вложенных циклов. Их реализация должна производиться по тем же правилам, что и для циклов с предусловием.