#include <iostream>
#include <cmath>
using namespace std;
// funkcja f(x)
double f(double x) {
return sqrt(1.0 - x * x);
}
// metoda prostokątów (punkt środkowy)
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; // punkt środkowy
suma += f(x);
}
return suma * h;
}
// metoda trapezów
double metodaTrapezow(double a, double b, int n) {
double h = (b - a) / n;
double suma = (f(a) + f(b)) / 2.0;
for (int i = 1; i < n; i++) {
double x = a + i * h;
suma += f(x);
}
return suma * h;
}
int main() {
double a = -1.0;
double b = 1.0;
int n = 100000; // liczba podziałów
double calkaProst = metodaProstokatow(a, b, n);
double calkaTrap = metodaTrapezow(a, b, n);
double piProst = 2.0 * calkaProst;
double piTrap = 2.0 * calkaTrap;
cout.precision(15);
cout << "Przyblizenie pi (metoda prostokatow): " << piProst << endl;
cout << "Przyblizenie pi (metoda trapezow): " << piTrap << endl;
cout << "Dokladna wartosc pi (M_PI): " << M_PI << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gZnVua2NqYSBmKHgpCmRvdWJsZSBmKGRvdWJsZSB4KSB7CiAgICByZXR1cm4gc3FydCgxLjAgLSB4ICogeCk7Cn0KCi8vIG1ldG9kYSBwcm9zdG9rxIV0w7N3IChwdW5rdCDFm3JvZGtvd3kpCmRvdWJsZSBtZXRvZGFQcm9zdG9rYXRvdyhkb3VibGUgYSwgZG91YmxlIGIsIGludCBuKSB7CiAgICBkb3VibGUgaCA9IChiIC0gYSkgLyBuOwogICAgZG91YmxlIHN1bWEgPSAwLjA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBkb3VibGUgeCA9IGEgKyAoaSArIDAuNSkgKiBoOyAvLyBwdW5rdCDFm3JvZGtvd3kKICAgICAgICBzdW1hICs9IGYoeCk7CiAgICB9CgogICAgcmV0dXJuIHN1bWEgKiBoOwp9CgovLyBtZXRvZGEgdHJhcGV6w7N3CmRvdWJsZSBtZXRvZGFUcmFwZXpvdyhkb3VibGUgYSwgZG91YmxlIGIsIGludCBuKSB7CiAgICBkb3VibGUgaCA9IChiIC0gYSkgLyBuOwogICAgZG91YmxlIHN1bWEgPSAoZihhKSArIGYoYikpIC8gMi4wOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZG91YmxlIHggPSBhICsgaSAqIGg7CiAgICAgICAgc3VtYSArPSBmKHgpOwogICAgfQoKICAgIHJldHVybiBzdW1hICogaDsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgYSA9IC0xLjA7CiAgICBkb3VibGUgYiA9IDEuMDsKICAgIGludCBuID0gMTAwMDAwOyAvLyBsaWN6YmEgcG9kemlhxYLDs3cKCiAgICBkb3VibGUgY2Fsa2FQcm9zdCA9IG1ldG9kYVByb3N0b2thdG93KGEsIGIsIG4pOwogICAgZG91YmxlIGNhbGthVHJhcCA9IG1ldG9kYVRyYXBlem93KGEsIGIsIG4pOwoKICAgIGRvdWJsZSBwaVByb3N0ID0gMi4wICogY2Fsa2FQcm9zdDsKICAgIGRvdWJsZSBwaVRyYXAgPSAyLjAgKiBjYWxrYVRyYXA7CgogICAgY291dC5wcmVjaXNpb24oMTUpOwogICAgY291dCA8PCAiUHJ6eWJsaXplbmllIHBpIChtZXRvZGEgcHJvc3Rva2F0b3cpOiAiIDw8IHBpUHJvc3QgPDwgZW5kbDsKICAgIGNvdXQgPDwgIlByenlibGl6ZW5pZSBwaSAobWV0b2RhIHRyYXBlem93KTogICAgIiA8PCBwaVRyYXAgPDwgZW5kbDsKICAgIGNvdXQgPDwgIkRva2xhZG5hIHdhcnRvc2MgcGkgKE1fUEkpOiAgICAgICAgICAgIiA8PCBNX1BJIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=