Циклы - это многократные повторы одного или нескольких операторов. В каждой серьёзной программе есть хотя бы один цикл. Возьмём, к примеру, какую-нибудь аркаду. Каждый момент в ней - это один "оборот" цикла. Каждый миг выполняются десятки операторов, которые в зависимости от нажатых клавиш производят изменения координат и состояния персонажа, перемещают другие объекты, рассчитывают соприкосновения и рисуют очередной кадр. И так несколько раз в секунду.
А что же Паскаль? В рассматриваемом языке программирования есть три оператора цикла: один безусловный и два условных.
Безусловный цикл - это цикл, выполняющийся определённое количество раз. Это количество определено заранее или в ходе программы и не меняется в течение работы цикла. В Паскале безусловный цикл имеет следующее строение:
1 2 3 4 5 6 7
for I := 1 to 10 do
8
Write('ха');
1 - слово, обозначающее начало оператора цикла; переводится как "для";
2 - переменная, служащая для подсчёта количества выполнений цикла; её часто используют в теле цикла;
3 - операция "присваивание", вы уже знакомы с ней;
4 - начальное значение переменной 2, т. е. значение, которое она получит при первом выполнении цикла;
5 - это слово означает, что с каждым повтором значение переменной 2 будет возрастать; если написать downto, значение будет убывать;
6 - конечное значение; по переходе за него цикл завершается;
7 - "делать"; за этим словом идёт, наконец, оператор;
8 - собственно оператор.
Приведённый пример 10 раз пишет "ха"; создаётся впечатление, будто компьютер смеётся.
А вот программа, складывающая любое количество любых чисел, по желанию пользователя:
program SomeNumSum; {Сумма нескольких чисел}
var
Q, {Количество}
N, {Текущее число}
I, {Переменная цикла}
Sum: Integer; {Сумма}
begin
Write('Сколько чисел вы хотите сложить? ');
ReadLn(Q); {Не пишите слишком много}
WriteLn('Теперь вводите эти числа.');
Sum:=0; {Начинаем складывать с нуля}
for I:=1 to Q do {Ввод числа производистя Q раз}
begin
Write(I, '-е: '); (1-е, 2-е и т. д.}
ReadLn(N); {Ввод текущего числа}
Sum:=Sum + N; {Прибавление числа к общей сумме}
end;
WriteLn('Сумма введённых чисел равна ', Sum, '.');
ReadLn;
end.
Условные циклы выполняются, пока является истинным или ложным (в зависимости от оператора) указанное условие.
Начнём с оператора while.
1 2 3
while I > 10 do
4
I:=I - 45;
1 - начало оператора цикла; означает "пока";
2 - условие; пока оно выполняется, цикл идёт;
3 - с этим словом вы знакомы;
4 - оператор.
Примечание: условие 2 выполняется перед выполнением действия 4; если при первой проверке оно (условие) будет ложно, оператор 4 не выполнится ни разу.
А вот оператор repeat.
1
repeat
2
Write('Введите число больше 100: ');
2
ReadLn(I);
3 4
until I > 100;
1 - "повторять"; начало оператора цикла;
2 - операторы; цикл repeat позволяет использовать несколько операторов, не вынуждая программиста заключать их в составной;
3 - "пока не";
4 - условие; когда оно будет выполнено, цикл завершится.
В отличие от цикла while, цикл repeat обязательно выполняется хотя бы один раз, потому что с ним компьютер сначала делает, а потом думает.
Попробуйте составить программу, которая складывает вводимые числа, не зная заранее, сколько их будет. Она прекращает суммирование, если пользователь вводит число 0.