Операторы организации циклических процессов на языке Pascal
9.6.7.1. Оператор цикла с параметром
Вычислительный процесс с многократным повторением однотипных вычислений для различных значений обрабатываемых величин (переменных) называется циклическим процессом.
Повторяющиеся участки вычислений называются циклами, а изменяющиеся в цикле величины - переменными цикла.
Цикл - в программировании - оператор языка программирования, позволяющий многократно повторять одну и ту же последовательность команд (тело цикла).
Если цикл имеет известное заранее число повторений, то он называется циклом со счётчиком, или циклом с заданным числом шагов. Такие циклы в языке программирования Pascal организуются с помощью оператора цикла с параметром, имеющего следующий формат:
FOR <переменная> := n1 TO n2 DO
BEGIN
<тело цикла>;
END;
Здесь <переменная> должна быть перечисляемого типа (целого или символьного), n1 - её начальное значение, n2 – конечное значение, и n1 < n2. Параметр цикла (<переменная>) пробегает последовательно все значения от n1 до n2, возрастая с каждым шагом на 1 (принимая следующее значение). <тело цикла> - это набор операторов, которые циклически выполняются. Если <тело цикла> состоит только из одного оператора, то операторные скобки BEGIN - END не нужны.
Пример фрагмента кода программы, в котором на экран в столбец выводятся все целые числа в интервале от -20 до 50 и их квадраты:
FOR i:=-20 TO 50 DO
WRITELN(i,’, ’,i*i);
Замечание. Если в операторе цикла после служебного слова DO поставить точку с запятой, то цикл будет пустым, а его тело выполнится лишь однажды.
Замечание. Если в цикле с параметром начальное значение будет больше конечного n1>n2, то такой цикл можно реализовать, если служебное слово TO заменить словом DOWNTO.
Пример:
FOR Bukva:=’Z’ DOWNTO ’A’ DO
WRITELN(Bukva,’, ’,CHR(Bukva));
Этот фрагмент кода программы выводит в столбец заглавные буквы и их десятичные коды в обратном алфавиту порядке:
Z, 90
Y, 89
X, 88
. . . . .
B, 66
A, 65
9.6.7.2. Оператор цикла с предварительным условием
Предусловие - условие, истинность которого проверяется в начале выполнения тела цикла или процедуры.
Если число шагов в цикле заранее не известно, то используются циклы с предварительным условием (предусловием) или с последующим условием (постусловием). Это циклы, в которых для выполнения тела цикла проверяется условие, расположенное либо перед телом цикла, либо - после него.
Оператор цикла с предусловием применяется, как правило, для организации итерационных циклов и имеет следующий формат:
WHILE <условие> DO
BEGIN
<тело цикла>;
END;
Здесь <тело цикла> выполняется, если <условие>, являющееся логическим выражением, верное (принимает значение True). В противном случае тело цикла не выполняется.
Пример:
x:=4;
WHILE x<=100 DO
BEGIN
WRITELN(x);
x:=x+2;
END;
В этом примере в цикле с предусловием на экран в столбец выводятся чётные (x меняется с шагом 2) числа от 4 до 100.
9.6.7.3. Оператор цикла с последующим условием
Постусловие - условие, истинность которого проверяется после выполнения тела цикла или процедуры.
В операторе цикла с постусловием условие следует после тела цикла, а значит, операторы тела цикла выполняются по крайней мере один раз. Формат оператора цикла с постусловием следующий:
REPEAT
<тело цикла>;
UNTIL <условие>;
Работает такой оператор следующим образом: <тело цикла> (один или несколько операторов) выполняется до тех пор, пока <условие> неверное (имеет значение False). Как только <условие> станет верным (True), происходит выход из цикла и выполняется оператор, стоящий следом за циклом.
Замечание. Выход из цикла с постусловием можно организовать с помощью оператора GOTO, помещённого в тело цикла.
Пример:
I:=1;
REPEAT
IF I mod 7=0 THEN
WRITELN(I);
I:=I+1;
UNTIL I>100;
В этом фрагменте программы в цикле перебираются все целые числа от 1 до 100. Если число окажется кратным 7 (остаток от деления на 7 равен нулю), то оно выводится на экран.
Массивы в языке Pascal
Часто в циклах приходится обрабатывать элементы массивов.
Массив - последовательность однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами. Выделяют одномерные массивы (вектора) и двумерные массивы (матрицы). Размерность массива может быть три и более.
В языке Pascal массив является аналогом типа данных. Для задания массива используется служебное слово Array, а в разделе описания переменных указывается имя массива и его тип. Например, фрагмент программы:
var M : Array[1..9] of Real;
S: array[0..3, 1..9] of String;
i, j : Integer;
Begin
For j:=1 to 9 do
Begin
For i:=0 to 3 do ReadLn(S[i,j]);
Readln(M[j]);
end;
. . .
В данном фрагменте программы описывается одномерный массив действительных чисел M, включающий 9 элементов с номерами от 1 до 9. А также - двумерный строковый массив S, элементы которого имеют два индекса, первый из которых меняется от 0 до 3, а второй - от 1 до 9. В программе используется вложенный цикл для задания элементов двумерного массива S.