AmateurKid

Untitled

Nov 3rd, 2021 (edited)
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.23 KB | None | 0 0
  1. #include <iostream> //библиотека для работы с вводом и выводом информации
  2. #include <cmath> //библиотека для работы с константами и математическими операциями
  3.  
  4. using namespace std; //используем пространство имён std
  5.  
  6. int main()
  7. {
  8.     bool input_check; //объявляем переменную для проверки ввода
  9.     double a, x, a_n, e_n;
  10.     double s_n = 0;
  11.     int n = 0; //объявление переменной счётчика
  12.     string answ; //строка, которая будет содеражть ответ пользователя
  13.     double eps = 1.0e-10;
  14.     cout.precision(15); //увеличиваем количество выводимых знаков после запятой до 10
  15.    
  16.     do {
  17.         do
  18.         {
  19.             cout << "Please, input a parametr >> ";
  20.  
  21.             cin >> a; //получаем параметр а
  22.             /*цикл do while выполняет проверку пользовательского ввода до тех пор, пока он не
  23.              будет правильным (до тех пор, как переменная не станет input_check = true) */
  24.             if ((cin.fail()) || (a <= 0) || (cin.peek() != '\n'))
  25.                 /*оператор if проверяет правильность ввода: наличие посторонних символов
  26.                 (cin.fail) и пробелов (cin.peek), проверка на отрицательность числа
  27.  
  28.                 cin.fail: Если ввод из буфера невозможно прочитать, то устанавливается
  29.                 состояние failbit. И cin будет ждать сброса до стандартного состояния
  30.                 cin.peak проверяет закончилась ли строка после правильно введённых данных*/
  31.             {
  32.                 input_check = false;
  33.                 cin.clear(); //сбрасывает состояние cin до стандартного (до goodbit)
  34.                 cin.ignore(10000, '\n'); //пропускает 10000 символов после ошибки или до перевода строки
  35.                 cout << "Error, invalid parameters \n";
  36.             }
  37.             else
  38.             {
  39.                 input_check = true; //при правильном вводе, значение input_check = true, и мы покидаем цикл while
  40.  
  41.             }
  42.         } while (input_check == false);
  43.  
  44.         do
  45.         {
  46.             cout << "Please, input x parametr >> "; //аналогичная проверка для параметра x
  47.  
  48.             cin >> x;
  49.             if ((cin.fail()) || (abs(x) >= 1) || (x == 0) || (cin.peek() != '\n'))
  50.             {
  51.                 input_check = false;
  52.                 cin.clear();
  53.                 cin.ignore(10000, '\n');
  54.                 cout << "Error, invalid parameters \n";
  55.             }
  56.             else
  57.             {
  58.                 input_check = true;
  59.  
  60.             }
  61.         } while (input_check == false);
  62.  
  63.         n = 0;
  64.         s_n = 0;
  65.         a_n = 0;
  66.         e_n = 0;
  67.        
  68.         if (abs(a - (int)a) < eps) //проверяем дробное или целое число
  69.         {
  70.             for (n; n < a; n++) {
  71.  
  72.                 cout << "\n n = " << n + 1 << ", ";
  73.                 a_n = pow(x, (4 * n + 1)) / (4 * n + 1); //считаем сумму a n-ого
  74.                 cout << " a = " << a_n << ", "; //выводим значения a n-ого члена
  75.                 s_n = s_n + a_n; //считаем сумму для n-ой
  76.                 cout << " s = " << s_n << ", "; //выводим значение суммы            
  77.                 e_n = fabs((pow(x, (4 * (n + 1) + 1)) / (4 * (n + 1) + 1)) / s_n); //считаем
  78.                 cout << " e = " << e_n; //выводим значение погрешности
  79.             }
  80.         }
  81.         else //аналогичные операции, что в строках 96-105, но для дробного значения а
  82.         {
  83.             do
  84.             {
  85.                 cout << "\n n = " << n + 1 << ", ";
  86.                 a_n = pow(x, (4 * n + 1)) / (4 * n + 1);
  87.                 cout << "  a = " << a_n << ", ";                
  88.                 s_n = s_n + a_n;              
  89.                 cout << "  s = " << s_n << ", ";              
  90.                 e_n = abs((pow(x, (4 * (n + 1) + 1)) / (4 * (n + 1) + 1)) / s_n);            
  91.                 cout << " e = " << e_n;
  92.                 n++;
  93.             } while (e_n >= a); //цикл выполняется, пока значение погрешности больше или равно значению а
  94.         }
  95.  
  96.         do
  97.         {
  98.             do
  99.             {
  100.                 cout << "\n Do you want to repeat (y/n)>> "; //спрашиваем пользователя о повторном использовании программы
  101.                 cin >> answ;
  102.                 if ((cin.fail()) || (cin.peek() != '\n')) //аналогичная проверка ввода, но уже для вопроса о повторе программы
  103.                 {
  104.                     input_check = false;
  105.                     cin.clear();
  106.                     cin.ignore(10000, '\n');
  107.                     cout << "Error, invalid parameters \n";
  108.                 }
  109.                 else
  110.                 {
  111.                     input_check = true;
  112.                 }
  113.             } while (answ != "Y" && answ != "y" && answ != "N" && answ != "n"); /*цикл с вопросом повторяется до тех пор,
  114.                                                                                  пока пользователь не введет правильный ответ*/
  115.         } while (input_check == false);
  116.     } while ((answ == "y") || (answ == "Y")); //вся программа выполняется до тех пор, пока пользователь отвечает да (переменная answ==y)
  117.  
  118.     return 0;
  119. }
Add Comment
Please, Sign In to add comment