Advertisement
Mikhail-Podbolotov

Untitled

May 22nd, 2024
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. double f(double x) {
  5.     double sum = 0;
  6.     double cur = 1;
  7.     int n = 0;
  8.  
  9.     while (cur > 1e-10 or cur < -1e-10) {
  10.         sum += cur;
  11.         ++n;
  12.         cur *= -x * x / (2 * n * (2 * n - 1));
  13.     }
  14.  
  15.     return sum;
  16. }
  17. // средние прямоугольники
  18. double middle(double a, double b, double Eps) {
  19.     double h = (b - a);
  20.     double integral = f((b-a)/2);
  21.     double prev_integral = 0;
  22.  
  23.     while (fabs(integral - prev_integral) >= Eps) {
  24.         prev_integral = integral;
  25.         integral = 0;
  26.         h = h / 2;
  27.         for (double x = a + h / 2; x < b; x += h) {
  28.             integral += f(x);
  29.         }
  30.         integral *= h;
  31.     }
  32.     return integral;
  33. }
  34. // правые прямоугольники
  35. double right(double a, double b, double Eps) {
  36.     double h = (b - a);
  37.     double integral = f((b - a) / 2);
  38.     double prev_integral = 0;
  39.  
  40.     while (fabs(integral - prev_integral) >= Eps) {
  41.         prev_integral = integral;
  42.         h = h / 2;
  43.         for (double x = a + h; x <= b; x += h) {
  44.             integral += f(x);
  45.         }
  46.         integral *= h;
  47.     }
  48.  
  49.     return integral;
  50. }
  51. // трапеции
  52. double trapezia(double a, double b, double Eps) {
  53.     double h = (b - a);
  54.     double integral = (f(a)+f(b))/2;
  55.     double prev_integral = 0;
  56.  
  57.     while (fabs(integral * h - prev_integral * 2* h) >= Eps) {
  58.         prev_integral = integral;
  59.         h = h / 2;
  60.         for (double x = a + h; x <= b; x += 2*h) {
  61.             integral += f(x);
  62.         }
  63.     }
  64.  
  65.     return integral * h;
  66. }
  67. int main()
  68. {
  69.     ifstream input("input.txt");
  70.     double a = 0;
  71.     double b = 0;
  72.     double Eps = 0;
  73.     int method = 0;
  74.     input >> a >> b >> Eps >> method;
  75.     switch (method) {
  76.     case(1):
  77.         cout << right(a, b, Eps);
  78.         break;
  79.     case(2):
  80.         cout << middle(a, b, Eps);
  81.         break;
  82.     case(3):
  83.         cout << trapezia(a, b, Eps);
  84.         break;
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement