3.10.1. Общее описание
Оператор-начала-цикла и оператор-конца-цикла служат для создания циклов. Общая синтаксическая форма операторов начала-цикла и конца-цикла следующая:
FOR v = начальное-значение ТО конечное-значение STEP шаг NEXT v
где v - простая-числовая-переменная, а начальное-значение, конечное-значение и шаг суть арифметические-выражения; указание STEP шаг является необязательным.
3.10.2. Синтаксис
1) цикл-с-шагом = строка-цикла тело-цикла
2) тело-цикла = блок * строка-конца-цикла
3) строка-цикла = номер-строки оператор-начала-цикла конец-строки
4) строка-конца-цикла = номер-строки оператор-конца-цикла конец-строки
5) оператор-начала-цикла = FOR управляющая-переменная равно начальное-значение ТО конечное значение (STEP приращение) ?
6) управляющая-переменная = простая-числовая-переменная
7) начальное-значение = арифметическое-выражение
8) конечное-значение = арифметическое-выражение
9) шаг = арифметическое-выражение
10) оператор-конца-цикла = NEXT управляющая-переменная
3.10.3. Примеры
1) | 100 FOR I=ITOI0 | |||
... другие блоки или строки | ||||
200 NEXT I | ||||
5) | FORI=А ТО В STEP-I | |||
10) | NEXT C7 |
3.10.4. Семантика
Оператор-начала-цикла и оператор-конца-цикла описываются совместно. Физическая последовательность операторов, включающая оператор-начала-цикла и все последующие операторы вплоть до первого оператора-конца-цикла с той же управляющей переменной, называется циклом-с-шагом. Циклы-с-шагом могут быть физически вложенными, т.е. цикл-с-шагом может содержать в себе другой цикл-с-шагом, но они не могут пересекаться, т.е. цикл-с-шагом, который содержит оператор-начала-цикла или оператор-конца-цикла, должен содержать весь цикл-с-шагом, начинающийся или, соответственно, кончающийся этим оператором.
Физически вложенные операторы не могут иметь одну и ту же управляющую-переменную.
При отсутствии указания STEP в операторе-начала-цикла приращение по умолчанию принимается равным +I.
В терминах других операторов можно описать действие оператора-начала-цикла и оператора-конца-цикла следующим образом:
FOR = начальное-значение ТО конечное-значение STEP шаг (блок) | ||||
NEXT | ||||
эквивалентно | ||||
LET ownI = конечное-значение | ||||
LET own2 = шаг | ||||
LET v = начальное значение | ||||
... | ||||
строкаI IF (v-ownI)*SGN(own2) > 0 THEN строка 2 | ||||
(блок) | ||||
LET v = v+own2 | ||||
GOTO строка I | ||||
строка 2 REM |
Здесь v - любая простая-числовая-переменная, ownI и own2 - переменные, связанные с конкретным циклом-с-шагом и не доступные программисту; строка I и строка 2 - номера-строк, связанные с конкретным циклом-с-шагом и не доступные программисту. Переменные ownI и own2 отличаются от аналогичных переменных, связанных с другими циклами-с-шагом.