#include <iostream>
#include <ctime>
#include <iomanip>
#include <math.h>
using namespace std;
double fact(int k)
{
double result = 1;
if (k > 1)
result = k * fact(k - 1);
return result;
}
// прототип рекурсивной функции вычисления суммы
double sum3(double, double, int);
int main()
{
setlocale(0, "");
int n;
double x, term, a, b, dx, eps;
cout << "Input a:";//Запрос начала интервала
cin >> a;//Ввод начала интервала
cout << "Input b:";//Запрос конца интервала
cin >> b;//Ввод конца интервала
cout << "Input dx:";//Запрос шага изменения аргумента
cin >> dx;//Ввод шага изменения аргумента
cout << "Input eps:";//Запрос точности вычисления
cin >> eps;//Ввод точности вычисления
cout << setw(15) << "x" << setw(15) << "function" << setw(15) << "summa1" << setw(15) << "summa2" << setw(15) << "summa3" << endl;//Использование манипуляторов для выравнивания
for (x = a; x <= b; x += dx)//Цикл для аргумента
{
double summa1 = 0;
n = 0;
term = x;//Определение первого слагаемого
while (fabs(term) > eps) // Цикл для достижения точности
{
summa1 += term;//Увеличение суммы
n++;
term = (pow(x, 2 * n + 1)) / (fact(2 * n + 1));//Вычисление следующего сла-гаемого
}
double summa2 = 0;
n = 0;
term = x;//Определение первого слагаемого
while (fabs(term) > eps) //Цикл для достижения точности
{
summa2 += term;//Увеличение суммы
n++;
term *= (x *(fact(2*n-1)) / (fact(2*n + 1)));//Вычисление следующего слагаемого
}
double summa3 = 0;
summa3 = sum3(x, eps, 0);
cout << setw(15) << x << setw(15) << (exp(x) + exp(-x)) / 2 << setw(15) << summa1 << setw(15) << summa2 << setw(15) << summa3 << endl;
}
}
double sum3(double x, double epsilon, int n)
{
double a_n = 0;
if (n == 0) a_n = x;
else a_n = (pow(x, 2 * n + 1)) / (fact(2 * n + 1));
if (fabs(a_n) < epsilon)
return 0;
else
return a_n + sum3(x, epsilon, n+1);
}