0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 19
1

Рекурсия: вычисление функции sin разложением в степенной ряд

24.02.2013, 20:32. Показов 2926. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать программу обрабатывающую данные рекурсивным способом которая вычисляет функцию Y=SIN(X), разложенную в степенной ряд, с заданной степенью точности.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2013, 20:32
Ответы с готовыми решениями:

Составить программу для вычисления значения функции y=ln(1+x) разложением функции в степенной ряд
вычислить с точностью E: y=ln(1+x)=x-x 2\2+x 3\3+.+(-1) (n-1)x n\n+ как это делать, кто знает?

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

Вычисление sin(x) разложением в ряд
Здравствуйте! Помогите, пожалуйста, не могу добиться правильных значений с условием погрешности в...

Вычисление значения функции с помощью разложения функции в степенной ряд
составить программу для вычисления значения функции y=1/(1+x) с помощью разложения функции в...

11
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
25.02.2013, 09:56 2
Вычисление через рекуррентное отношение, если сможете сделать чистую рекурсию, удачи.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
uses crt;
var x,e,s,t:real;
    n:integer;
begin
clrscr;
write('x=');readln(x);
repeat
write('e>0 e=');
readln(e);
until e>0;
if e>=abs(x) then s:=x
else
 begin
  n:=1;
  t:=x;
  s:=x;
  while abs(t)>e do
   begin
    n:=n+1;
    t:=-t*x*x/((2*n-1)*(2*n-2));
    s:=s+t;
   end;
 end;
writeln('Y=        ',s:0:6);
writeln('sin(',x:0:2,')=',sin(x):0:6);
readln
end.
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 19
28.02.2013, 20:34  [ТС] 3
Извините а можно ли в этой подпрограмме использовать подпрограммы? Если можно то как?
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
01.03.2013, 09:01 4
Можно так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
uses crt;
function F(x:real;n:integer):real;
begin
if n=1 then F:=x
else F:=-F(x,n-1)*x*x/((2*n-1)*(2*n-2));
end;
var x,e,s,t:real;
    n:integer;
begin
clrscr;
write('x=');readln(x);
repeat
write('e>0 e=');
readln(e);
until e>0;
if e>=abs(x) then s:=x
else
 begin
   n:=1;
   s:=x;
   while abs(F(x,n))>e do
     begin
      n:=n+1;
      s:=s+F(x,n)
     end;
 end;
writeln('Y=        ',s:0:6);
writeln('sin(',x:0:2,')=',sin(x):0:6);
readln
end.
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 19
06.03.2013, 21:39  [ТС] 5
Извините а что вы обозначили за переменные s, t и n?
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
07.03.2013, 07:30 6
s-сумма, n-номер члена ряда, t-выкинь, это осталось от первой программы-значение очередного члена ряда, сейчас это делает функция.
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 19
10.03.2013, 13:35  [ТС] 7
Извините, а можно ли эту программу написать используя только подпрограммы (т.е. ввод процедура обработка рекурсивные функции вывод процедура)?
0
Почетный модератор
64288 / 47587 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
10.03.2013, 13:43 8
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
uses crt;
procedure vvod(var x,e:real);
begin
write('x=');readln(x);
repeat
write('e>0 e=');
readln(e);
until e>0;
end;
function F(x:real;n:integer):real;
begin
if n=1 then F:=x
else F:=-F(x,n-1)*x*x/((2*n-1)*(2*n-2));
end;
procedure vyvod(x,e:real);
var n:integer;
    s:real;
begin
if e>=abs(x) then s:=x
else
 begin
   n:=1;
   s:=x;
   while abs(F(x,n))>e do
     begin
      n:=n+1;
      s:=s+F(x,n)
     end;
 end;
writeln('Y=        ',s:0:6);
writeln('sin(',x:0:2,')=',sin(x):0:6);
end;
var x,e:real;
begin
clrscr;
vvod(x,e);
vyvod(x,e);
readln
end.
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 19
26.03.2013, 22:51  [ТС] 9
Извините а как можно сделать так чтобы окончательный ответ был в подпрограмме-функции и вычислялся рекурсивно?

Добавлено через 16 минут
Извините а можно ли сделать так, чтобы окончательный ответ программы был в имени функции а сама функция была бы рекурсивна?
0
7 / 7 / 6
Регистрация: 21.03.2013
Сообщений: 33
27.03.2013, 01:09 10
Всегда считал, что рекурсия это когда процедура-функция сама себя вызывает пока не достигается определенный результат (ну или не переполняется память), но выложенное решение порвало мою психику.
1
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 19
28.03.2013, 10:54  [ТС] 11
TFLinden , а как правильно эта программа должна выглядеть?
0
7 / 7 / 6
Регистрация: 21.03.2013
Сообщений: 33
28.03.2013, 12:26 12
Ну я так понимаю тут надо использовать стандартное разложение в ряд Маклорена и рекурсивно считать сумму этого ряда. Но мне сейчас некогда этим заниматься.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2013, 12:26
Помогаю со студенческими работами здесь

Вычисление функции с помощью разложения в степенной ряд
Составить программу для вычисления значения функции y=ln(1-x) с помощью разложения функции в...

Вычисление функции y=ch(x) с помощью разложения функции в степенной ряд
составить программу для вычисления функции y=ch(x) с помощью разложения функции в степенной ряд...

Вычисление Ln(1+x) разложением в ряд
Составить программу на языке паскаль для вычисления функции Ln(1+x) c погрешностью Eps путём...

Рекурсия: вычисление sin(n*A)
Вычислить sin(n*A), на основе равенства: sin(A+B)=sin(A)*cos(B)+cos(A)*sin(B)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru