Цикл repeat

advertisement
Очень часто приходится повторять определенную часть
алгоритма для различных значений аргумента.
Для организации таких процессов используется алгоритмы с
На языке
программирования
циклической структурой.
Они составляются по правилам на основе различных
закономерностей.
Для выполнения процессов повторения на языке Паскаль предусмотрены три вида операторов
цикла:
FOR
WHILE
REPEAT
арифметический цикл – FOR
цикл с предусловием – WHILE
цикл с постусловием – REPEAT
Если заранее не известно количество повторений оператора (или составного оператора) и задано только условие
повторения, то применяются операторы WHILE, REPEAT.
Аналогичен оператору WHILE,
с той разницей, что условие повторения цикла проверяется
в конце цикла, поэтому тело цикла выполняется хотя бы
один раз. Вторая особенность – тело цикла выполняется,
если условие ложно, и прекращается, если условие истинно
(в операторе WHILE было наоборот).
Этот оператор использует ключевые слова:
читается “рипит”, а
переводится “повторять”)
читается “антил”,
переводится “до”).
Оператор состоит из заголовка REPEAT, тела
цикла и условия повторения. Синтаксическая
диаграмма изображена на рисунке.
REPEAT
ОПЕРАТОР
;
UNTIL
УСЛОВИЕ
Блок-схема
Форма записи
ОПЕРАТОР
НЕТ
УСЛОВИЕ
ДА
REPEAT
< ОПЕРАТОР 1>;
< ОПЕРАТОР 2>;
…
< ОПЕРАТОР n>;
UNTIL < УСЛОВИЕ >;
Между ключевыми словами REPEAT и UNTIL
располагается простой и составной оператор. Так как
оператор заканчивается ключевым словом UNTIL, то здесь
операторные скобки BEGIN и END не применяются.
В операторе REPEAT внутри цикла должен быть хотя бы
один оператор, действуйщий на условия выполнения. В
противном случае возможно, что процесс будет повторятся
бесконечно.
- привести к результату за конечное время, значит
количество шагов алгоритма не должно быть
бесконечным.
Начало
ПРИМЕР 1
Ввод m,n
x:=m
нет
По алгоритму Евклида
найдите НОД двух
заданных чисел m и n.
Блок-схема задачи. Блок-схема
обеспечивает наглядное
изображение способа решения
задачи и способствует
составлению программы без
ошибки.
y:=y-x
y:=n
x>y
x:=x-y
x=y
e:=x
Вывод e
Конец
PROGRAMM NOD; {НАХОЖДЕНИЕ NOD ДВУХ ЧИСЕЛ}
VAR
n, m, x, e, y: integer;
BEGIN
write (‘введите числа m, n:’);
readln (m, n);
x:= m; y:=n;
REPEAT
if x>y then x:=x-y else y:=y-x
UNTIL x=y;
e:=x;
WRITELN (‘НОД = ’, e);
END.
ПРИМЕР 2
Составить программу вычисления n! для любого n.
n!=1 * 2 * 3 *… * n. Здесь n сначала приравнивается к 1 и в
каждом повторении к его значению прибавляется 1.
На алгоритмическом языке
Алг факториал 1
Арг i, n (цел i, n/ вещ p)
Рез p
Нач
p:=1;
ПОВТОРЯТЬ
p:=p*n; n:=n-1
ДО n=0;
ВЫВОД p
кон
на языке Паскаль
Program factorial; {ВЫЧИСЛЕНИЕ ФАКТОРИАЛА}
VAR n, i: INTEGER; p: LONGINT;
BEGIN
WRITE (‘введите число n: ‘ );
READLN (n); {ВВОД ПОЛОЖИТЕЛЬНОГО ЦЕЛОГО ЧИСЛА}
p:=1;
REPEAT
p:=p*n; n:=n-1
UNTIL n=0;
WRITELN (‘n! = ’, p);
END.
Download