- •Глава 4. Операторы языка. Основные конструкции турбо паскаля
- •Составной оператор
- •4.2. Разветвляющиеся вычислительные процессы и операторы перехода
- •4.2.1. Оператор условного перехода
- •4.2.2. Оператор безусловного перехода
- •4.2.3. Оператор выбора
- •4.3. Циклические вычислительные процессы и операторы цикла
- •4.3.1. Оператор цикла с параметром
- •4.3.2. Оператор цикла с предварительным условием (с предусловием)
- •4.3.3. Оператор цикла с последующим условием (с постусловием)
- •4.3.4. Вложенные циклы
4.3.3. Оператор цикла с последующим условием (с постусловием)
Оператор цикла с постусловием используется, как правило, для организации итерационных циклов. Формат записи оператора:
repeat
<оператор> {тело цикла}
until <условие>;
или
repeat
<оператор 1>;
<оператор 2>;
. . . . . .
<оператор n>
until <условие>;
Если телом цикла является составной оператор (операторы 1, 2, ..., n), то операторные скобки не используются.
Оператор repeat – until работает следующим образом: тело цикла выполняется (по крайней мере один раз) до тех пор, пока логическое выражение (условие) имеет значение FALSE. На TRUE происходит выход из цикла и выполняется оператор, стоящий в программе за оператором цикла.
Выход из цикла можно организовать с помощью оператора GOTO.
Задача 1. Вычислить значения функции y=x*x при x= 8, 6, 4, 2.
program FUN1;
var x, y: integer;
begin x:=8;
repeat
y:=x*x;
Writeln (x:3, y:5);
x:=x-2
until x=0
end.
Исполнение программы:
x
начальное 8
y=x*x 64 36 16 4
вывод x,y 8 64 6 36 4 16 2 4
x=x-2 6 4 2 0
x=0 ? 6=0 ? 4=0 ? 2=0 ? 0=0 ?
(
проверка)
Нет Нет Нет Да
выход из цикла
Задача 2. Числа Фибоначчи ( Fi ) определяются по формулам F0 = F1 = 1; Fi = Fi –1 + Fi –2 при i = 2, 3, ... (каждое очередное число равно сумме двух предыдущих). Определить, является ли число n числом Фибоначчи, при n>2.
Program n_Fib;
Var n, {заданное число }
F0, F1, F2 : Integer; {три последовательных числа Фибоначчи}
BEGIN
Write(’Введите натуральное n : ’);
ReadLn(n);
F0:=1; F1:=1;
Repeat
F2:=F0+F1;
F0:=F1;
F1:=F2;
Until F2>=n;
If F2=n then WriteLn (‘является числом Фибоначчи’) else WriteLn (‘не является числом Фибоначчи’);
END.
Задача 3. Найти наибольший общий делитель (НОД) двух целых чисел a и b – это наибольшее целое число, которое делит нацело оба числа. Для программной реализации используем алгоритм Евклида.
Program alg_Evkl;
Var a,b, {заданные числа }
c: Integer; {наибольший общий делитель}
BEGIN
Write(’Введите натуральные a,b : ’);
ReadLn(a,b);
Repeat
If a>b then a:=a-b else b:=b-a;
Until a=b;
c:= a;
WriteLn (‘наибольший общий делитель чисел ’, a,b, ‘ равен ’, c );
END.
Замечание. В версии 7.0 в циклах REPEAT, WHILE, FOR можно использовать две стандартные процедуры BREAK, CONTINUE. Процедура BREAK позволяет досрочно выйти из цикла, не дожидаясь выполнения условия выхода. Процедура CONTINUE позволяет начать новую итерацию цикла, даже если предыдущая не завершена.
Задача 4. Среди десяти целых чисел найти первое отрицательное число и вывести его на экран дисплея.
program OTR_CHISLO;
const N=10;
var
X: integer; i: byte; L: boolean;
Begin L:=False;
for i:=1 to N do
begin
Write('Введите очередное число X= '); Readln(X);
if X>=0 then Continue;
{X0, переход на следующее число}
Writeln('Первое отрицательное число = ', X, ‘Номер=', i);
L:=True; {найдено отрицательное число}
Break {выход из цикла}
end;
if not L then Writeln('Отрицательных чисел нет');
Readln
end.
