Sanlover

Untitled

Oct 20th, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.90 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     SetConsoleOutputCP(1251);
  8.  
  9.     int N;
  10.     double x, enumerator, summary, summaryEps, summaryEps10, amountEps, amountEps10, eps, eps10;
  11.     double denomerator = 1;
  12.  
  13.     cout << "Введите значение X: ";
  14.     cin >> x;
  15.     if (x > 1)
  16.     {
  17.         cout << "Значение X должно быть в пределах от (-inf; 1]";
  18.         return 0;
  19.     }
  20.     cout << "Введите значение N: ";
  21.     cin >> N;
  22.     if (N < 0)
  23.     {
  24.         cout << "Значение N должно быть в пределах от [0; +inf)";
  25.         return 0;
  26.     }
  27.     cout << "Введите значение EPS: ";
  28.     cin >> eps;
  29.     if (eps < 0)
  30.     {
  31.         cout << "Т.к. значение eps неположительное, оно будет взято по модулю";
  32.         eps = abs(eps);
  33.     }
  34.  
  35.     eps10 = eps / 10;
  36.     summary = enumerator = x;
  37.  
  38.     // Проверка на то, что самый первый член меньше большей погрешности (Eps)
  39.     if (eps >= x)
  40.     {
  41.         summaryEps = amountEps = 0;
  42.     }
  43.     else
  44.     {
  45.         summaryEps = x;
  46.         amountEps = 1;
  47.     }
  48.  
  49.     // Проверка на то, что самый первый член меньше меньшей погрешности (Eps/10)
  50.     if (eps10 >= x)
  51.     {
  52.         summaryEps10 = amountEps10 = 0;
  53.     }
  54.     else
  55.     {
  56.         summaryEps10 = x;
  57.         amountEps10 = 1;
  58.     }
  59.  
  60.     // Цикл в котором считаются i-тые элементы, начиная с i = 1 по N-1;
  61.     // temp выступает перменной в которую записывается i-oe слагаемое суммы
  62.     // условия в цикле нет, но предусмотрен выход с помощью break'a (поэтому while не требуется)
  63.     for (int i = 1;; i++)
  64.     {
  65.         enumerator *= (2 * i - 1) * x * x;
  66.         denomerator *= 2 * i;
  67.         double temp = (enumerator) / (denomerator * (2 * i + 1));
  68.  
  69.         // чтобы успешно посчитать сумму N элементов
  70.         if (i < N)
  71.         {
  72.             summary += temp;
  73.         }
  74.  
  75.         // Если i-ое слагаемое больше eps, то оно однозначно больше чем eps/10
  76.         // поэтому мы сразу увеличиваем суммы и той и той eps, а также кол-во
  77.         // элементов
  78.         if (abs(temp) > eps)
  79.         {
  80.             summaryEps += temp;
  81.             amountEps++;
  82.             summaryEps10 += temp;
  83.             amountEps10++;
  84.         } // А тут проверка на то, что i-ое слагаемое меньше чем eps, но больше чем
  85.           // eps/10
  86.         else if (abs(temp) > eps10)
  87.         {
  88.             summaryEps10 += temp;
  89.             amountEps10++;
  90.         } // Если не нашлось число, которое меньше или равное самой маленькой погрешности, то
  91.         // мы выходим из цикла
  92.         else
  93.         {
  94.             break;
  95.         }
  96.     }
  97.  
  98.     cout << endl << "Сравнение результатов." << endl;
  99.     cout << "Сумма N(" << N << ") элементов равна: " << summary << endl;
  100.     cout << "Сумма (" << amountEps << ") элементов, превышаюших по абсолютной величине EPS(" << eps
  101.          << ") равна: " << summaryEps << endl;
  102.     cout << "Сумма (" << amountEps10 << ") элементов, превышаюших по абсолютной величине EPS/10(" << eps10
  103.          << ") равна: " << summaryEps10 << endl;
  104.     cout << "Значение функции arcsin(X), где X = " << x << " равно: " << asin(x);
  105.     return 0;
  106. }
  107.  
Add Comment
Please, Sign In to add comment