Delphi. Pascal
Урок 5. Циклы в Object Pascal
Циклы
Инструкция for
Вариант 1 (с увеличением счетчика):
for Счетчик:=НачальноеЗначение to КонечноеЗначение do begin { здесь инструкции } end;
Если НачальноеЗначение > КонечноеЗначение, то инструкции между begin и end не выполняются.
Примечание: если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Вариант 2 (с уменьшением счетчика):
for Счетчик:=НачальноеЗначение downto КонечноеЗначение do begin { здесь инструкции } end;
Если НачальноеЗначение < КонечноеЗначение, то инструкции между begin и end не выполняются.
Примечание: если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
В языке Pascal существует два вида циклов (один с двумя разновидностями, так что можно считать, что и три). Первый из двух - это цикл for. Он используется тогда, когда нам заранее известно, сколько раз цикл должен прокрутится (например, нам надо ввести ровно 10 чисел). Второй из двух типов (в нем два подтипа - while и until) - это цикл, который может прокрутиться заранее неизвестое число раз (пример его использования - это запрос у пользователя пароля. Заранее неизвестно, сколько раз пользователь будет вводить неправильный пароль). Рассмотрим все циклы на примерах.
Цикл for:
var
k, i, sum: Integer;
...
Readln(k); //читаем k
sum:=0; //обнуляем сумму
for i:=1 to k do
sum:=sum+i;
Writeln('sum=',sum);
В этом примере мы запрашиваем у пользователя число k, и затем подсчитываем сумму всех чисел от 1 до k.
Если нам надо объединить несколько операторов в теле цикла, то мы их пишем внутри begin - end.
Инструкция repeat
repeat { инструкции } until Условие;
Сначала выполняются инструкции цикла, которые расположены между repeat и until. Затем вычисляется значение выражения Условие, и если оно равно False, то инструкции цикла выполняются еще раз. И так до тех пор, пока значение выражения Условие не станет равным True.
Пример на цикл until:
var
password: String;
...
repeat
Readln(password); //читаем пароль
until (password='Secret');
Writeln('OK');
В данном примере мы запрашиваем у пользователя пароль до тех пор, пока он не введет правильный ('Secret'). Обратите внимание, что циклы типа until используются тогда, когда тело цикла должно выполнится по крайней мере один раз (в нашем примере пароль уж один-то раз должен быть спрошен). Циклы типа until выполняютя до тех пор, пока условие после слова until ложно.
Инструкция while
while Условие do begin { инструкции ) end;
Сначала проверяется Условие, если оно истинно, то выполняются инструкции между begin и end. Затем снова проверяется Условие. Если оно выполняется, то инструкции цикла выполняются еще раз. И так до тех пор, пока Условие не станет ложным.
Примечание: если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Пример на цикл while:
var
k, i, factorial: Integer;
...
factorial:=1;
Readln(k); //читаем k
i:=1;
while i<=k do
begin
factorial:=factorial*i;
i:=i+1;
end;
Writeln(k, '!=', factorial);
ReadLn
В данном примере подсчитывается факториал введенного пользователем числа k (т. е. произведение всех чисел от 1 до k. Факториал обозначается !).
Циклы типа while выполняются до тех пор, пока условие после слова while истинно. Как следствие из этого, они могут не выполнится ни разу (если в условии сразу стоит ложь).