Для реализации такого вида цикла в языке Pascal используется составной оператор, состоящий из операторов for, to, downto, do и при необходимости из операторных скобок.
Оператор цикла for имеет одну из двух форм:
for переменная:=начальное_значение to конечное_значение do оператор
или
for переменная:=начальное_значение downto конечное значение do оператор.
Содержимое текста от слова for до слова do включительно называется
заголовком цикла, а оператор после do - телом цикла. Переменная после слова for называется параметром цикла. Параметр цикла, его начальное и конечное значения должны принадлежать к одному и тому же, порядковому (целому, символьному, перечисляемому или интервальному) типу данных, т.е. параметр выступает в качестве счетчика цикла. В теле цикла параметр цикла не должен меняться принудительно.
Для цикла с ключевым словом to значение параметра цикла последовательно увеличивается на единицу при каждом прохождении цикла. Для цикла с ключевым словом downtoзначение параметра цикла при каждом повторе последовательно уменьшается на единицу.
Пример: {к величине S прибавляется 10 чисел от 1 до 10}
For i:=1 To 10 Do
S:=S+i;
Если многократно нужно выполнить несколько операторов, то они помещаются в блок операторов - между служебными словами Begin и End.
Для циклических конструкций на структурных схемах алгоритмов часто применяют следующее УГО:
На рисунке I – параметр цикла; I0 – начальное значение параметра цикла; In – конечное значение параметра цикла; h – шаг.
Цикл с предусловием.
В цикле с предусловием сначала проверяется условие, затем, в зависимости от того, истинно оно или ложно, либо выполняется тело цикла, либо следует переход к оператору, следующему за телом цикла. После завершения тела цикла управление вновь передается на проверку условия. Естественно, предполагается, что в теле цикла было обеспечено некоторое изменение входящих в условие переменных - в противном случае произойдет зацикливание.
Схема работы оператора приведена на рис.
Для реализации циклов с предусловием используется составной оператор, включающий оператор while, do, операторные скобки. В общем виде цикл реализуется записью:
while <условие> do <действие>;
Если тело цикла содержит более одного действия, то необходимо использовать операторные скобки:
while <условие > do
begin
<оператор 1>;
<оператор 2>;
...
<оператор n>;
end;
Условие представляет собой выражение логического типа и может быть простым, с использованием операций отношения (<, >, <=, >=, =, <>), или составным с использованием логических операций. Оператор после do называется телом цикла.
Перед каждой итерацией цикла условие проверяется, и если оно истинно, то выполняется тело цикла, в противном случае происходит выход из цикла.
Пример: ввести целое число; вывести все цифры введенного числа.
var a,b: integer;
Begin
readln(a);
while a<>0 do
begin
b:=a mod 10;
write(b:3);
a:=a div 10;
end;
End.
Цикл с постусловием.
Для цикла с постусловием сначала выполняется тело цикла, затем управление передается на проверку условия. В зависимости от истинности или ложности условия, тело цикла выполняется повторно или же происходит переход к оператору, следующему за телом цикла.
Схема работы оператора приведена на рис.
Для реализации цикла используется составной оператор, состоящий из операторов repeat и until. В общем виде цикл записывается так:
repeat
<действие>;
until <условие>;
В отличие от цикла while, условие проверяется после очередной итерации цикла, и если оно истинно, то происходит выход из цикла. Таким образом, операторы, образующие тело цикла repeat, выполняются, по крайней мере, один раз. Цикл repeat является циклом с постусловием, т.е. сначала выполняется тело цикла, затем проверяется условие и до тех пор, пока оно не выполнится, (т.е. пока условие ложно) цикл будет повторяться.
Пример решения предыдущей задачи с применением цикла repeat.
var a,b: integer;
Begin
readln(a);
repeat
b:=a mod 10;
write(b:3);
a:=a div 10;
until a=0;
End.
Вложенные циклы.
Циклы могут быть простыми или вложенными (цикл в цикле).
Например:
Program VlC;
var i,j:integer;
begin
for i:=1 to 5 do //внешний цикл
begin
writeln;
for j:=10 to 13 do //внутренний цикл
write(' i=',i,' j=',j);
end;
readln;
end.
Для цикла for i:=1 to 5 do телом цикла является:
begin
writeln;
for j:=10 to 13 do
write(' i=',i, ', j = ', j);
end;
Этот цикл является внешним, по отношению к нему внутренним будет цикл:
for j:=10 to 13 do с телом write (' i = ', i, j =', j).