Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h> // нужна для SetConsoleOutputCP
- #include <iostream>
- #include <iomanip>
- using namespace std;
- void summaryWithEpsilon(double& summary, int& amount, const double& eps, const double& X, const int& N)
- {
- summary = 0;
- // enumerator - числитель, denomerator - знаменатель
- double enumerator = X, denomerator = 1;
- // Запускаем цикл от 0 до N-1
- for (int i = 0; i < N; i++)
- {
- // Считаем слагаемое
- const double temp = enumerator / denomerator;
- // добавляем к основной сумме
- summary += temp;
- // Если наше слагаемое по абсолютной величине больше чем погрешность
- if (abs(temp) > eps)
- {
- // Добавляем его в сумму слагаемых, превышающих по абсолютной величине погрешность и
- // прибавляем к их кол-ву единицу
- summary += temp;
- amount++;
- }
- // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
- enumerator *= -X * X;
- denomerator += 2;
- }
- }
- void summarySimple(double& summary, const double& X, const int& N)
- {
- summary = 0;
- // enumerator - числитель, denomerator - знаменатель
- double enumerator = X, denomerator = 1;
- // Запускаем цикл от 0 до N-1
- for (int i = 0; i < N; i++)
- {
- // Считаем слагаемое и добавляем к основной сумме
- summary += enumerator / denomerator;
- // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
- enumerator *= -X * X;
- denomerator += 2;
- }
- enumerator = 1;
- }
- int main()
- {
- // Устанавливаем русскую кодировку для консольного вывода
- SetConsoleOutputCP(1251);
- // N - кол-во слагаемых в ряду.
- // X - значение X
- // E - погрешность
- // E10 - погрешность/10
- // summary - сумма N слагаемых ряда по абсолютной величине
- // summaryE - сумма слагаемых ряда, которые слагаемое больше погрешности
- // summaryE10 - сумма слагаемых ряда, которые больше погрешности/10 по абсолютной величине
- // amountE - кол-во слагаемых ряда, которые больше погрешности по абсолютной величине
- // amountE10 - кол-во слагаемых ряда, которые больше погрешности/10 по абсолютной величине
- int N, amountE, amountE10;
- double X, E, E10, summary, summaryE, summaryE10;
- // зануляем (можно было в объявлении, но я предпочитаю не загружать читабельность)
- summary = summaryE = summaryE10 = amountE = amountE10 = 0;
- // Ввод N (В цикл while попадаем только тогда, когда N <= 0)
- cout << "Введите кол-во слагаемых(N): ";
- cin >> N;
- while (N <= 0)
- {
- cout << "N должно быть положительным числом. Попробуйте ещё раз: ";
- cin >> N;
- }
- // Ввод E (В цикл while попадаем только тогда, когда E <= 0)
- cout << endl << "Введите погрешность(E): ";
- cin >> E;
- while (E <= 0)
- {
- cout << "E должно быть положительным числом. Попробуйте ещё раз: ";
- cin >> E;
- }
- // т.к. E10 = погрешность/10
- E10 = E / 10;
- // Ввод X (В цикл while попадаем только тогда, когда X не лежит [-R;R], по задаче R = 1)
- cout << endl << "Введите значение(X): ";
- cin >> X;
- while (X > 1.0 || X < -1.0)
- {
- cout << "Значение X должно принадлежать [-1;1]. Попробуйте ещё раз: ";
- cin >> X;
- }
- summarySimple(summary, X, N);
- summaryWithEpsilon(summaryE, amountE, E, X, N);
- summaryWithEpsilon(summaryE10, amountE10, E10, X, N);
- cout << endl << "Результаты:" << endl << "Сумма N(" << N << ") слагаемых: " << fixed
- << setprecision(10) << summary << endl;
- cout << defaultfloat << "Сумма (" << amountE << ") слагаемых, которые по абсолютной величине больше чем E(" << E <<
- "): " << fixed << setprecision(10) << summaryE << endl;
- cout << defaultfloat << "Сумма (" << amountE10 << ") слагаемых, которые по абсолютной величине больше чем E/10(" <<
- E10 << "): " << fixed << setprecision(10) << summaryE << endl;
- cout << defaultfloat << "Значение arctg(X), где X = " << X << " равняется: " << fixed << setprecision(10) << atan(X)
- << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement