fork download
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. // funkcja f(x)
  7. double f(double x) {
  8. return sqrt(1.0 - x * x);
  9. }
  10.  
  11. // metoda prostokątów (punkt środkowy)
  12. double metodaProstokatow(double a, double b, int n) {
  13. double h = (b - a) / n;
  14. double suma = 0.0;
  15.  
  16. for (int i = 0; i < n; i++) {
  17. double x = a + (i + 0.5) * h; // punkt środkowy
  18. suma += f(x);
  19. }
  20.  
  21. return suma * h;
  22. }
  23.  
  24. // metoda trapezów
  25. double metodaTrapezow(double a, double b, int n) {
  26. double h = (b - a) / n;
  27. double suma = (f(a) + f(b)) / 2.0;
  28.  
  29. for (int i = 1; i < n; i++) {
  30. double x = a + i * h;
  31. suma += f(x);
  32. }
  33.  
  34. return suma * h;
  35. }
  36.  
  37. int main() {
  38. double a = -1.0;
  39. double b = 1.0;
  40. int n = 100000; // liczba podziałów
  41.  
  42. double calkaProst = metodaProstokatow(a, b, n);
  43. double calkaTrap = metodaTrapezow(a, b, n);
  44.  
  45. double piProst = 2.0 * calkaProst;
  46. double piTrap = 2.0 * calkaTrap;
  47.  
  48. cout.precision(15);
  49. cout << "Przyblizenie pi (metoda prostokatow): " << piProst << endl;
  50. cout << "Przyblizenie pi (metoda trapezow): " << piTrap << endl;
  51. cout << "Dokladna wartosc pi (M_PI): " << M_PI << endl;
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Przyblizenie pi (metoda prostokatow): 3.1415926843971
Przyblizenie pi (metoda trapezow):    3.14159254840683
Dokladna wartosc pi (M_PI):           3.14159265358979