Циклы

Циклы - это многократные повторы одного или нескольких операторов. В каждой серьёзной программе есть хотя бы один цикл. Возьмём, к примеру, какую-нибудь аркаду. Каждый момент в ней - это один "оборот" цикла. Каждый миг выполняются десятки операторов, которые в зависимости от нажатых клавиш производят изменения координат и состояния персонажа, перемещают другие объекты, рассчитывают соприкосновения и рисуют очередной кадр. И так несколько раз в секунду.

А что же Паскаль? В рассматриваемом языке программирования есть три оператора цикла: один безусловный и два условных.

Безусловный цикл - это цикл, выполняющийся определённое количество раз. Это количество определено заранее или в ходе программы и не меняется в течение работы цикла. В Паскале безусловный цикл имеет следующее строение:

 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.

Оглавление
Hosted by uCoz