Sanlover

Untitled

Nov 25th, 2021
501
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h> // нужна для SetConsoleOutputCP
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;
  5.  
  6. void summaryWithEpsilon(double& summary, int& amount, const double& eps, const double& X, const int& N)
  7. {
  8.     summary = 0;
  9.     // enumerator - числитель, denomerator - знаменатель
  10.     double enumerator = X, denomerator = 1;
  11.     // Запускаем цикл от 0 до N-1
  12.     for (int i = 0; i < N; i++)
  13.     {
  14.         // Считаем слагаемое
  15.         const double temp = enumerator / denomerator;
  16.         // добавляем к основной сумме
  17.         summary += temp;
  18.  
  19.         // Если наше слагаемое по абсолютной величине больше чем погрешность
  20.         if (abs(temp) > eps)
  21.         {
  22.             // Добавляем его в сумму слагаемых, превышающих по абсолютной величине погрешность и
  23.             // прибавляем к их кол-ву единицу
  24.             summary += temp;
  25.             amount++;
  26.         }
  27.         // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
  28.         enumerator *= -X * X;
  29.         denomerator += 2;
  30.     }
  31. }
  32.  
  33. void summarySimple(double& summary, const double& X, const int& N)
  34. {
  35.     summary = 0;
  36.     // enumerator - числитель, denomerator - знаменатель
  37.     double enumerator = X, denomerator = 1;
  38.     // Запускаем цикл от 0 до N-1
  39.     for (int i = 0; i < N; i++)
  40.     {
  41.         // Считаем слагаемое и добавляем к основной сумме
  42.         summary += enumerator / denomerator;
  43.         // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
  44.         enumerator *= -X * X;
  45.         denomerator += 2;
  46.     }
  47.     enumerator = 1;
  48. }
  49.  
  50. int main()
  51. {
  52.     // Устанавливаем русскую кодировку для консольного вывода
  53.     SetConsoleOutputCP(1251);
  54.  
  55.     // N - кол-во слагаемых в ряду.
  56.     // X - значение X
  57.     // E - погрешность
  58.     // E10 - погрешность/10
  59.     // summary - сумма N слагаемых ряда по абсолютной величине
  60.     // summaryE - сумма слагаемых ряда, которые слагаемое больше погрешности
  61.     // summaryE10 - сумма слагаемых ряда, которые больше погрешности/10 по абсолютной величине
  62.     // amountE - кол-во слагаемых ряда, которые больше погрешности по абсолютной величине
  63.     // amountE10 - кол-во слагаемых ряда, которые больше погрешности/10 по абсолютной величине
  64.     int N, amountE, amountE10;
  65.     double X, E, E10, summary, summaryE, summaryE10;
  66.     // зануляем (можно было в объявлении, но я предпочитаю не загружать читабельность)
  67.     summary = summaryE = summaryE10 = amountE = amountE10 = 0;
  68.  
  69.     // Ввод N (В цикл while попадаем только тогда, когда N <= 0)
  70.     cout << "Введите кол-во слагаемых(N): ";
  71.     cin >> N;
  72.     while (N <= 0)
  73.     {
  74.         cout << "N должно быть положительным числом. Попробуйте ещё раз: ";
  75.         cin >> N;
  76.     }
  77.  
  78.     // Ввод E (В цикл while попадаем только тогда, когда E <= 0)
  79.     cout << endl << "Введите погрешность(E): ";
  80.     cin >> E;
  81.     while (E <= 0)
  82.     {
  83.         cout << "E должно быть положительным числом. Попробуйте ещё раз: ";
  84.         cin >> E;
  85.     }
  86.     // т.к. E10 = погрешность/10
  87.     E10 = E / 10;
  88.  
  89.     // Ввод X (В цикл while попадаем только тогда, когда X не лежит [-R;R], по задаче R = 1)
  90.     cout << endl << "Введите значение(X): ";
  91.     cin >> X;
  92.     while (X > 1.0 || X < -1.0)
  93.     {
  94.         cout << "Значение X должно принадлежать [-1;1]. Попробуйте ещё раз: ";
  95.         cin >> X;
  96.     }
  97.  
  98.     summarySimple(summary, X, N);
  99.     summaryWithEpsilon(summaryE, amountE, E, X, N);
  100.     summaryWithEpsilon(summaryE10, amountE10, E10, X, N);
  101.  
  102.     cout << endl << "Результаты:" << endl << "Сумма N(" << N << ") слагаемых: " << fixed
  103.         << setprecision(10) << summary << endl;
  104.     cout << defaultfloat << "Сумма (" << amountE << ") слагаемых, которые по абсолютной величине больше чем E(" << E <<
  105.         "): " << fixed << setprecision(10) << summaryE << endl;
  106.     cout << defaultfloat << "Сумма (" << amountE10 << ") слагаемых, которые по абсолютной величине больше чем E/10(" <<
  107.         E10 << "): " << fixed << setprecision(10) << summaryE << endl;
  108.     cout << defaultfloat << "Значение arctg(X), где X = " << X << " равняется: " << fixed << setprecision(10) << atan(X)
  109.         << endl;
  110.     return 0;
  111. }
  112.  
RAW Paste Data