Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФОРМАТИКА_Паскаль.doc
Скачиваний:
7
Добавлен:
08.05.2019
Размер:
1.77 Mб
Скачать

7.2. Цикл с постусловием repeat

В цикле с предусловием предварительной проверкой определяется, выполнить тело цикла или нет, до первой итерации. Если это не соответствует логике алгоритма, то можно использовать цикл с постусловием, то есть цикл, в котором проверяется делать или нет очередную итерацию, лишь после завершения предыдущей. Это имеет принципиальное значение лишь на первом шаге, а далее циклы ведут себя одинаково.

Оператор repeat…until реализует цикл с постусловием. Цикл с пост условием всега будет выполнен хотя бы один раз.

Repeat

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

<оператор 2>;

………………

Until<условие>

В цикле repeat выполняется тело цикла, пока условие истинно.

Итак: цикл while условие do<оператор>

––– пока условие истинно выполнять оператор.

Цикл repeat операторы until условие.

выполнять операторы до тех пор пока условие ложно.

То есть, в операторе while истинным должно являться условие повторения вычислений, а в операторе repeat – условие их окончания.

Например:

Вычислить отрицательный корень управления x3-x+0,5=0, используя рекуррентную форму.

(k=0, 1, 2, …) x0=-1,3; ε=10-4.

Определить количество итераций; вычисления прекратить при |xk+1 - xk|<ε

Блок-схема алгоритма решения:

AutoShape 138

начало

Line 139

AutoShape 140

x1, E

Rectangle 142

K=0

Line 152 Line 153

x0=x1

x1=

K=k+1

AutoShape 150

|x1-x0|<E

нет

Line 151

да

x=x1

X, k

Рисунок 8.3

Конец

Program cicle_postusl;

Uses CRT;

Var

X1, x0, X, eps: real;

K: integer;

Begin

CLRSCR;

Write (‘x0=’); readln(x1); {Вводначальногозначения}

Write (‘eps=’); readln(eps); {Вводточности}

K:=0; { начальное значения количества итераций}

Repeat {начало цикла}

X0:=x1;

X1:=exp(1/3*ln(x0-0,5));

K:=k+1;

Untilabs(x1-x0)<eps; {Пока условие логично выполнять тело цикла}

X:=x1 {присвоение переменной х значение корня управления}

Writeln (‘x=’, x:1:2,’ k=’,k);

Readln

end.

7.3. Цикл с параметром for

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

Формат оператора.

For<параметр_цикла>:=<начальные_значения>to<конечное_значение>do<оператор>;

for<параметр_цикла>:<конечное_значение>dowto<начальное_значение>do<оператор>;

Начальные и конечные значения счетчика, вычисляются один раз до входа в цикл. Оператор, представляющий собой тело цикла, может быть простым или составным. Например:

…………………………..

Var

I: integer; c: char;

Begin

{Вывод в печать целых чисел от 1 до 10}

For i:=1 to 10 do writeln (i); {Шагцикларавен 1}

{ Вывод в печать чисел от 10 до -10}

For i:=10 downto -10 do writeln (i); {шагравен -1}

{Вывод на печать латинских символов от а до z}

{Параметр цикла изменяется от а до r в алфавитном порядке}

For c:=’a’ to “z” do writeln (c);

end.

Начальные и конечные значения должны быть того же типа, что и параметр цикла.

Например: Вычислить факториал числа N (N!=1, 2, 3…N)

Блок схема алгоритма приведена рис. 5.4

Вводится число N. Переменной factorial (выходные данные) присваивается начальное значение. Параметру цикла I присваивается начальное значение 1, и цикл повторяется до N с шагом 1. Когда параметр I становится больше N, цикл заканчивается, и на печать выводится значение переменной factorial, которая вычисляется в теле цикла.

AutoShape 175

Начало

AutoShape 177

n

Rectangle 179

Factorial = 1

AutoShape 181

I=2, n

Line 186 Line 187 Line 189

Factorial = factorial*i

Line 185

Factorial

Конец

Рис. 7.4 Алгоритм решения

Программа решение задачи.

Program cicle_for;

Uses crt;

Var

Factorial, n, i: integer;

Begin

CLRSCR;

Write (‘n=’); readln(n);

Factorial:=1; {начальноезначение}

For i:=2 to n do

Factorial:=factorial*I;

Writeln (factorial);

Readln;

End.