Циклы с неизвестным числом повторений
В циклах с неизвестным числом повторений используются, как правило, операторы repeat-untilи while-do.
Табулирование функции
Пример 12. Табулировать функцию y=2x-sin(x) на отрезке [xmin,xmax] с шагом Dx, т.е. вычислить таблицу значений функции y(x), если x задан на отрезке [xmin,xmax].
В данном примере для организации циклического процесса будем использовать оператор repeat-until.
Общий вид оператора repeat-until:
Repeat
оператор1;
оператор2;
…
операторn;
until логическое_выражение;
Выполнение оператора repeat-until:
1) выполняются операторы цикла;
2) если значение логического_выражения равно true(истина), происходит выход из цикла, в противном случае процесс повторяется, начиная с пункта 1).
Программа Схема алгоритма
Program Prim12;
var
x, y, xmin, xmax, dx : real;
begin
writeln('Введите xmin,xmax,dx');
readln(xmin,xmax,dx);
x:=xmin;
repeat
y:=2*x-sin(x);
writeln('x=', x:7:2, ' y=', y:7:2);
x:=x+dx;
until x>xmax;
end.
Исходные данные: Результат:
xmin = -2; xmax = 1; dx = 0.5 x= -2.00 y= -3.09
x= -1.50 y= -2.00
x= -1.00 y= -1.16
x= -0.50 y= -0.52
x= 0.00 y= 0.00
x= 0.50 y= 0.52
x= 1.00 y= 1.16
Итерационные вычислительные процессы
Пример 13. Найти методом итераций корень уравнения на интервале [a,b] с заданной точностью e и определить количество итераций.
Указания. 1. В качестве нулевого приближения корня уравнения выберем середину интервала [a,b] (x:=(a+b)/2).
2. Для получения предыдущего и последующего приближенных значений корня уравнения будем использовать две переменные x0 и x.
3.Условие выхода из цикла: |x - x0|£e.
Программа Схема алгоритма
Program Prim13;
var
a,b,x,x0,eps : real;
n : integer;
begin
writeln('a,b,eps');
readln(a,b,eps);
x:=(a+b)/2;
n:=0;
repeat
x0:=x;
x:=sqrt(18+x0)+sqrt(16-x0);
n:=n+1;
until abs(x-x0)<=eps;
writeln('x=', x:8:5,' n=', n:3);
end.
Исходные данные: Результат:
a = 6; b = 8; eps = 0.0001 x= 7.93272 n= 5
Вычисление суммы членов бесконечного ряда
Пример 14. Найти сумму бесконечного ряда:
Условие выхода из цикла: |sin(nx)/n|£e
В этом примере будем использовать оператор while-do.
Общий вид оператора while-do:
Whileлогическое_выражениеdo
Begin
оператор1;
оператор2;
…
операторn;
end;
Выполнение оператораwhile-do:
Если значение логического_выражения равно true (истина), то выполняются операторы цикла, в противном случае происходит выход из цикла.
Программа Схема алгоритма
Program Prim14;
var
a,s,x,eps : real;
n : integer;
begin
writeln('Введите x, eps');
readln(x,eps);
s:=0;
n:=1;
a:=sin(x);
while abs(a)>eps do
begin
s:=s+a;
n:=n+1;
a:=sin(n*x)/n;
end;
writeln('s=', s:8:3);
end.
Исходные данные: Результат:
x = 3.48; eps = 0.0001 s= -0.168
Пример 15. Найти сумму ряда
Условие выхода из цикла: |xn/n!|£e
Указания. 1. В качестве начальных приближений переменных выберем следующие значения:
s:=0; n:=1; a:=x;гдеа -очередной (текущий) член ряда.
2. Каждый последующий член ряда будем получать умножением предыдущего члена на дробь x/nи умножать на –1,т.к. ряд знакопеременный, т.е. будем вычислять по формуле:a:= -a*x/n.
Программа Схема алгоритма
Program Prim15;
var
a,s,x,eps : real;
n : integer;
begin
writeln('Введите x,eps');
readln(x,eps);
s:=0;
n:=1;
a:=x;
while abs(a)>eps do
begin
s:=s+a;
n:=n+1;
a:= -a*x/n;
end;
writeln('s=', s:8:3);
end.
Исходные данные: Результат:
x = 1.3; eps = 0.0001 s= 0.727
Сложные циклы
Сложные циклы – это циклы, содержащие внутри себя другие циклы, называемые вложенными.
Цикл, не входящий в другие циклы, но содержащий в себе другие циклы, называется внешним циклом.
Цикл, входящий в другие циклы, но не содержащий в себе другие циклы, называется внутренним циклом.