Здавалка
Главная | Обратная связь

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



Оператор цикла с постусловием производит проверку условия после выполнения операторов тела цикла. Поэтому тело цикла должно выполниться хотя бы один раз. Стpуктуpа оператора имеет следующий вид:

REPEAT <оператор1>;

...

<операторN>

UNTIL <условие_выхода >;

Правило выполнения оператора цикла. Выход из цикла происходит при истинности значения логического выражения <условие_выхода>, иначе операторы тела цикла повторяются. Изменение параметра цикла задается внутри тела цикла, а сам параметр цикла используется в <условии_выхода>. Здесь ключевые слова REPEAT и UN­TILвыполняют также роль операторных скобок, поэтому точку с запятой перед словом 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.

Примеры и задания для циклов с постусловием

Пример 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

Untilx>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.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.