Операторы цикла с параметром (for)
Операторы цикла с параметром (которые начинаются со слова for) вызывает повторяющееся выполнение оператора (который может быть составным оператором) пока управляющей переменной присваива- ется возрастающая последовательность значений.
----¬ ------------¬ ---¬ ---------¬ оператор --->¦for+-->¦управляющая+-->¦:=+-->¦исходное+---¬ for L---- ¦переменная ¦ L--- ¦значение¦ ¦ L------------ L--------- ¦ -------------------------------------------------- ¦ ---¬ ¦ -->¦to+-----¬ ---------¬ ---¬ ---------¬ L---+ L--- +-->¦конечное+-->¦do+-->¦оператор+---> ¦ -------¬ ¦ ¦значение¦ L--- L--------- L->¦downto+-- L--------- L-------
-------------------------¬ управляющая переменная --->¦идентификатор переменной+---> L-------------------------
----------¬ исходное значение ---->¦выражение+---> L----------
----------¬ конечное значение ---->¦выражение+---> L----------
В качестве управляющей переменной должен использоваться идентификатор переменой (без какого-либо квалификатора), который обозначает переменную, объявленную локальной в блоке, в котором содержится оператор for. Управляющая переменная должна иметь пе- речислимый тип. Начальное и конечное значения должны иметь тип, совместимый по присваиванию с перечислимым типом.
Примечание: О локальности и области действия рассказы- вается в Главе 8.
Когда начинает выполняться оператор for, начальное и конеч- ное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for.
Оператор, который содержится в теле оператора for, выполня- ется один раз для каждого значения в диапазоне между начальным и конечным значением. Управляющая переменная всегда инициализирует- ся начальным значением. Когда работает оператор for, значение уп- равляющей переменной (счетчика циклов) увеличивается при каждом повторении на единицу. Если начальное значение превышает конечное значение, то содержащийся в теле оператора for оператор не выпол- нятся. Когда в операторе цикла используется ключевое слово downto, значение управляющей переменной уменьшается при каждом повторении на единицу. Если начальное значение в таком операторе меньше, чем конечное значение, то содержащийся в теле оператора цикла оператор не выполнятся.
Если оператор, содержащийся в теле оператора for, изменяет значение управляющей переменной, то это является ошибкой. После выполнения оператора for значение управляющей переменной стано- вится неопределенным, если только выполнение оператора for не бы- ло прервано с помощью оператора перехода.
Если принять во внимание эти ограничения, то оператор
for V := Expr1 to Expr2 do Body;
эквивалентен оператору:
begin Temp1 := Expr1; Temp2 := Expr2; if Temp1 <= Temp2 then begin V := Temp1; Body; while V <> Temp2 do begin V := Succ(V); Body; end; end; end;
и оператор цикла:
for V := Expr1 downto Exp2 do Body;
эквивалентен операторам:
begin Temp1 := Expr1; Temp2 := Expr2; if Temp1 >= Temp2 then begin V := Temp1; Body; while V <> Temp2 o begin V := Pred(V); Body; end; end; end;
где Temp1 и Temp2 - вспомогательные переменные, тип которых сов- падает с основным типом переменной V и которые не встречаются в другом месте программы.
Приведем примеры оператора цикла с параметром:
for I := 2 to 63 do if Data[I] > Max then Max := Data[I]
for I := 1 to 10 do for J := 1 to 10 do begin X := 0; for K := 1 to 10 do X := X + Mat1[I,K]*Mat2[K,J]; Mat[I,J] := X; end;
for C := red to blue do Check(C);