Паскаль. Циклическая программа. Оператор цикла с постусловием (repeat).
Паскаль. Циклическая программа. Оператор цикла с параметром (for).
Оператор цикла с параметром вводится для организации “строгих” циклов, которые должны быть проделаны заданное число раз. Кроме того, циклы с параметром позволяют организовать автоматическое изменение значения некоторой переменной в определенном диапазоне.
Синтаксис оператора FOR:
FOR ПараметрЦикла := МладшееЗначение TO СтаршееЗначение DO Оператор;
или
FOR ПараметрЦикла := СтаршееЗначение DOWNTO МладшееЗначение DO Оператор;
Оператор, представляющий собой тело цикла, может быть как простым, так и составным. Параметр цикла, а также диапазон его значений (от стартового до конечного включительно) может быть только порядкового (целочисленного. символьного, логического) или перечислимого типа! Параметр цикла это обычная переменная, описанная в текущем блоке. Шаг изменения значения параметра цикла всегда постоянный (в случае целочисленного типа равен единице).
Изменение параметра цикла может быть как возрастающим, так и убывающим. В первом случае МладшееЗначение должно быть больше чем Старшее, а во втором – наоборот.
Примеры оформления циклов с параметром.
VAR i : integer;
BEGIN
FOR i := 1 TO 10 DO Write(i:5);
FOR i := 5 DOWNTO 0 DO Write(i:5)
END.
На месте младших и старших значений могут стоять константы, а могут и переменные или выражения, совместимые по присваиванию с параметром цикла. Например,
CONST n = 10;
m = 3;
VAR i,
k : integer;
BEGIN
k := 1;
FOR i := k TO n DO Write(i:5);
FOR i := (m+2) DOWNTO 0 DO Write(i:5)
END.
Выполнение цикла начинается с присваивания параметру стартового значения. Затем следует проверка, не превосходит ли параметр конечное значение (случай с TO) или не является ли он меньше конечного значения (случай с DOWNTO). Если результат проверки утвердительный, то цикл считается завершенным. В противном случае выполняется тело цикла (оператор, следующий за словом DO), и после этого параметр цикла меняет свое значение на следующее. Далее снова производится проверка значения параметра цикла, т.е. алгоритм повторяется.
Запрещается изменять параметр цикла и его старшее и младшее значения внутри тела цикла. Кроме того, параметр цикла не может участвовать в построении диапазонов этого же цикла. Компилятор таких “незаконных” действий не замечает, но программа, содержащая цикл с заголовком типа
FOR i := i-5 TO i+5 DO ... ;
не заслуживает никакого доверия, даже если запускается!
Операторы FOR могут быть вложенными друг в друга, например
VAR
i,j : integer;
BEGIN
WriteLn(‘Таблица умножения’);
FOR i := 1 TO 10 DO begin
FOR j := 1 TO 10 DO Write((i*j):5);
WriteLn;
end;
END.
Паскаль. Циклическая программа. Оператор цикла с постусловием (repeat).
Применяется для организации циклов с неизвестным заранее числом повторений, логика которых предполагает выполнение цикла до тех пор пока не станет истинным некоторое условие.
Синтаксис оператора REPEAT…UNTIL:
REPEAT
Оператор1;
Оператор2;
···
ОператорN;
UNTIL Условие;
Операторы (Оператор1, Оператор2, … ОператорN), образующие тело цикла, будут выполняться циклически, до тех пор пока значение “Условия” не станет равно TRUE (истина). Иными словами, в цикле REPEAT…UNTIL условием продолжения итераций является невыполнение “Условия” (его значение FASLE – ложь).
Условие цикла может быть логической константой, переменной или логическим выражением.
Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело цикла. Поэтому необходимости в использовании составного оператора для построения тела цикла из нескольких простых операторов не возникает.
Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.
Пример 1. Проверка ввода
VAR
N : Integer;
BEGIN
. . .
REPEAT
Write(‘Введите целое число от 0 до 10: ’);
ReadLn(N);
UNTIL (N>=0) and (N<=10);
. . .
END.
В этом примере программа будет запрашивать ввод числа до тех пор, пока пользователь не введет “правильное” число.