Циклы


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

Цикл с предусловием

Формат оператора:
     while <условие> do <тело цикла>


В теле цикла используются любые допустимые в языке операторы, в том числе операторы цикла.

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

Пример1. Найти сумму n введенных целых чисел.

var i, n : integer;

       a, sum : integer;

begin

   read (n);

   i := 1;

   sum := 0;

   while i <= n do

   begin

      read (a);

      sum := sum + a;

      i := i + 1;

   end;

writeln (sum);

end.

{ n — количество чисел }

{ i – номер очередного введенного числа }

{ почистили переменную sum, в которой будет собираться сумма вводимых чисел }

{ пока не перебрали все числа }

 

{ вводим число в переменную a }

{ добавляем a в сумму }

{ увеличиваем номер обрабатываемого числа на 1 }

 

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

var i, n : integer;

       a, sum : integer;

begin

   read (n);

   i := n + 1;

   sum := 0;

   while i <= n do

   begin

      read (a);

      sum := sum + a;

      i := i + 1;

   end;

   writeln (sum);

end.

 


В данном случае операторы тела цикла не будут выполнены, так как условие с самого начала имеет значение false.

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

Пример 1.3.

var  i, n : integer;

        a, sum : integer;

begin

   read (n);

   i := 1;

   sum := 0;

   while i <= n do

   begin

      read (a);

      sum := sum + a;     

   end;

writeln (sum);

end.

 

 

 

 

 

 

{ нет увеличения i на 1 }

 

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

var i, n : integer;

       a, sum : integer;

begin

   read (n);

   i := 1;

   sum := 0;

   while i < n do

   begin

      read (a);

      sum := sum + a;

      i := i + 1;

   end;

writeln (sum);

end.

 

{ i изменяется от 1 до n - 1 }

 

 

В приведенном примере операторы цикла выполняются n - 1 раз, что неверно.

Пример 2. С клавиатуры вводятся целые числа. Суммировать числа, пока не будет введен 0.

var  a, sum : integer;

begin

   read (a);

   sum := 0;

   while a <> 0 do

   begin

      sum := sum + a;

      read (a);

   end;

writeln (sum);

end.

{ ввели первое число }

{ почистили sum }

{ пока очередное введенное число  не равно 0 }

{ пока не перебрали все числа }

 

{ добавим число  в сумму }

{ ввовдим очередное число a }

{ увеличиваем номер обрабатываемого числа на 1 }

Обратите внимание, что если в качестве первого числа ввести 0, цикл выполняться не будет, и sum останется равным 0, что соответствует действительности.
Адрес: 614039, г. Пермь, ул. Комсомольский проспект, 45
Телефон: +7 (342) 212-80-71
E-Mail: school9-perm@ya.ru
Вопрос администратору сайта