fork download
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. // Funkcja f(x) = sqrt(1 - x^2)
  7. double f(double x) {
  8. return sqrt(1.0 - x * x);
  9. }
  10.  
  11. // Metoda prostokątów (środków przedziałów)
  12. double rectangleMethod(double a, double b, int n) {
  13. double h = (b - a) / n;
  14. double sum = 0.0;
  15.  
  16. for (int i = 0; i < n; i++) {
  17. double x = a + (i + 0.5) * h; // środek przedziału
  18. sum += f(x);
  19. }
  20.  
  21. return sum * h;
  22. }
  23.  
  24. // Metoda trapezów
  25. double trapezoidalMethod(double a, double b, int n) {
  26. double h = (b - a) / n;
  27. double sum = (f(a) + f(b)) / 2.0;
  28.  
  29. for (int i = 1; i < n; i++) {
  30. double x = a + i * h;
  31. sum += f(x);
  32. }
  33.  
  34. return sum * h;
  35. }
  36.  
  37. int main() {
  38. double a = -1.0;
  39. double b = 1.0;
  40. int n;
  41.  
  42. cout << "Podaj liczbe podprzedzialow: ";
  43. cin >> n;
  44.  
  45. double rectIntegral = rectangleMethod(a, b, n);
  46. double trapIntegral = trapezoidalMethod(a, b, n);
  47.  
  48. double pi_rect = 2.0 * rectIntegral;
  49. double pi_trap = 2.0 * trapIntegral;
  50.  
  51. cout << "\nPrzyblizenie liczby pi:\n";
  52. cout << "Metoda prostokatow: " << pi_rect << endl;
  53. cout << "Metoda trapezow: " << pi_trap << endl;
  54.  
  55. cout << "\nDokladna wartosc pi: " << M_PI << endl;
  56.  
  57. return 0;
  58. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Podaj liczbe podprzedzialow: 
Przyblizenie liczby pi:
Metoda prostokatow: 3.14159
Metoda trapezow:    3.14159

Dokladna wartosc pi: 3.14159