Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Infa.docx
Скачиваний:
2
Добавлен:
26.09.2019
Размер:
63.52 Кб
Скачать

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

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

Синтаксис оператора REPEAT…UNTIL:

REPEAT   Оператор1;   Оператор2;   ···    ОператорN; UNTIL Условие;

Операторы (Оператор1, Оператор2, … ОператорN), образующие тело цикла, будут выполнятся циклически, до тех пор пока значение “Условия” не станет равно TRUE (истина). Иными словами, в цикле REPEAT…UNTIL условием продолжения итераций является невыполнение “Условия” (его значение FASLE – ложь).

Условие цикла может быть логической константой, переменной или логическим выражением.

Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело цикла. Поэтому необходимости в использовании составного оператора для построения тела цикла из нескольких простых операторов не возникает.

Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.

Пример 1. Проверка ввода

VAR   N : Integer; BEGIN   . . .   REPEAT     Write(‘Введите целое число от 0 до 10: ’);     ReadLn(N);   UNTIL (N>=0) and (N<=10);   . . . END.

В этом примере программа будет запрашивать ввод числа до тех пор, пока пользователь не введет “правильное” число.

23. Операторы циклов. Операторы break. Оперотор continue.

Процедура BREAK применяется для досрочного прекращения циклов WHILE, REPEAT…UNTIL и FOR.

Пример: Определение номера первого нулевого элемента в массиве А

VAR   i, num : Integer;   A : array[1..10] of Integer; BEGIN   . . . { Ввод элементов массива А }   num := 0;   FOR i:=1 TO 10 DO { Цикл для i от 1 до 10 }    IF A[i]=0 THEN begin { если найден нулевой элемент }                     num := i; { запоминаем его номер }                     BREAK      { прекращаем цикл }                   end;   IF num <> 0 THEN WriteLn(num)               ELSE WriteLn(‘Нулевых элементов нет’); END.

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

Пример: Определение наибольшего общего делителя (НОД) двух чисел

VAR   CommDiv,        { кандидат в НОД }   num1,           { первое число }   num2 : Integer; { второе число } BEGIN   Write(‘Введите первое число: ’); ReadLn(num1);   Write(‘Введите второе число: ’); ReadLn(num2);   FOR CommDiv := num1 DOWNTO 1 DO begin     IF (num2 mod CommDiv)<> 0 THEN CONTINUE;     IF (num1 mod CommDiv) = 0 THEN begin        WriteLn(‘Наибольший общий делитель: ’, CommDiv);        BREAK     end {if} end {for} END.

В примере применен цикл FOR, в котором по убывающий перебираются возможные кандидаты в наибольший общий делитель. Критерий делимости – равенство нулю остатка от деления (операция mod). Если кандидат (значение переменной CoomDiv) не является делителем числа num2, по команде CONTINUE начинается следующий проход цикла, а операторы, оставшиеся в теле цикла, не выполняются. Если число (CommDiv) оказывается делителем числа num2 и num1, что проверяется вторым оператором IF тела цикла, значит, оно – общий делитель. А поскольку перебор идет от больших к меньшим значениям, первый найденный общий делитель – наибольший. Выводим его на печать и прерываем цикл командой BREAK.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]