Оператор цикла с постусловием производит проверку условия после выполнения операторов тела цикла. Поэтому тело цикла должно выполниться хотя бы один раз. Стpуктуpа оператора имеет следующий вид:
REPEAT <оператор1>;
...
<операторN>
UNTIL <условие_выхода >;
Правило выполнения оператора цикла. Выход из цикла происходит при истинности значения логического выражения <условие_выхода>, иначе операторы тела цикла повторяются. Изменение параметра цикла задается внутри тела цикла, а сам параметр цикла используется в <условии_выхода>. Здесь ключевые слова REPEAT и UNTIL выполняют также роль операторных скобок, поэтому точку с запятой перед словом UNTIL не ставят.
Пример фрагмента программной реализации вычисления значения суммы Y = 1 + 1/2 + 1/3 + ... + 1/N с помощью оператора цикла с постусловием:
BEGIN
Y := 0; I :=1;
REPEAT Y:=Y+1/I;
I:=I+1
UNTIL I>N;
END.
Процедуры прерываний циклов
В циклах FOR, REPEAT и WHILE можно использовать процедуры прерываний - BREAK и CONTINUE.
Процедура BREAK осуществляет немедленный выход из цикла, не дожидаясь выполнения условия о выходе из него. Процедура CONTINUE позволяет начать новую итерацию цикла, даже если предыдущая еще не закончена.
Пример . Найти первое отрицательное число во входном потоке из вещественных чисел (не более 100).
Program contine;
Var
i: Integer;
a: Real;
Begin
For i:=1 to 100 do
Begin
read (a);
If a >= 0 then сontinue; {пpи выполнении условия изменяется паpаметp цикла и цикл повторяется сначала}
WriteLn ( ' Первое отрицательное число = ' , a);
Break {выход из цикла}
end
end.
5.7. Примеры и задания для циклов с постусловием
Пример 1. Вычислить 15 значений для двух функций: y1(x) = tg(x) и y2(x) = ctg(x) на интервале a ≤ x ≤ b, при
a = 0.6*Pi, b = 0.7*Pi.
Для вычислений функций разработана СА (рис. 10) и следующая программа:
Program func ;
Const n = 14;
a = 0.6*Pi;
b = 0.7*Pi;
Var x, y1, y2, dx: real;
Begin
dx:=abs((a-b)/n);
x:=a;
Repeat
y1:=sin(x)/cos(x);
y2:=1/y1;
writeln('x=', x:6:4,' y1= ', y1:7:4,' y2=', y2:7:4);
x:=x+dx
Until x>b;
End.
Пример2. Вычислить сумму s = 1+1/4+1/9+1/16 +...
с точностью до E = 0.00001 (рис. 11).
PROGRAM summa;
CONST
E = 0.00001; {точность}
VAR
s, r: REAL; { s – сумма, r – слагаемое}
i: INTEGER; { i – счетчик слагаемых}
BEGIN
s:=0;
i:=1;
REPEAT
r: = 1/sqr(i); {вычисление слагаемого}
s := s + r;
I := I + 1 {счет слагаемых}
UNTIL r<E; {сравнение слагаемого с Е}
WRITELN ( 'Сумма = ' , s:9:5); {вывод суммы}
END.
Задания для самостоятельного выполнения
Задание 1 (программа_5_1)
Модифицировать программу 3_2 для вычисления функций F1(x) и F2 (x) с применением оператора цикла с постусловием. Выполнить ее и сравнить результаты с полученными ранее.
Задание 2 (программа_5_2)
Начертить структурную схему алгоритма, написать и отладить программу для одной из следующих задач.
1. Вычислить приближенное значение z = arctg x и сравнить с
x - x3/3 + x5/5 - ... + (-1)nx2n+1/(2n+1) + ... (|х|<1), прекращая вычисления, когда очередной член по абсолютной величине будет меньше eps = 0.00001.
2. Вычислить y = x - x2/2 + x3/3 - ... + (-1)n-1xn/n + ... с точностью eps = 0.00001,
где |x|<1. Сравнить результат с вычисленным через стандартную функцию значением y = LN(1+x).
3. Вычислить y = 1 + x/1! + x2/2! + ... + xn/n! + ... с точностью eps = 0.00001 и сравнить результат с вычисленным через стандартную функцию значением
y = ЕXP(x).
4. Вычислить y = sin x = x - x3/3! +x5/5! -...+ (-1)nx2n+1/(2n+1)!+... с точностью eps = 0.00001.
5. Вычислить y = 1 - x2/2! + x4/4! - ... + (-1)nx2n/(2n)! + ... с точностью
eps = 0.0001 и сравнить результат с вычисленным через стандартную функцию значением y = cos (x).
6. Найти произведение цифр заданного натурального числа.
7. Определить число, получаемое выписыванием в обратном порядке цифр заданного натурального числа.
8. Определить номер первого из чисел sin x, sin(sin x), sin(sin(sin x)), ... , меньшего по модулю 10-3.
9. Дана непустая последовательность различных целых чисел, за которой следует нуль. Определить порядковый номер и величину наибольшего среди отрицательных чисел этой последовательности.
10. Вычислять периметры и площади прямоугольных треугольников по длинам катетов, пока один из заданных катетов не окажется нулевым.
11. Дана непустая последовательность положительных целых чисел, за которой следует отрицательное число (это признак конца последовательности). Вычислить среднее геометрическое этих чисел.
12. Дана непустая последовательность ненулевых целых чисел, за которой следует нуль. Определить, сколько раз в этой последовательности меняется знак.
13. Числа Фибоначчи (fn) определяются формулами
f0 = f1 = 1; f n = f n-1 + f n-2 при n = 2,3,... .
Вычислить сумму всех чисел Фибоначчи, которые не превосходят 1000.
14. Дана непустая последовательность положительных вещественных чисел х1, х2, х3,..., за которыми следует отрицательное число. Вычислить величину
х1 + 2х2 + ... + (N-1)xN-1 + N хN, где N заранее не известно.
15. Вычислить длины окружностей, площади кругов и объемы шаров для ряда заданных радиусов. Признаком окончания счета является нулевое значение радиуса.
16. Определить, есть ли среди цифр заданного числа одинаковые цифры.
17. Определить, является ли заданное натуральное число палиндромом, т. е. таким, десятичная запись которого читается одинаково слева направо и справа налево.
18. Вычислить наименьшее общее кратное натуральных чисел a и b.
19. Дано число L. Определить первый отрицательный член последовательности х1, х2, х3,..., где х1 = L, xi = tg(xi-1).
20. Определить, является ли заданное натуральное число совершенным, т.е. равным сумме всех своих (положительных) делителей, кроме самого этого числа (например, совершенное число 6 = 1 + 2 + 3).
Дата: 2019-02-02, просмотров: 275.