В Pascal используется три вида циклов.
В ситуации, когда необходимо повторение каких-то операторов определенное количество раз, без учета каких-либо условий, то используется цикл FOR. В этом цикле используется целочисленный индекс, который увеличивается на 1 до тех пор, пока цикл не достигнет конечного значения (его еще называют цикл со счетчиком).
Например, цикл For i := 3 to 7 do write ('A'); выведет на экран "AAAAA".
Отсчет в цикле также возможен и в сторону уменьшения индекса.
Цикл For i := 10 downto 5 do write ('3'); выведет на экран '333333'.
Если есть необходимость повторять определенные команды до тех пор, пока условие, указанное в описании цикла "верно", то используется цикл WHILE <условие> DO (цикл с предусловием).
Например,
i := 1; While i < 7 do i := i + 3;
Пока переменная i меньше 7 цикл будет работать. Если условие изначально принимает значение "ложь", то тело цикла (команды внутри цикла) не повторится ни одного раза. В нашем примере цикл повторится 2 раза, т.к. после второго раза переменная i станет равна 7 и условие примет значение "ложь" и произойдет выход из цикла. Не забываем в цикле изменять переменную (или переменные), которые участвуют в условии цикла, чтобы не произошло "зацикливания".
Иногда есть необходимость выполнения каких-то команд хотя бы один раз и только потом проверяется условие, которое может отправить программу на повтор тех же операторов до тех пор, пока проверяемое условие не станет "верным".
В этом случае используется цикл REPEAT ....... UNTIL <условие>; (цикл с постусловием).
Например, i:=1; Repeat i := i+3; Until i > 10;
Эти команды означают: повторять тело цикла до тех пор пока условие не станет "верным", т.е. до тех пор пока i не станет больше 10, тогда программа выйдет из цикла и продолжит выполнять программу дальше. Здесь также не забываем изменять в теле цикла переменную(ые), которые участвуют в условии выхода из цикла.
Стоит обратить внимание, что циклы WHILE и REPEAT отличаются не только тем, что в первом случае у нас идет сначала условие, а потом цикл, а во втором случае - наоборот. Но и в том, что в цикле WHILE происходит выполнение тела цикла, если условие "верно", а во втором случае тело цикла повторяется до тех пор пока постусловие не станет "верным".
Рассмотрим использование всех трех видов цикла в программе, по выдаче на экран n-ого количества чисел Фибоначчи.
var a,b,s,n,i : integer;
begin
write ('Введите кол-во чисел Фибоначчи, которое надо вывести на экран: ');
read(n);
a:=0; b:=1; // задаем два начальных числа
if n > 0 then write (a:3);
// пошаговый цикл
For i := 2 to n do
begin
write (b:5);
s:=a+b;
a:=b;
b:=s;
end;
writeln;
// цикл с предусловием
a:=0; b:=1; // задаем два начальных числа
if n > 0 then write (a:3);
i:=2;
while i <= n do
begin
write (b:5);
s:=a+b;
a:=b;
b:=s;
i := i+1; // не забываем изменять переменную
end;
writeln;
// цикл с постусловием
a:=0; b:=1; // задаем два начальных числа
i := 2;
if n > 0 then write (a:3);
repeat
write (b:5);
s:=a+b;
a:=b;
b:=s;
i := i+1; // не забываем изменять переменную
until i > n;
end.
Посмотрим результаты работы этой программы и убедимся в том, что они одинаковые.