Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream> //библиотека для работы с вводом и выводом информации
- #include <cmath> //библиотека для работы с константами и математическими операциями
- using namespace std; //используем пространство имён std
- int main()
- {
- bool input_check; //объявляем переменную для проверки ввода
- double a, x, a_n, e_n;
- double s_n = 0;
- int n = 0; //объявление переменной счётчика
- string answ; //строка, которая будет содеражть ответ пользователя
- double eps = 1.0e-10;
- cout.precision(15); //увеличиваем количество выводимых знаков после запятой до 10
- do {
- do
- {
- cout << "Please, input a parametr >> ";
- cin >> a; //получаем параметр а
- /*цикл do while выполняет проверку пользовательского ввода до тех пор, пока он не
- будет правильным (до тех пор, как переменная не станет input_check = true) */
- if ((cin.fail()) || (a <= 0) || (cin.peek() != '\n'))
- /*оператор if проверяет правильность ввода: наличие посторонних символов
- (cin.fail) и пробелов (cin.peek), проверка на отрицательность числа
- cin.fail: Если ввод из буфера невозможно прочитать, то устанавливается
- состояние failbit. И cin будет ждать сброса до стандартного состояния
- cin.peak проверяет закончилась ли строка после правильно введённых данных*/
- {
- input_check = false;
- cin.clear(); //сбрасывает состояние cin до стандартного (до goodbit)
- cin.ignore(10000, '\n'); //пропускает 10000 символов после ошибки или до перевода строки
- cout << "Error, invalid parameters \n";
- }
- else
- {
- input_check = true; //при правильном вводе, значение input_check = true, и мы покидаем цикл while
- }
- } while (input_check == false);
- do
- {
- cout << "Please, input x parametr >> "; //аналогичная проверка для параметра x
- cin >> x;
- if ((cin.fail()) || (abs(x) >= 1) || (x == 0) || (cin.peek() != '\n'))
- {
- input_check = false;
- cin.clear();
- cin.ignore(10000, '\n');
- cout << "Error, invalid parameters \n";
- }
- else
- {
- input_check = true;
- }
- } while (input_check == false);
- n = 0;
- s_n = 0;
- a_n = 0;
- e_n = 0;
- if (abs(a - (int)a) < eps) //проверяем дробное или целое число
- {
- for (n; n < a; n++) {
- cout << "\n n = " << n + 1 << ", ";
- a_n = pow(x, (4 * n + 1)) / (4 * n + 1); //считаем сумму a n-ого
- cout << " a = " << a_n << ", "; //выводим значения a n-ого члена
- s_n = s_n + a_n; //считаем сумму для n-ой
- cout << " s = " << s_n << ", "; //выводим значение суммы
- e_n = fabs((pow(x, (4 * (n + 1) + 1)) / (4 * (n + 1) + 1)) / s_n); //считаем
- cout << " e = " << e_n; //выводим значение погрешности
- }
- }
- else //аналогичные операции, что в строках 96-105, но для дробного значения а
- {
- do
- {
- cout << "\n n = " << n + 1 << ", ";
- a_n = pow(x, (4 * n + 1)) / (4 * n + 1);
- cout << " a = " << a_n << ", ";
- s_n = s_n + a_n;
- cout << " s = " << s_n << ", ";
- e_n = abs((pow(x, (4 * (n + 1) + 1)) / (4 * (n + 1) + 1)) / s_n);
- cout << " e = " << e_n;
- n++;
- } while (e_n >= a); //цикл выполняется, пока значение погрешности больше или равно значению а
- }
- do
- {
- do
- {
- cout << "\n Do you want to repeat (y/n)>> "; //спрашиваем пользователя о повторном использовании программы
- cin >> answ;
- if ((cin.fail()) || (cin.peek() != '\n')) //аналогичная проверка ввода, но уже для вопроса о повторе программы
- {
- input_check = false;
- cin.clear();
- cin.ignore(10000, '\n');
- cout << "Error, invalid parameters \n";
- }
- else
- {
- input_check = true;
- }
- } while (answ != "Y" && answ != "y" && answ != "N" && answ != "n"); /*цикл с вопросом повторяется до тех пор,
- пока пользователь не введет правильный ответ*/
- } while (input_check == false);
- } while ((answ == "y") || (answ == "Y")); //вся программа выполняется до тех пор, пока пользователь отвечает да (переменная answ==y)
- return 0;
- }
Add Comment
Please, Sign In to add comment