Цикл REPEAT

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

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

     Оператор цикла REPEAT организует выполнение цикла,  состоящего из любого числа операторов,  с неизвестным  заранее  числом повторений.  Тело  цикла выполняется хотя бы один раз.  Выход из цикла осуществляется при истинности (!)  некоторого  логического выражения.

 

     Общий вид цикла с постусловием:

 

                 REPEAT

                   <оператор1>;

                   <оператор2>;

                      ...

                   <оператор N>;

                 UNTIL <условие>;

 

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

      Условие, записанное после ключевого слова UNTIL,  проверяется в конце каждой итерации (после выполнения тела цикла).  Условие - это логическое значение,  переменная или выражение с логическим результатом.  Но важно обратить внимание, что оно работает здесь не совсем так,  как в цикле WHILE. Если в цикле WHILE подразумевается алгоритм "пока условие истинно, выполнять операторы тела цикла", то цикл REPEAT соответствует алгоритму "выполнять тело цикла,  пока не станет истинным условие". Иными словами,  если условие является истинным (True),  то выполнение цикла завершается. Если условие не выполняется (является ложным - False), то вновь выполняется тело цикла.

     

Иллюстрацией к вышесказанному может быть конструкция  вечного цикла:

 

              REPEAT UNTIL False;

 

Этот цикл  пустой  и никогда не прекращающийся.  Он хорош только тогда, когда нужно заблокировать программу. Но вообще на совести программиста лежит выбор корректного условия, т.е. такого, которое на каком-то шаге итерации станет False.

    

 Рассмотрим пример программы с использованием цикла REPEAT.

 

program MAX_repeat;

uses Crt;                   { подключение библиотеки }

var  A,B:integer;

begin                       { - начало тела главной программы}

  clrscr; gotoXY(10,5);  TextColor(Green);

  writeln('<<< НАХОЖДЕНИЕ МАКСИМАЛЬНОГО ИЗ ДВУХ ЦЕЛЫХ ЧИСЕЛ >>>');

  writeln;

  writeln('  программа закончит работу, если оба числа равны 0');

  writeln;

  repeat                  { начало цикла }

      write('Первое число = ?   ');  readln(A);

      write('Второе число = ?   ');  readln(B);

      if A=B then writeln('Числа равны')

        else

         begin

           write('Максимальное из двух чисел ');

           if A>B then writeln(A)

                  else writeln(B)

         end

  until (A=0) and (B=0);   { конец цикла }

end.

 

     Данная программа будет выполняться до  тех  пор,  пока  оба введенных числа не станут равны 0. Вообще цикл REPEAT достаточно часто используется с целью многократного повторения  выполнения программы с различными данными.

Обо мне
Я - Степан Сюсин, начинающий программист. Мне 17 лет, я живу в Уфе и учусь в УТЭК'е. Люблю web-программирование. Поподробнее обо мне можно узнать в социальных сетях: