SaveText.Ru

1 лаб
  1. #include <iostream>
  2. #include <ctime>
  3. #include <iomanip>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. double fact(int k)
  9. {
  10.      double result = 1;
  11.         if (k > 1)
  12.         result = k * fact(k - 1);
  13.         return result;
  14. }
  15. // прототип рекурсивной функции вычисления суммы
  16. double sum3(double, double, int);
  17. int main()
  18. {
  19.         setlocale(0, "");
  20.         int n;
  21.         double x, term, a, b, dx, eps;
  22.         cout << "Input a:";//Запрос начала интервала
  23.         cin >> a;//Ввод начала интервала
  24.         cout << "Input b:";//Запрос конца интервала
  25.         cin >> b;//Ввод конца интервала
  26.         cout << "Input dx:";//Запрос шага изменения аргумента
  27.         cin >> dx;//Ввод шага изменения аргумента
  28.         cout << "Input eps:";//Запрос точности вычисления
  29.         cin >> eps;//Ввод точности вычисления
  30.         cout << setw(15) << "x" << setw(15) << "function" << setw(15) << "summa1" << setw(15) << "summa2" << setw(15) << "summa3" << endl;//Использование манипуляторов для выравнивания
  31.  
  32.         for (x = a; x <= b; x += dx)//Цикл для аргумента
  33.         {
  34.                 double summa1 = 0;
  35.                 n = 0;
  36.                 term = x;//Определение первого слагаемого
  37.                 while (fabs(term) > eps) // Цикл для достижения точности
  38.                 {
  39.                         summa1 += term;//Увеличение суммы
  40.                         n++;
  41.                         term = (pow(x, 2 * n + 1)) / (fact(2 * n + 1));//Вычисление следующего сла-гаемого
  42.                 }
  43.                 double summa2 = 0;
  44.                 n = 0;
  45.                 term = x;//Определение первого слагаемого
  46.                 while (fabs(term) > eps) //Цикл для достижения точности
  47.                 {
  48.                         summa2 += term;//Увеличение суммы
  49.                         n++;
  50.                         term *= (x *(fact(2*n-1)) / (fact(2*n + 1)));//Вычисление следующего слагаемого
  51.                 }
  52.                 double summa3 = 0;
  53.                 summa3 = sum3(x, eps, 0);
  54.                 cout << setw(15) << x << setw(15) << (exp(x) + exp(-x)) / 2 << setw(15) << summa1 << setw(15) << summa2 << setw(15) << summa3 << endl;
  55.         }
  56. }
  57. double sum3(double x, double epsilon, int n)
  58. {
  59.         double a_n = 0;
  60.                 if (n == 0) a_n = x;
  61.                 else a_n = (pow(x, 2 * n + 1)) / (fact(2 * n + 1));
  62.         if (fabs(a_n) < epsilon)
  63.                 return 0;
  64.         else
  65.         return a_n + sum3(x, epsilon, n+1);
  66. }

Share with your friends:

Print