Циклы

Циклы WHILE и REPEAT

Циклы WHILE и REPEAT обеспечивают повторение группы выражений, пока верно условное логическое выражение. Если условное выражение всегда истинно, то цикл становится бесконечным.

Синтаксис:

WHILE <Conditional Boolean expression> DO

  <Expressions — loop body>

END_WHILE

Условие в цикле WHILE проверяется до начала цикла. Если логическое выражение изначально имеет значение FALSE, тело цикла не будет выполнено ни разу.

Синтаксис:

REPEAT

   <Expressions — loop body >

UNTIL <Conditional Boolean expression>

END_REPEAT

Условие в цикле REPEAT проверяется после выполнения тела цикла. Если логическое выражение изначально имеет значение FALSE, тело цикла будет выполнено один раз. Правильно построенный цикл WHILE или REPEAT обязательно должен изменять переменные, составляющие условие окончания в теле цикла, постепенно приближаясь к условию завершения. Если этого не сделать, цикл не закончится никогда.

Пример:

iMax := 5+х;

iPoly := 2*х*х + 1;

WHILE ci < iMax DO

   Var := Varl + iPoly;

   ci := ci + 1;

END_WHILE

Цикл FOR

Цикл FOR обеспечивает заданное количество повторений группы выражений.

Синтаксис:

FOR <Integer counter> := <Initial value> ТO <End value> [BY <Step>] DO

   <Expressions — loop body>

END FOR

Перед выполнением цикла счетчик получает начальное значение. Далее тело цикла повторяется, пока значение счетчика не превысит конечного значения. Счетчик увеличивается в каждом цикле. Начальное и конечное значения и шаг могут быть как константами, так и выражениями. Счетчик изменяется после выполнения тела цикла. Поэтому если задать конечное значение меньшее начального, то при положительном приращении цикл не будет выполнен ни разу. При одинаковых начальном и конечном значениях тело цикла будет выполнено один раз. Часть конструкции BY в скобках необязательна, она определяет шаг приращения счетчика. По умолчанию счетчик увеличивается на единицу в каждой итерации. В качестве счетчика можно использовать переменную любого целого типа.

Пример:

Varl := 0;

FOR cw := 1 ТO 10 DO

   Varl := Varl + 1;

END_FOR