19.10.2010, 21:43. Просмотров 1423. Ответов 1
Задание:
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от хнач до хкон с шагом dx с точностью e. Таблицу снабдить заголовком и шапкой. Каждая строка должна содержать значение аргумента, значение функции и количество просуммирорванных членов ряда.
В моем варианте присутствует факториал в знаменателе дроби - (2n+1)!
Я в С++ не силен, до этого работал только в Паскале, но нам дают задания, которые надо делать исключительно на си.
Вот что у меня получилось:
C++ |
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
40
41
42
| #include <iostream>
#include <cmath>
#include <clocale>
#include <stdio.h>
using namespace std;
unsigned long fact(unsigned int n)
{
if(n<=1)
return 1;
return n* fact(n-1);
}
int main ()
{
setlocale(LC_ALL, "russian");
float sum=0,arg=0,x=0,xnach=0, xkonech=0, shag=0, toch=0;
int n;
cout<<"\nВведите x начальное:"; cin>>xnach;
cout<<"Введите шаг:"; cin>>shag;
cout<<"Введите х конечное:"; cin>>xkonech;
cout<<"Введите точность:"; cin>>toch;
cout<<"\nx\tn\tsum\tsin";
for(float x=xnach; x<=xkonech; x+=shag)
{
n=0;
arg=(pow((float)(-1), n)*(pow(x,2*n)))/(fact(2*n+1));
while(abs(arg)>toch)
{
sum+=arg;
n++;
arg=(pow((float)(-1), n)*(pow(x,2*n)))/(fact(2*n+1));
}
cout.precision(4);
cout<<"\n"<<x<<"\t"<<n<<"\t"<<sum<<"\t"<<(sin((double)x)/x);
}
cout<<endl;
return 0;
} |
|
Препод сказал заменить рекурсивную функцию факториала на "расширенный вид", ибо у меня выскакивает ошибка после подсчета по формуле вот на этом моменте на
скрине.
Подскажите приблизительно, как написать правильно эту самую функцию...