#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
// f(x) = sqrt(1 - x^2)
double f(double x) {
return sqrt(1.0 - x * x);
}
// Metoda prostokątów (środek przedziału)
double metodaProstokatow(double a, double b, int n) {
double h = (b - a) / n;
double suma = 0.0;
for(int i = 0; i < n; i++) {
double x = a + (i + 0.5) * h;
suma += f(x);
}
return 2.0 * h * suma;
}
// Metoda trapezów
double metodaTrapezow(double a, double b, int n) {
double h = (b - a) / n;
double suma = 0.5 * (f(a) + f(b));
for(int i = 1; i < n; i++) {
double x = a + i * h;
suma += f(x);
}
return 2.0 * h * suma;
}
int main() {
double a = -1.0;
double b = 1.0;
int n = 1000000; // liczba podprzedziałów
double piProstokaty = metodaProstokatow(a, b, n);
double piTrapezy = metodaTrapezow(a, b, n);
cout << fixed << setprecision(20);
cout << "π (metoda prostokatow): " << piProstokaty << endl;
cout << "π (metoda trapezow): " << piTrapezy << endl;
cout << "π (wartosc dokladna): " << acos(-1) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb21hbmlwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gZih4KSA9IHNxcnQoMSAtIHheMikKZG91YmxlIGYoZG91YmxlIHgpIHsKICAgIHJldHVybiBzcXJ0KDEuMCAtIHggKiB4KTsKfQoKLy8gTWV0b2RhIHByb3N0b2vEhXTDs3cgKMWbcm9kZWsgcHJ6ZWR6aWHFgnUpCmRvdWJsZSBtZXRvZGFQcm9zdG9rYXRvdyhkb3VibGUgYSwgZG91YmxlIGIsIGludCBuKSB7CiAgICBkb3VibGUgaCA9IChiIC0gYSkgLyBuOwogICAgZG91YmxlIHN1bWEgPSAwLjA7CgogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGRvdWJsZSB4ID0gYSArIChpICsgMC41KSAqIGg7CiAgICAgICAgc3VtYSArPSBmKHgpOwogICAgfQoKICAgIHJldHVybiAyLjAgKiBoICogc3VtYTsKfQoKLy8gTWV0b2RhIHRyYXBlesOzdwpkb3VibGUgbWV0b2RhVHJhcGV6b3coZG91YmxlIGEsIGRvdWJsZSBiLCBpbnQgbikgewogICAgZG91YmxlIGggPSAoYiAtIGEpIC8gbjsKICAgIGRvdWJsZSBzdW1hID0gMC41ICogKGYoYSkgKyBmKGIpKTsKCiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZG91YmxlIHggPSBhICsgaSAqIGg7CiAgICAgICAgc3VtYSArPSBmKHgpOwogICAgfQoKICAgIHJldHVybiAyLjAgKiBoICogc3VtYTsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgYSA9IC0xLjA7CiAgICBkb3VibGUgYiA9IDEuMDsKICAgIGludCBuID0gMTAwMDAwMDsgLy8gbGljemJhIHBvZHByemVkemlhxYLDs3cKCiAgICBkb3VibGUgcGlQcm9zdG9rYXR5ID0gbWV0b2RhUHJvc3Rva2F0b3coYSwgYiwgbik7CiAgICBkb3VibGUgcGlUcmFwZXp5ID0gbWV0b2RhVHJhcGV6b3coYSwgYiwgbik7CgogICAgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oMjApOwogICAgY291dCA8PCAiz4AgKG1ldG9kYSBwcm9zdG9rYXRvdyk6ICIgPDwgcGlQcm9zdG9rYXR5IDw8IGVuZGw7CiAgICBjb3V0IDw8ICLPgCAobWV0b2RhIHRyYXBlem93KTogICAgIiA8PCBwaVRyYXBlenkgPDwgZW5kbDsKICAgIGNvdXQgPDwgIs+AICh3YXJ0b3NjIGRva2xhZG5hKTogICAiIDw8IGFjb3MoLTEpIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=