RadioNurshat

Function Calculation Accuracy

Sep 22nd, 2020 (edited)
661
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. double power(double base, int n) {
  5.     double result = 1.0;
  6.     if (n == 0) {
  7.         return 1;
  8.     }
  9.     for (int i = 1; i <= n; i++) {
  10.         result = result * base;
  11.     }
  12.     return result;
  13.    
  14. }
  15. double fact(int n) {
  16.     if (n == 0) {
  17.         return 1.0;
  18.     } else {
  19.         return (double)n * fact(n - 1);
  20.     }
  21. }
  22. double exponent(double epsilon, double x) {
  23.     int n = 1;
  24.     double current = 1.0;
  25.     double result = current;
  26.     while (abs(current) >= epsilon) {
  27.         current = power(x, n) / fact(n);
  28.         result = result + current;
  29.         n++;
  30.     }
  31.     return result;
  32. }
  33. double merkator(double epsilon, double x) {
  34.     int n = 2;
  35.     double current = x;
  36.     double result = current;
  37.     while (abs(current) >= epsilon) {
  38.         current = (power(-1, n - 1) * power(x, n)) / n;
  39.         result = result + current;
  40.         n++;
  41.     }
  42.     return result;
  43. }
  44. double cosine(double epsilon, double x) {
  45.     int n = 1;
  46.     double current = 1.0;
  47.     double result = current;
  48.     while (abs(current) >= epsilon) {
  49.         current = power(-1, n) * (power(x, 2 * n) / fact(2*n));
  50.         result = result + current;
  51.         n++;
  52.     }
  53.     return result;
  54. }
  55. double arctg(double epsilon, double x) {
  56.     int n = 2;
  57.     double current = x;
  58.     double result = current;
  59.     while (abs(current) >= epsilon) {
  60.         current = (power(-1, n - 1) / (2 * n - 1)) * power(x, 2 * n - 1);
  61.         result = result + current;
  62.         n++;
  63.     }
  64.     return result;
  65. }
  66.  
  67.  
  68.  
  69. int main()
  70. {
  71.     setlocale(LC_ALL, "Russian");
  72.     int n;
  73.     double x;
  74.     double accuracy;
  75.  
  76.     cout << "1 - e^x" << endl << "2 - ln(1+x)" << endl << "3 - cos(x)" << endl << "4 - arctg(x)" << endl;
  77.     cout << "Введите номер функции > "; cin >> n; cout << endl;
  78.     cout << "Введите точность > "; cin >> accuracy; cout << endl;
  79.  
  80.     double result;
  81.     switch (n)
  82.     {
  83.     case 1:
  84.         cout << "Введите x > "; cin >> x; cout << endl;
  85.         result = exponent(accuracy, x);
  86.         break;
  87.     case 2:
  88.         while (true) {
  89.             cout << "Введите x > "; cin >> x; cout << endl;
  90.             if (x > -1 && x <= 1) {
  91.                 break;
  92.             }
  93.             else {
  94.                 cout << "Ошибка: х должен быть в пределах (-1; 1]" << endl;
  95.             }
  96.         }
  97.         result = merkator(accuracy, x);
  98.         break;
  99.     case 3:
  100.         cout << "Введите x > "; cin >> x; cout << endl;
  101.         result = cosine(accuracy, x);
  102.         break;
  103.     case 4:
  104.         while (true) {
  105.             cout << "Введите x > "; cin >> x; cout << endl;
  106.             if (x >= -1 && x <= 1) {   
  107.                 break;
  108.             }
  109.             else {
  110.                 cout << "Ошибка: х должен быть в пределах [-1; 1]" << endl;
  111.             }
  112.         }
  113.         result = arctg(accuracy, x);
  114.         break;
  115.     }
  116.     cout << "Результат: " << result << endl;
  117.     system("pause");
  118. }
  119.  
RAW Paste Data