Циклы

Операторы циклов предназначены для многократного выполнения тела цикла - какого-либо оператора, в том числе составного. В языке Pascal операторов цикла три.

Оператор while является циклом с предусловием, что означает, что если истинно логическое выражение в его условии, то тело цикла будет выполнено и будет выполняться, пока оно истинно. Конструкция оператора:


while <условие> do <оператор>;

Таким образом, условие в операторе проверяется перед выполнением тела цикла, которое может вообще не быть исполненным, если в условии логическое выражение будет ложно. При использовании этого оператора необходимо проследить, чтобы все переменные, которые участвуют в условии были определены, то есть им были бы присвоены начальные значения Также следует обратить внимание на то, чтобы в теле цикла эти значения изменялись, иначе цикл будет выполняться бесконечно.

Например, будем вводить целые значения, пока их сумма не превысит 100. Затем выведем полученную сумму:


var
  a, s : integer;
begin
  s := 0;
  while s <= 100 do begin
    readln(a);
    s := s + a;
  end;
  writeln(s);
end.

Оператор repeat является оператором цикла с постусловием, что означает, что тело цикла будет выполнено в любом случае и будет выполнятся до тех пор, пока в условии выражение не станет истинным. Конструкция оператора:


repeat
  <оператор>;
until <условие>;

При использовании оператора, переменным, которые задействованы в условии, можно присваивать начальные значения в теле цикла, но необходимо проследить, чтобы переменным в какой-то момент присвоились бы значения, позволяющие выражению в условии стать истинным, иначе цикл будет выполняться бесконечно.

Например, будем вводить целые числа до тех пор, пока не будет введено число, большее 100. Затем выведем сообщение "Завершено":


var
  a : integer;
begin
  repeat 
    readln(a);
  until a > 100;
  writeln('Завершено');
end.

Оператор for является оператором цикла с определяемым числом повторений. Число повторений определяется начальным и конечным значениями переменной цикла. Конструкция оператора:


for <переменная цикла> := <выражение 1> to <выражение 2> do <оператор>;

Переменная цикла должна быть целого типа и после каждого прохода ее значение увеличивается на 1. Если в операторе вместо слова to использовать downto, то после каждого прохода цикла значение переменной будет уменьшаться на 1. Таким образом, тело цикла будет выполнено столько раз, сколько значений может принять переменная цикла. При этом выражение для конечного значения вычисляется только перед началом цикла и в процессе выполнения остается неизменным. Также в процессе выполнения принудительно изменять значение переменной цикла нельзя. После того как цикл завершится, значение переменной будет неопределенным.

Например, посчитаем и выведем сумму пяти введенных значений:


var
  a, s : integer;
begin
  s := 0;
  for var i := 1 to 5 do begin 
    readln(a);
    s := s + a;
  end;
  writeln(s);
end.

В PascalABC переменную цикла можно объявлять не в блоке переменных, а непосредственно в операторе for, достаточно перед ней указать var.

В теле любого оператора цикла можно использовать оператор break, который безусловно завершает выполнение цикла. Этим оператором удобно пользоваться, если в процессе выполнения цикла становится необязательным дальнейшее его выполнение, например, если целью был поиск какого-то значения и это значение было найдено, а в то же время условие цикла предполагает дальнейшее его выполнение.

Также в теле оператора цикла можно использовать оператор continue, который принудительно завершает текущий проход цикла и переходит к следующему, в отличии от оператора break.

 

Задачи для самостоятельного решения