Шаг 25.
Циклы с неизвестным заранее числом повторений


    На этом шаге мы изучим особенности конструкций циклов While и Repeat..Until.

    При решении практических задач не всегда бывает заранее известно количество повторений тела цикла. В этом случае используют циклы с неизвестным заранее числом повторений. Таких циклов два:


Приведем общий вид этих конструкций (рис.1):


Рис.1. Общий вид циклов с неизвестным числом повторений



    Может возникнуть вопрос: зачем были введены две конструкции цикла с заранее неизвестным числом повторений, в то время как конструкция с известным числом повторений одна? Ответ на этот вопрос можно получить, перечислив различия этих конструкций цикла с неизвестным числом повторений.

Цикл While
Цикл Repeat..Until
1. Тело цикла выполняется, когда проверяемое условие является истинным. 1. Тело цикла выполняется, когда проверяемое условие является ложным.
2. Если проверяемое условие является изначально ложным, то тело цикла не выполнится ни разу. 2. Если проверяемое условие изначально является истинным, то тело цикла выполнится один раз.


Почему тело цикла Repeat..Until можно не заключать в операторные скобки Begin..End?


    Помимо указанного деления циклов (с неизвестным и известным заранее числом повторений) циклы также делятся на циклы с предусловием (цикл While) и циклы с постусловием (цикл Repeat..Until).


К какой из указанных групп относится цикл For?


    Приведем блок-схемы циклов с предусловием и постусловием (рис.2), а также решение задачи о выводе на экран первых 10 натуральных чисел.


Рис.2. Блок-схемы циклов с предусловием и постусловием



Цикл с предусловием
Цикл с постусловием
Program C1;
Var
 x:Byte;
Begin
 WriteLn('Первые 10 натуральных числа:');
 x:=1;
 While x<11 Do
   Begin
        WriteLn(x);
        x:=x+1;
   End;
End.
      
Program C2;
Var
 x:Byte;
Begin
 WriteLn('Первые 10 натуральных числа:');
 x:=1;
 Repeat  
   WriteLn(x);
   x:=x+1;
 Until x>10;
End.
      
Текст этой программы можно взять здесь. Текст этой программы можно взять здесь.


Измените приведенные программы таким образом, чтобы числа выводились на экран в обратном порядке.
Тексты программ можно посмотреть здесь.

    Как видно из приведенных программ начальное присваивание значения переменной x и увеличение ее значения на 1 осуществляются явно в обеих конструкциях цикла, в отличие от цикла For.

    Коротко опишем работу этих конструкций цикла.
    Цикл While. Проверяется условие, расположенное в заголовке цикла. Если оно является истинным, то выполняется тело цикла. По завершению его выполнения снова проверяется условие, находящееся в заголовке цикла и т.д. Так продолжается до тех пор, пока условие не станет ложным. В этом случае будет осуществлен переход к конструкции, следующей за телом цикла.

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

    Цикл Repeat..Until. Встретив служебное слово Repeat компьютер "запоминает" его местоположение на случай необходимости повторного выполнения тела цикла. Таким образом, служебное слово Repeat отмечает начало тела цикла. После выполнения тела цикла проверяется условие, расположенное за служебным словом Until. Если оно является ложным, то снова выполняется тело цикла и т.д. Когда условие станет истинным, будет осуществлен переход к следующей конструкции, идущей после цикла.


1. В каком случае программа, использующая цикл Repeat..Until, "зациклится"?
2. Дополните последние программы с циклами While и Repeat..Until конструкциями WriteLn(x);, расположив их после циклов. Что будет выведено на экран при выполнении каждой программы? Сравните полученный результат с аналогичной конструкцией для цикла For.
Ответы и тексты программ можно посмотреть здесь.



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


Предыдущий шаг Содержание Следующий шаг