Руководство по языку B.Pascal 7

       

Операторы цикла с параметром (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);


Содержание раздела