Gistrec

ОП РГЗ 2

Oct 14th, 2016
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. // Version 2.0
  2. // Вычисление значение интеграла по методу Симпсона:
  3. #include <stdio.h>
  4. #include <math.h>
  5.  
  6. int main() {
  7.     float S1 = 0, S2, e, a, b, h, n = 2;
  8.     scanf_s("%f %f %f", &e, &a, &b);
  9.     S2 = e;
  10.     // Цикл, в котором сравниваем предыдущий и следующий интеграл
  11.     while (fabs(S1 - S2) >= e) {
  12.         // Вычисление следующего интеграла
  13.         S2 = S1;
  14.         S1 = 0;
  15.         h = (b - a) / n;
  16.         for (float i = 1; i <= n - 1; i += 2) {
  17.             S1 += 1/(1 + a + (i-1)*h) + 4 * 1/(1 + a + (i)*h) + 1/(1 + a + (i+1)*h);
  18.         }
  19.         S1 *= h / 3;
  20.         // Удваивание параметра n, который отвечает за точность вычислений
  21.         n *= 2;
  22.     }
  23.     printf("\n%f\n", S2);
  24. }
  25.  
  26. //----------------------------------------------------------------------
  27. // Решение, с которым Хиценко согласна
  28. #include <stdio.h>
  29. #include <math.h>
  30.  
  31. int main() {
  32.     float S1 = 0, S2, e, a, b, h, n = 2;
  33.     scanf("%f %f %f", &e, &a, &b);
  34.     S2 = e;
  35.     // Цикл, в котором сравниваем предыдущий и следующий интеграл
  36.     while (fabs(S1 - S2) >= e) {
  37.         // Вычисление следующего интеграла
  38.         S2 = S1;
  39.         h = (b - a) / n;
  40.         S1 = 1/(1+a) + 1/(1+b) + 4/(1+b-n);
  41.         for (float i = 2; i <= n - 3; i += 2) {
  42.             S1 += 4/(1+a+i*h)+2/(1+a+(i+1)*h);
  43.         }
  44.         S1 *= h / 3;
  45.         // Удваивание параметра n, который отвечает за точность вычислений
  46.         n *= 2;
  47.     }
  48.     printf("\n%f\n", S2);
  49. }
Advertisement
Add Comment
Please, Sign In to add comment