Advertisement
Sanlover

Untitled

Sep 30th, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     SetConsoleOutputCP(1251);
  9.     SetConsoleCP(1251);
  10.  
  11.     double leftSide, rightSide = 0;                             // Левая и правая части равенства
  12.     double e, x;                                                // Погрешность и x
  13.     double eSummary = 0, e10Summary = 0;                        // Суммы элементов меньше Eps и Eps*10 соответсвено
  14.     size_t nE = 0, nE10 = 0;                                    // количество элементов меньше Eps и Eps*10 соответсвено
  15.     size_t N;                                                   // кол-во элементов
  16.  
  17.     // Ввод начальных значений
  18.     cout << "   Введите начальные параметры:" << endl << " E = ";
  19.     cin >> e;
  20.     cout << " N = ";
  21.     cin >> N;
  22.     cout << " X = ";
  23.     cin >> x;
  24.  
  25.     if (abs(x) >= 1)                                            // Если X не подходит под наше (-R;R), то завершаем работу
  26.     {
  27.         cout << "Ошибка: X должна лежать в интервале (-1;1)" << endl;
  28.         return 0;
  29.     }
  30.  
  31.     leftSide = 1 / sqrt(1 + x);                                 // Левое значение дано изначально (функция)
  32.  
  33.     double denominator = 1, numerator = 1;                      // знаменатель и числитель нашего n члена
  34.     size_t factor = 2;
  35.     for (size_t i = 0; i < N; i++)
  36.     {
  37.         double temp = numerator / denominator;                  // Чтобы его сто раз не вычислять
  38.  
  39.         // Сразу сравним с E и E*10
  40.         if (abs(temp) > e)                                      // Если по модулю наш n-ый член больше E
  41.         {
  42.             if (abs(temp) > e * 10)                             // Если по модулю наш n-ый член больше E*10
  43.             {
  44.                 nE10++;                                         // Увеличиваем количество таких элементов
  45.                 e10Summary += temp;                             // Суммируем
  46.             }
  47.             nE++;                                               // Увеличиваем количество таких элементов
  48.             eSummary += temp;                                   // Суммируем
  49.         }
  50.  
  51.         //Добавим к правой стороне n-ый член
  52.         rightSide += temp;
  53.  
  54.         //Поскольку каждый n элемент отличается от n+1 на константу, просто умножим знаменатель и числитель
  55.         numerator *= (factor - 1) * -x;                         // Каждый раз повышается степень икса, меняется знак(- пере иксом) и умножается на след.нечётное
  56.         denominator *= factor;                                  // умножается на след. четное
  57.         factor += 2;                                            // Нужен чтобы добавлять нечетные и четные
  58.     }
  59.  
  60.     cout << endl << endl << "   Результаты: " << endl;
  61.     cout << "1) Значение функции '1/sqrt(1+x)' = " << leftSide << endl;
  62.     cout << "2) Сумма (N = " << N << ") слогаемых равна = " << rightSide << endl;
  63.     cout << "3) Сумма (" << nE << ") элементов, превышающих по абсолютной величине (E = " << e << ")   = " << eSummary << endl;
  64.     cout << "4) Сумма (" << nE10 << ") элементов, превышающих по абсолютной величине (E*10 = " << e * 10 << ") = " << e10Summary << endl;
  65.     return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement