Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- double f(double x) {
- double sum = 0;
- double cur = 1;
- int n = 0;
- while (cur > 1e-10 or cur < -1e-10) {
- sum += cur;
- ++n;
- cur *= -x * x / (2 * n * (2 * n - 1));
- }
- return sum;
- }
- // средние прямоугольники
- double middle(double a, double b, double Eps) {
- double h = (b - a);
- double integral = f((b-a)/2);
- double prev_integral = 0;
- while (fabs(integral - prev_integral) >= Eps) {
- prev_integral = integral;
- integral = 0;
- h = h / 2;
- for (double x = a + h / 2; x < b; x += h) {
- integral += f(x);
- }
- integral *= h;
- }
- return integral;
- }
- // правые прямоугольники
- double right(double a, double b, double Eps) {
- double h = (b - a);
- double integral = f((b - a) / 2);
- double prev_integral = 0;
- while (fabs(integral - prev_integral) >= Eps) {
- prev_integral = integral;
- h = h / 2;
- for (double x = a + h; x <= b; x += h) {
- integral += f(x);
- }
- integral *= h;
- }
- return integral;
- }
- // трапеции
- double trapezia(double a, double b, double Eps) {
- double h = (b - a);
- double integral = (f(a)+f(b))/2;
- double prev_integral = 0;
- while (fabs(integral * h - prev_integral * 2* h) >= Eps) {
- prev_integral = integral;
- h = h / 2;
- for (double x = a + h; x <= b; x += 2*h) {
- integral += f(x);
- }
- }
- return integral * h;
- }
- int main()
- {
- ifstream input("input.txt");
- double a = 0;
- double b = 0;
- double Eps = 0;
- int method = 0;
- input >> a >> b >> Eps >> method;
- switch (method) {
- case(1):
- cout << right(a, b, Eps);
- break;
- case(2):
- cout << middle(a, b, Eps);
- break;
- case(3):
- cout << trapezia(a, b, Eps);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement