Замечание. Шаг изменения параметра всегда равен 1 или –1 .

Операторы цикла. При разработке алгоритмов решения большинства задач возникает необходимость повторения ряда шагов. Для организации новых повторов (циклов) можно использовать 3 разновидности операторов цикла: с параметром, с предусловием, с постусловием. Каждую разновидность цикла можно реализовать с помощью условного оператора и безусловного перехода (см. далее).

Если число повторений тела цикла заранее известно, то применяется оператор цикла с параметром. Структурная схема представлена на
рис. 3.1. Общий вид следующий:

For переменная := нач_значение to кон_значение do тело или

For переменная := нач_значение downto кон_значение do тело

где

переменная – параметр цикла, в качестве параметра может быть использована любая переменная перечисляемого типа (например, integer);

нач_значение и кон_значение – выражения, задающие начальное и конечное значения параметра цикла соответственно;

тело – простой или составной оператор.

Тип начального и конечного значений цикла должен совпадать с типом параметра цикла. Выполнение оператора цикла начинается с проверки условия переменная <= конзн для цикла to и переменная >= конзн для цикла downto. Если оно не выполняется, то оператор тело не выполняется и управление передается следующему за циклом оператору. Если же условие истинно, то выполняется оператор тело, затем параметру цикла переменная присваивается следующее значение (цикл to) или предыдущее значение (цикл downto). Далее процесс повторяется. Если параметр цикла целого типа, то это означает его увеличение (цикл to) или уменьшение (цикл downto) на единицу при каждом вычислении расположенного в цикле оператора.

Замечание. Шаг изменения параметра всегда равен 1 или –1 .

Примеры

(Считается, что раздел переменных имеет следующий вид: var S,I: Integer; Sim : Char; L : Boolean;)

1) S:= 0; For I := 5 to 7 do Inc(S);

Операция Inc(S,K) означает S := S + K, т. е. увеличение параметра S на значение K. Если К не задан, то считается, что К = 1. (Обратная функция Dec(S,K) – уменьшение переменной S на значение К.) В примере после выполнения цикла переменная S получит значение 3.

2) S:=10; For I:= 10 downto 6 do Dec(S,2); S получит значение 0.

3) S:=0; For Sim := ‘A’ to ‘D’ do S:= S + 1; S получит значение 4.

4) S:=0; For L:=false to true do Inc(S,3); S получит значение 6.

Если в цикле необходимо выполнить несколько операторов, то используется составной оператор.

Пример

S:=0;

For I:= 1 to 3 do

begin

S:= S + Sqr(I);

P := S + 1;

end ;

После выполнения цикла переменная S станет равной 14, а переменная P равной 15.

Замечания.

1. Значение переменной параметра цикла, а также начальное и конечное значения изменять внутри цикла нельзя.

2. Для принудительного выхода из цикла в Object Pascal используют команду Break.

3. Для повторного выполнения тела цикла со следующим значением параметра цикла в Object Pascal используют команду Continue.

4. При выходе из цикла значение параметра цикла не определено.

Оператор цикла с параметром применим, если известно число повторений, шаг цикла равняется 1 или –1. В противном случае необходимо использовать 2 других типа цикла: с предусловием или постусловием.

Оператор цикла с предусловием
(рис. 3.2, а) имеет вид:

while условие do тело;

где

условие – выражение условного типа;

тело – простой или составной оператор.

Выполнение оператора начинается с вычисления значения выражения условие. Если это значение true, то выполняется оператор тело. Затем выполнение оператора цикла повторяется до тех пор, пока значение выражение условие не станет равным false. В этом случае управление передается оператору, стоящему за оператором цикла. Если значение выражения условие при первом входе в цикл равно false, то цикл не выполняется ни разу.

Замечание. Один из операторов внутри цикла должен влиять на значение условие, иначе цикл будет повторяться бесконечно – происходит «зацикливание» программы.

 

Оператор цикла с постусловием (рис. 3.2, б) похож на оператор цикла с предусловием, но условие проверяется после выполнения операторов, составляющих тело цикла. Общий вид оператора:

repeat

тело;

until условие;

где

условие – выражение логического типа;

тело – оператор или составной оператор;

Замечания:

1. Так как тело цикла заключено между ключевыми словами цикла, то при использовании в теле цикла составного оператора помещать его между операторными скобками begin и end не нужно.

2. Так как условие проверяется в конце цикла, то необходимо, чтобы цикл выполнялся как минимум один раз.

Оператор цикла с постусловием начинается с выполнения операторов внутри цикла. Затем вычисляется выражение условие. Если значение равно true, то осуществляется выход из цикла, а при значении false выполнение тела повторяется.

Замечание . Выход из цикла с предусловием осуществляется при достижении ложности условия, а из цикла с постусловием – при достижении истинности условия.

 

 

Любой тип оператора цикла может быть построен с помощью условного оператора. Например, структурная схема цикла с постусловием, построенного с помощью условного оператора, показана на рис. 3.3.

При построении такого цикла необходимо переслать информационный поток перед операторами цикла, используя метки и оператор безусловного перехода goto . Как и переменные, метки должны быть объявлены. Метки объявляются в разделе меток (label). При использовании метки необходимо указать её имя с двоеточием. Переход на метку осуществляется командой goto метка.