Составить программу вычисления значения функции с помощью разложения в ряд. В Паскале.

0 голосов
37 просмотров

Составить программу вычисления значения функции с помощью разложения в ряд. В Паскале.


image

Информатика (282 баллов) | 37 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Вот, написал. Но она выдает неверные результаты!!! Не пойму в чем причина, вроде бы все правильно составлено. Покажи преподу, может он подскажет
var
   s,y,e,x,nf:real;
   n:integer;
begin
write('Введите число x: ');
readln(x);
write('Введите точность вычислений: ');
readln(e);
nf:=1;
s:=1;
n:=1;
y:=1;
while abs(y)>=e do
  begin
  n:=n+1;
  nf:=(2*n-1)*(2*n-2)*nf;                         //здесь вычисляем факториал
  y:=power(-1,n+1)*power(x,2*n-1)/nf;
  if abs(y)>=e then s:=s+y
  end;
writeln('sin(',x,')=',s)
end.

0

Спасибо! Ошибка была в блоке присвоения начальных данных. Я неправильно переписал себе ряд из задания. Первый член ряда Х, а я написал 1. Заменил свой блок на
nf:=1;
s:=x;
n:=1;
y:=x;
заработало.

0

Рано обрадовался! Все равно ошибки бывают((

0

Похоже, разложение в ряд можно использовать только для значений углов, лежащих в 1-й четверти. Для больших значений Х при вычисление факториала при n в районе 10 происходит переполнение, получается слишком уж большое число. В этом случае, через тригонометрические формулы надо выразить искомый синус через синус угла, лежащего в первой четверти. Т.е. при демонстрации программы не вводить числа больше пи/2 (1,5707)