Оператор цикла for
Оператор цикла for
имеет одну из двух
форм:
for
переменная
:=
начальное значение
to
конечное значение
do
оператор
или
for
переменная
:=
начальное значение
downto
конечное значение
do
оператор
Кроме того, переменную можно описать непосредственно в заголовке цикла:
for
переменная
:
тип
:=
начальное значение
to
или
downto
конечное значение
do
оператор
или
for var
переменная
:=
начальное значение
to
или
downto
конечное значение
do
оператор
В последнем случае используется автоопределение типа переменной по типу начального значения. В двух последних случаях область действия объявленной переменной распространяется до конца тела цикла, которое в данном случае образует неявный блок. Вне тела цикла такая переменная недоступна, поэтому следующий цикл может использовать переменную с тем же именем:
for var i := 1 to 10 do
Print(i);
for var i := 1 to 5 do
Print(i*i);
Текст от слова for
до слова do
включительно называется заголовком цикла, а
оператор после do
- телом цикла.
Переменная после слова for
называется
параметром цикла.
Для первой формы цикла с ключевым словом to
параметр цикла меняется от начального значения до
конечного значения, увеличиваясь всякий раз на единицу, а для
второй формы ключевым словом downto
-
уменьшаясь на единицу. Для каждого значения переменной-параметра
выполняется тело цикла. Однократное повторение тела цикла
называется итерацией цикла. Значение параметра цикла после завершения цикла считается неопределенным.
Переменная-параметр цикла может иметь любой порядковый тип. При этом начальное и конечное значения должны быть совместимы по присваиванию с переменной-параметром цикла.
Например:
var en: (red,green,blue,white);
...
for en := red to blue do
write(Ord(en):2);
for var c := 'a' to 'z' do
write(c);
Если для цикла for
... to
начальное значение переменной цикла больше конечного значения
или для цикла for
...
downto
начальное значение переменной цикла
меньше конечного значения, то тело цикла не выполнится ни разу.
Если цикл используется в подпрограмме, то переменная-параметр цикла должна быть описана как локальная. Наилучшим решением в PascalABC.NET является описание переменной в заголовке цикла.
Изменение переменной-параметра цикла внутри цикла является
логической ошибкой. Например, следующий фрагмент со вложенным оператором
for
является ошибочным:
for i := 1 to 10 do
i -= 1;