Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <iostream>
- using namespace std;
- int main()
- {
- SetConsoleOutputCP(1251);
- int N;
- double x, enumerator, summary, summaryEps, summaryEps10, amountEps, amountEps10, eps, eps10;
- double denomerator = 1;
- cout << "Введите значение X: ";
- cin >> x;
- if (x > 1)
- {
- cout << "Значение X должно быть в пределах от (-inf; 1]";
- return 0;
- }
- cout << "Введите значение N: ";
- cin >> N;
- if (N < 0)
- {
- cout << "Значение N должно быть в пределах от [0; +inf)";
- return 0;
- }
- cout << "Введите значение EPS: ";
- cin >> eps;
- if (eps < 0)
- {
- cout << "Т.к. значение eps неположительное, оно будет взято по модулю";
- eps = abs(eps);
- }
- eps10 = eps / 10;
- summary = enumerator = x;
- // Проверка на то, что самый первый член меньше большей погрешности (Eps)
- if (eps >= x)
- {
- summaryEps = amountEps = 0;
- }
- else
- {
- summaryEps = x;
- amountEps = 1;
- }
- // Проверка на то, что самый первый член меньше меньшей погрешности (Eps/10)
- if (eps10 >= x)
- {
- summaryEps10 = amountEps10 = 0;
- }
- else
- {
- summaryEps10 = x;
- amountEps10 = 1;
- }
- // Цикл в котором считаются i-тые элементы, начиная с i = 1 по N-1;
- // temp выступает перменной в которую записывается i-oe слагаемое суммы
- // условия в цикле нет, но предусмотрен выход с помощью break'a (поэтому while не требуется)
- for (int i = 1;; i++)
- {
- enumerator *= (2 * i - 1) * x * x;
- denomerator *= 2 * i;
- double temp = (enumerator) / (denomerator * (2 * i + 1));
- // чтобы успешно посчитать сумму N элементов
- if (i < N)
- {
- summary += temp;
- }
- // Если i-ое слагаемое больше eps, то оно однозначно больше чем eps/10
- // поэтому мы сразу увеличиваем суммы и той и той eps, а также кол-во
- // элементов
- if (abs(temp) > eps)
- {
- summaryEps += temp;
- amountEps++;
- summaryEps10 += temp;
- amountEps10++;
- } // А тут проверка на то, что i-ое слагаемое меньше чем eps, но больше чем
- // eps/10
- else if (abs(temp) > eps10)
- {
- summaryEps10 += temp;
- amountEps10++;
- } // Если не нашлось число, которое меньше или равное самой маленькой погрешности, то
- // мы выходим из цикла
- else
- {
- break;
- }
- }
- cout << endl << "Сравнение результатов." << endl;
- cout << "Сумма N(" << N << ") элементов равна: " << summary << endl;
- cout << "Сумма (" << amountEps << ") элементов, превышаюших по абсолютной величине EPS(" << eps
- << ") равна: " << summaryEps << endl;
- cout << "Сумма (" << amountEps10 << ") элементов, превышаюших по абсолютной величине EPS/10(" << eps10
- << ") равна: " << summaryEps10 << endl;
- cout << "Значение функции arcsin(X), где X = " << x << " равно: " << asin(x);
- return 0;
- }
Add Comment
Please, Sign In to add comment