Паскаль. Оператор цикла Repeat

Паскаль. Оператор цикла Repeat

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

В Паскале - три оператора цикла: repeat, while и for. Первым изучим оператор repeat.

Конструкция repeatuntil a+2>3b читается «рипит … антил…», а переводится «повторяй до тех пор, пока a+2 не станет больше 3b».

Составим с использованием оператора repeat программу решения задачи о печати чисел 3 5 7 9. Для того, чтобы точно определить работу оператора repeat, приведем ее параллельно со вторым вариантом программы решения этой задачи из предыдущей статьи «Оператор перехода GOTO»:

2 ВариантВариант с Repeat
Label m1,m2;
Var f: Integer;
Begin
         Write('Haчало счета ');
         f:=3;

m1: Write(f,' ');
         f:=f+2;
         if f>9 then goto m2
                                 else goto m1;
m2: Write(' Конец счета')
End.

Var f: Integer;
Begin
     Write('Начало счета ');
     f:=3;
     repeat
          Write(f,' ');
          f:=f+2;
     until f>9;
 
     Write(' Конец счета')
End.

Порядок работы обеих программ совершенно одинаков, так что можно считать слово repeat заменой метки m1, а конструкцию until f>9 считать заменой оператора if f>9 then goto m2 else goto m1.

Синтаксис оператора repeat:

REPEAT оператор; оператор; … оператор UNTIL условие

Вкратце работу оператора repeat можно описать так:

Повторяй выполнение операторов, стоящих между словами repeat и until, до тех пор, пока не станет истинным условие.

Более подробно работа оператора repeat описывается так:

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

Задача:

Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово «Хватит». Распечатав его с восклицательным знаком, компьютер отвечает «Хватит так хватит» и заканчивает работу.

Придумаем строковую переменную, в которую человек будет с клавиатуры вводить слово. Назовем её Slovo.

Var Slovo: String;
Begin
  repeat 
    WriteLn('Введите слово');
    ReadLn(Slovo);
    WriteLn(Slovo, '!') 
  until Slovo='Хватит'; 
  WriteLn('Хватит так хватит') 
End.	
Поиск наибольшего числа

Задача:

Предположим, нам необходимо ввести с клавиатуры N чисел, найти из них наибольшее и вывести его.

Эта задача является типовой в программировании, чтобы с ней справиться нужно знать два момента:

  1. Для самого большого числа заводится переменная, например, max. Первое число не глядя помещаем в переменную max. Каждое следующее число (chislo) мы сравниваем с max. Если оно больше, то оно присваивается в переменную max:

if chislo>max then max:=chislo;

Работает и с минимум, только теперь уже, если следующее число меньше min, то в min присваиваем число:

if chislo<min then min:=chislo;

  1. Если нам не известно сколько в цикле будет шагов, то их легко подсчитать с помощью счётчика. Для этого заводится отдельная переменная, например k. Перед циклом помещаем в неё начальное значение (в большинстве случаев это 0). И внутри цикла пишем оператор вида k:=k+1.

Текст программы:

Var N, max, chislo, k: Integer;
Begin
  Write('Введите количество чисел: '); ReadLn(N);
  Write('Введите число: '); 
{Первое число помещаем в переменную max}  
  ReadLn(max); 
{Начальное значение счётчика шагов цикла}  
  k:=0; 
{Одно число уже ввели, уменьшаем общее количество}  
  N:=N-1; 
  repeat
    Write('Введите число: ');
    {Последующие числа помещаем в переменную chislo}
    ReadLn(chislo); 
    k:=k+1; {Считаем шаги цикла}
    if chislo>max then max:=chislo {Меняем максимум}
 { Выйдем с цикла, когда число чисел N сравняется с числом шагов цикла }  
  until N=k;
 { С цикла вышли, выводим максимум }
  WriteLn('Максимальное число: ',max);
End.

Приведём еще одно решение, но уже в самом начале программы в max поместим самое маленькое число, к примеру -999. Если бы находили min, то присваивали бы +999.

Текст программы:

Var N, max, chislo, k: Integer;
Begin
  Write('Введите количество чисел: '); Readln(N);
  max:=-999;
 {Начальное значение счётчика шагов цикла}
  k:=0; 
  repeat
    Write('Введите число: ');
 {Последующие числа помещаем в переменную chislo}    
    ReadLn(chislo); 
 {Считаем шаги цикла}
    k:=k+1; 
    if chislo>max then max:=chislo {Меняем максимум}
 {  Выйдем с цикла, когда число чисел N сравняется с числом шагов цикла }
  until N=k; 
{ С цикла вышли, выводим максимум }
  WriteLn('Максимальное число: ',max);
End.

Задание 1

Перечислите плюсы и минусы каждого варианта решения задачи на поиск максимума.

Задание 2

Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово «Хватит». Распечатав его с восклицательным знаком, компьютер отвечает «Хватит так хватит» и заканчивает работу. Усложним эту задачу. Пусть компьютер перед распечаткой каждого слова ставит его порядковый номер.

Задание 3

  • Предположим, нам необходимо ввести с клавиатуры N чисел, найти из них наименьшее и вывести его. Приведите два варианта решения.
  • «Таблицы Брадиса» - вычислить и напечатать с 6 десятичными знаками квадраты чисел 0.000 0.001 0.002 0.003 . . . 0.999 1.000.
  • Если камень бросить горизонтально со 100-метровой башни со скоростью υ=20 м/с, то его расстояние от башни по горизонтали (s) будет выражаться формулой s=υt, где t - время полета камня в секундах. Высота над землей h будет выражаться формулой h=100 – 9,8t2/2. Вычислять и печатать t, s и h для t=0, 0,2, 0,4, 0,6 … и так далее до тех пор, пока камень не упадёт на землю.

Турбо-Паскаль 7.0 - Самоучитель
Лукин С.Н.