Программирование операций с неопределенным числом повторений. Оператор цикла с предусловием.
Если число повторений некоторого оператора или группы операторов заранее не определено, например, при выполнении приближенных вычислений или суммировании бесконечных рядов, то следует применять оператор цикла с предусловием:
WHILE <условие> DO <тело цикла> ;
где <условие> - логическое условие продолжения цикла; <тело цикла> - это любой оператор языка Pascal (простой или составной), а все, что ему предшествует, является заголовком цикла.
Для того, чтобы оператор цикла WHILE когда-нибудь закончился, нужно, чтобы в теле цикла изменялись переменные, входящие в <условие>, и изменялись так, чтобы когда-нибудь <условие> стало ложным. При выполнении бесконечного цикла компьютер «зависает» и не реагирует на большинство команд. Для прекращения бесконечного цикла используется сочетание клавиш Ctrl+Break.
Рассмотрим в качестве примера программу, осуществляющую суммирования знакочередующихся нечётных чисел:
1 – 3 + 5 – 7 + 9 – 11 + 13 – 15 + 17 – 19 + ….
Для смены знака вводим специальную переменную j.
Program Sum_Sign;
var i,j,N:integer;
S:real;
Begin
Writeln(‘Vvedite N’);
Readln(N);
S:=0;
i:=1;
j:=1;
WHILE i<=N do
begin
S=S+i*j;{переменная j отвечает только за смену знака}
i:=i+2;
j:=-j;{для смены знака на следующем шаге}
end;
writeln(‘Summa=’,S:8:0);
Readln
End.
Оператор цикла с постусловием.
В языке Pascal имеется еще один оператор цикла, позволяющий организовывать циклы с неопределенным числом повторений. Это оператор цикла с постусловием:
REPEAT
<оператор 1>;
<оператор 2>;
...
<оператор N>
UNTIL <условие>;
Здесь <оператор 1>, <оператор 2>, …, <оператор N> – любые операторы языка Pascal, образующие тело цикла.
Работает оператор следующим образом. Сначала выполняются операторы в теле цикла. Затем проверяется <условие>. Если <условие> не является истинным, то вновь происходит выполнение операторов в теле цикла. Повторение операторов в теле цикла продолжается до тех пор, пока <условие> не станет истинным.
Для того, чтобы оператор цикла UNTIL когда-нибудь закончился, нужно, чтобы в теле цикла изменялись переменные, входящие в условие, и изменялись так, чтобы когда-нибудь условие стало истинным (а не ложным, как для оператора с предусловием). Заметим, что при любом значении <условия> операторы в теле цикла выполнятся хотя бы один раз.
В качестве примера рассмотрим программу, осуществляющую вычисление квадратного корня любого вещественного числа x методом последовательных приближений (методом Ньютона-Рафсона). Алгоритм метода таков. Задаётся некоторое начальное приближение для искомого квадратного корня y=y0, например, у0=1. Следующее приближение y1 получается при подстановке этого значения в формулу:
y1=(y0+x/y0)/2,
где x – значение аргумента. Второе приближение y2 получается при подстановке y1 в ту же формулу:
y2=(y1+x/y1)/2.
Доказано, что последовательность приближений y0,y1, y2,… сходится к точному значению квадратного корня из аргумента x, причём окончание цикла вычислений определяется условием:
|yi – yi+1|<ε,
где ε – заданная точность вычислений.
Вматематикегреческой буквойε (эпсилон) принято обозначать любую наперёд заданную бесконечно малую величинуε<<1. На практике это означает, что ε должна быть, по крайней мере, в десять раз меньше единицы. Поскольку в языке Pascal греческие буквы отсутствуют, вместо буквы ε применяется обозначение (идентификатор) Eps.
Program Sq_root;
Var X,Yk,Yn,Eps:real;
Begin
Writeln(‘Vvedite X i Eps’);
Readln(X,Eps);
If X>0 then
begin
Yk:=1;
repeat
Yn:=Yk;
Yk:=(Yn+X/Yn)/2
Until abs(Yn-Yk)<Eps;
writeln(‘Koren iz x=’, Yk:10:8)
end
else
writeln(‘Oshibka, X<0’);
readln
End.
Вложенные циклы.
Любой из рассмотренных выше операторов цикла может содержать внутри себя один или несколько других операторов цикла. Цикл, находящийся внутри другого цикла, называется вложенным циклом. Цикл, охватывающий все остальные циклы, называется внешним циклом. Параметры внешнего и внутреннего циклов различны и изменяются не одновременно. Область действия внутренних вложенных циклов должна располагаться внутри внешнего цикла. В частности, при одном значении параметра внешнего цикла параметр внутреннего цикла должен пробегать все свои допустимые значения.
Часто используются вложенные циклы с разными операторами цикла, например, внешним циклом может быть оператор REPEAT...UNTIL, а внутренним – FOR...TO...DO.
Следующая программа иллюстрирует работу вложенных циклов.
Program Ladder;
{Вывод цепочек целых чисел лесенкой}
var i,j,n0,nk:integer;
Begin
writeln('Vvesti n0 и nk’);
readln(n0,nk);
for i:=n0 to nk do
begin
for j:=n0 to i do
write(i:3);
writeln
end;
readln
End.
Дата добавления: 2016-04-06; просмотров: 1161;