Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Итерационные циклы



Особенностью итерационного цикла является то, что число повторений операторов тела цикла заранее неизвестно. Для его организации используется цикл типа ПОКА. Выход из итерационного цикла осуществляется в случае выполнения заданного условия.

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

Задача 6.11. Составить алгоритм вычисления sin x с помощью ряда:

Y = sin x = x – x3 / 3! + x5 / 5! - … + (-1)n x 2n+1 / (2n+1)!

с заданной точностью e. Для данной знакочередующейся бесконечной суммы требуемая точность будет достигнута, когда очередное слагаемое станет по абсолютной величине меньше e.

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

При составлении алгоритма нужно учесть, что очередное слагаемое можно вычислить используя значение предыдущего слагаемого. Обозначим очередное слагаемое аn, тогда

a0 =x a1 = - x3 /3! = -a0 * x2 /(2*3) (3!=1*2*3)

a2 = + x5 /5! = -a1 * x2 /(4 * 5) … (5!=1*2*3*4*5=3!*4*5)

an = - an-1 * x2 / (2*n*(2*n+1))

Коэффициент для пересчета слагаемого можно получить, если an разделить на an-1 и преобразовать формулу:

an = (-1)n x 2n+1 / (2n+1)! = -1 x 2n+1 / (2n-1)! = - x 2

an-1 (-1)n-1 x 2(n-1)+1 / (2(n-1)+1)! x 2n-1 / (2n+1)! 2n(2n+1)

Тест: Вход x=1.57 e=0.00001

Выход y= 1.000004 sin x = 1.000000

Решение задачи 6.11. на языке Turbo Pascal:

Program PR_sinX;

Var E, {заданная точность}

x, {заданный аргумент функции sin }

a, {очередной член ряда - слагаемое}

y: Real; {сумма ряда}

n: Integer; {номер итерации}

BEGIN

Write(’Введите аргумент функции: ’);

ReadLn(x);

Write(’Введите точность: ’);

ReadLn(E);

y:=0; a:=x; n:=0;

While abs(а) >=E do begin

y:=y + a;

n:=n + 1;

a:=-a*x*x/(2*n*(2*n+1));

end;

WriteLn(’О т в е т: y= ’, y);

WriteLn(’О т в е т: sin x= ’, sin(x));

ReadLn

END.

Пояснения к программе:

1) Оператор цикла

While abs(а) >=E do begin

….

end;

обеспечивает вычисление суммы ряда, пока модуль очередного слагаемого больше или равен заданной точности Е.

2) Перед выполнением цикла переменным присваиваются начальные значения:

начальное значение суммы y:=0;

начальный номер итерации n:=0;

значение первого слагаемого a:=x;

В теле цикла вычисляется сумма ряда y:=y + a;

увеличивается номер итерации n:=n + 1;

пересчитывается слагаемое a:=-a*x*x/(2*n*(2*n+1));

3) Оператор WriteLn(’О т в е т: y= ’, y); выводит значение суммы ряда y, а оператор WriteLn(’О т в е т: sin x= ’, sin(x)); - значение полученное с помощью стандартной функции sin (x). Если алгоритм вычисления верен, эти значения совпадут.





Дата публикования: 2015-01-14; Прочитано: 375 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...