Advertisement
Sanlover

Untitled

Nov 25th, 2021
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.34 KB | None | 0 0
  1. #include <Windows.h> // нужна для SetConsoleOutputCP
  2. #include <iostream>
  3. #include <iomanip>
  4. using namespace std;
  5.  
  6. void summaryWithEpsilon(double& summary, int& amount, const double& eps, const int& X, const int& N)
  7. {
  8. summary = 0;
  9. // enumerator - числитель, denomerator - знаменатель
  10. double enumerator = X, denomerator = 1;
  11. // Запускаем цикл от 0 до N-1
  12. for (int i = 0; i < N; i++)
  13. {
  14. // Считаем слагаемое
  15. const double temp = enumerator / denomerator;
  16. // добавляем к основной сумме
  17. summary += temp;
  18.  
  19. // Если наше слагаемое по абсолютной величине больше чем погрешность
  20. if (abs(temp) > eps)
  21. {
  22. // Добавляем его в сумму слагаемых, превышающих по абсолютной величине погрешность и
  23. // прибавляем к их кол-ву единицу
  24. summary += temp;
  25. amount++;
  26. }
  27. // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
  28. enumerator *= -X * X;
  29. denomerator += 2;
  30. }
  31. }
  32.  
  33. void summary(double& summary, const int& X, const int& N)
  34. {
  35. summary = 0;
  36. // enumerator - числитель, denomerator - знаменатель
  37. double enumerator = X, denomerator = 1;
  38. // Запускаем цикл от 0 до N-1
  39. for (int i = 0; i < N; i++)
  40. {
  41. // Считаем слагаемое и добавляем к основной сумме
  42. summary += enumerator / denomerator;
  43. // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
  44. enumerator *= -X * X;
  45. denomerator += 2;
  46. }
  47. }
  48.  
  49. int main()
  50. {
  51. // Устанавливаем русскую кодировку для консольного вывода
  52. SetConsoleOutputCP(1251);
  53.  
  54. // N - кол-во слагаемых в ряду.
  55. // X - значение X
  56. // E - погрешность
  57. // E10 - погрешность/10
  58. // summary - сумма N слагаемых ряда по абсолютной величине
  59. // summaryE - сумма слагаемых ряда, которые слагаемое больше погрешности
  60. // summaryE10 - сумма слагаемых ряда, которые больше погрешности/10 по абсолютной величине
  61. // amountE - кол-во слагаемых ряда, которые больше погрешности по абсолютной величине
  62. // amountE10 - кол-во слагаемых ряда, которые больше погрешности/10 по абсолютной величине
  63. int N, amountE, amountE10;
  64. double X, E, E10, summary, summaryE, summaryE10;
  65. // зануляем (можно было в объявлении, но я предпочитаю не загружать читабельность)
  66. summary = summaryE = summaryE10 = amountE = amountE10 = 0;
  67.  
  68. // Ввод N (В цикл while попадаем только тогда, когда N <= 0)
  69. cout << "Введите кол-во слагаемых(N): ";
  70. cin >> N;
  71. while (N <= 0)
  72. {
  73. cout << "N должно быть положительным числом. Попробуйте ещё раз: ";
  74. cin >> N;
  75. }
  76.  
  77. // Ввод E (В цикл while попадаем только тогда, когда E <= 0)
  78. cout << endl << "Введите погрешность(E): ";
  79. cin >> E;
  80. while (E <= 0)
  81. {
  82. cout << "E должно быть положительным числом. Попробуйте ещё раз: ";
  83. cin >> E;
  84. }
  85. // т.к. E10 = погрешность/10
  86. E10 = E / 10;
  87.  
  88. // Ввод X (В цикл while попадаем только тогда, когда X не лежит [-R;R], по задаче R = 1)
  89. cout << endl << "Введите значение(X): ";
  90. cin >> X;
  91. while (X > 1.0 || X < -1.0)
  92. {
  93. cout << "Значение X должно принадлежать [-1;1]. Попробуйте ещё раз: ";
  94. cin >> X;
  95. }
  96.  
  97. // enumerator - числитель, denomerator - знаменатель
  98. double enumerator = X, denomerator = 1;
  99. // Запускаем цикл от 0 до N-1
  100. for (int i = 0; i < N; i++)
  101. {
  102. // Считаем слагаемое
  103. const double temp = enumerator / denomerator;
  104. // добавляем к основной сумме
  105. summary += temp;
  106.  
  107. // Если наше слагаемое по абсолютной величине больше чем погрешность/10
  108. if (abs(temp) > E10)
  109. {
  110. // Добавляем его в сумму слагаемых, превышающих по абсолютной величине погрешность/10 и
  111. // прибавляем к их кол-ву единицу
  112. summaryE10 += temp;
  113. amountE10++;
  114. // Если наше слагаемое по абсолютной величине больше чем погрешность
  115. if (abs(temp) > E)
  116. {
  117. // Добавляем его в сумму слагаемых, превышающих по абсолютной величине погрешность и
  118. // прибавляем к их кол-ву единицу
  119. summaryE += temp;
  120. amountE++;
  121. }
  122. }
  123. // Домножаем числитель на -X*X (-, чтобы менять знак у слагаемых), а к знаменателю прибавляем 2
  124. enumerator *= -X * X;
  125. denomerator += 2;
  126. }
  127.  
  128. cout << endl << "Результаты:" << endl << "Сумма N(" << N << ") слагаемых: " << fixed
  129. << setprecision(10) << summary << endl;
  130. cout << defaultfloat << "Сумма (" << amountE << ") слагаемых, которые по абсолютной величине больше чем E(" << E <<
  131. "): " << fixed << setprecision(10) << summaryE << endl;
  132. cout << defaultfloat << "Сумма (" << amountE10 << ") слагаемых, которые по абсолютной величине больше чем E/10(" <<
  133. E10 << "): " << fixed << setprecision(10) << summaryE << endl;
  134. cout << defaultfloat << "Значение arctg(X), где X = " << X << " равняется: " << fixed << setprecision(10) << atan(X)
  135. << endl;
  136. return 0;
  137. }
  138.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement