Урок 10. Операторы цикла с условием while и repeat

Урок из серии: «Язык программирования Паскаль»

Цикл с предусловиемНа предыдущем уроке было показано, как использовать оператор цикла с параметром For.

В этом уроке Вы познакомитесь с операторами цикла с условием.

Операторы цикла с условием используются тогда, когда число повторений тела цикла заранее неизвестно, а задано лишь условие повторения (или окончания) цикла.

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

В языке программирования Паскаль для организации циклов с условием  используются операторы  While и  Repeat.

Оператор цикла с предусловием While

Оператор while (пока) называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора, до операторов тела цикла. Если условие изначально не выполнится, то операторы тела цикла не выполнятся ни разу.
Формат оператора:

While <условие выполнения цикла> do
   begin
     <тело цикла>;
   end;
Здесь:
   <условие выполнения цикла> - булевское выражение;
   <тело цикла> - операторы, которые будут повторяться.

На русском языке это звучит примерно так:

пока выполняется условие делай
начало
<тело цикла>
конец

Алгоритм выполнения оператора:

  1. Проверяется условие выполнения цикла (вычисляется булевское выражение).
  2. Если условие выполняется (значение выражения равно true), то выполняются операторы, составляющие тело цикла.
  3. Если условие не выполняется (значение выражения равно false),  то происходит выход из цикла и переход к первому после while оператора.

При использовании цикла с предусловием надо помнить следующее:

  1. Начальное значение переменной цикла нужно присвоить до начала выполнения цикла.
  2. Условие продолжения цикла должно зависеть от значения переменной цикла.
  3. Переменная цикла должна изменяться при каждом новом выполнении цикла,  иначе цикл будет повторяться бесконечное число раз.

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

program demowhile;
   var
      k: byte;
      x, sum:real;
begin
   k:=0;        {Счетчик чисел}
   sum := 0;    {Сумма чисел}
   while (k < 10) do {Условие выполнения цикла}
      begin
         k:= k+1;
         write('Введите ',k , '-е число: ');
         readln(x);    {Ввод очередного числа с клавиатуры}
         sum := sum + x;
   end;
writeln('Сумма введенных чисел равна ', sum);
end.

В данном примере перед циклом обнуляются значение счетчика введенных чисел k и их суммы sum.

В начале оператора while проверяется условие k < 10.

Если условие верно, то выполняется составной оператор в теле цикла. В этом операторе вводится значение очередного числа, и на это значение увеличивается значение суммы. После этого управление в программе вновь передается оператору цикла while, опять  проверяется условие k < 10.

Как только значение станет равно 10, выполнение цикла завершиться, а управление  будет передано на оператор, находящийся за словом end, т. е. первый оператор за границей while.

Оператор цикла с постусловием repeat

Цикл с постусловиемОператор цикла repeat аналогичен оператору while, но отличается от него, во-первых, тем, что условие проверяется после очередного выполнения тела цикла (за это и называется циклом с постусловием) и таким образом гарантируется хотя бы однократное выполнение цикла, а во-вторых, тем, что выполнение условия (равенство булевского выражения константе true) является критерием не повторения, а прекращения цикла.

Формат оператора:

Repeat

   <оператор 1> ;
   <оператор 2> ;
   . . .
   <оператор n>;

Until <условие окончания цикла>;

где Repeat (повторять), until (до тех пор).

Обратите внимание на то, что данный оператор цикла  предполагает несколько операторов в теле цикла, поэтому операторные скобки begin и end не нужны.

Алгоритм выполнения:

  1. Выполняется тело цикла (операторы, заключенные между словами repeat / until).
  2. Проверяется условие выхода из цикла.
  3. Если условие выполняется, то происходит выход из цикла к первому после repeat  оператору.
  4. Если условие  не выполняется, то алгоритм повторяется с пункта 1.

Пример. Составить программу, которая будет вводить и суммировать  любое количество чисел. Если будет введено число 999, на экран вывести результат суммирования.

Для решения этой задачи сначало нужно ввести число, а потом проверить его значение (проверить условие выхода из цикла). Для этого нужен цикл с постусловием.

Формат оператора:

program demorepeat;
   var
      x, sum:real;
begin
   sum := 0;    {Сумма чисел}
   x:=0;        {Очередное число}
   repeat       {Повторять}
      sum := sum + x;
      write('Введите очередное число: ');
      readln(x);
   until x=999; {Условие окончания цикла}
   writeln('Сумма введенных чисел равна ', sum);
end.

Урок 10. Операторы цикла с условием while и repeat Коротко о главном

1. Операторы While Repeat используют в тех случаях, когда заранее неизвестно число повторений тела цикла или шаг отличен от 1.

2. При организации циклов с проверкой условия обязательно нужно указать:

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

На следующем уроке рассмотрим применение циклов в задачах на целочисленную арифметику.

ТестПроверь себя!

Следующий урок: Циклы и целочисленная арифметика.

Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Елена Ивановна
Елена Ивановна
5 лет назад

Вера Альбертовна! Здравствуйте
Очень приятно было встретить на просторах грамотно методически и алгоритмически составленные задания. Прямо бальзам на мое педагогическое сердце! Спасибо
Есть замечание , малюсенькое. ЭТО , конечно опечатка

по ссылке https://gospodaretsva.com/inf9/urok21.html «Проверь себя» задание 8
написано x:= x*2-1; тогда все значения величины х будут отрицательные от -1 до -9, чего нет в ответах
надо x:= x*2+ 1;
Ох и спасибо за Ваш труд. Я тут, конечно, останусь и ссылку в избранное запишу!