#include <iostream>
#include <cmath>
using namespace std;
double f(double x) {
return sqrt(1.0 - x * x);
}
double metoda_prostokatow(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 * h; // lewy koniec
suma += f(x);
}
return suma * h;
}
double metoda_trapezow(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 calka1 = metoda_prostokatow(a, b, n);
double calka2 = metoda_trapezow(a, b, n);
double pi1 = 2.0 * calka1;
double pi2 = 2.0 * calka2;
cout << "Pi (metoda prostokatow): " << pi1 << endl;
cout << "Pi (metoda trapezow): " << pi2 << endl;
cout << "Pi (M_PI): " << M_PI << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZG91YmxlIGYoZG91YmxlIHgpIHsKICAgIHJldHVybiBzcXJ0KDEuMCAtIHggKiB4KTsKfQoKZG91YmxlIG1ldG9kYV9wcm9zdG9rYXRvdyhkb3VibGUgYSwgZG91YmxlIGIsIGludCBuKSB7CiAgICBkb3VibGUgaCA9IChiIC0gYSkgLyBuOwogICAgZG91YmxlIHN1bWEgPSAwLjA7CgogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGRvdWJsZSB4ID0gYSArIGkgKiBoOyAgIC8vIGxld3kga29uaWVjCiAgICAgICAgc3VtYSArPSBmKHgpOwogICAgfQoKICAgIHJldHVybiBzdW1hICogaDsKfQoKZG91YmxlIG1ldG9kYV90cmFwZXpvdyhkb3VibGUgYSwgZG91YmxlIGIsIGludCBuKSB7CiAgICBkb3VibGUgaCA9IChiIC0gYSkgLyBuOwogICAgZG91YmxlIHN1bWEgPSAoZihhKSArIGYoYikpIC8gMi4wOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBkb3VibGUgeCA9IGEgKyBpICogaDsKICAgICAgICBzdW1hICs9IGYoeCk7CiAgICB9CgogICAgcmV0dXJuIHN1bWEgKiBoOwp9CgppbnQgbWFpbigpIHsKICAgIGRvdWJsZSBhID0gLTEuMDsKICAgIGRvdWJsZSBiID0gMS4wOwogICAgaW50IG4gPSAxMDAwMDA7ICAvLyBsaWN6YmEgcG9kemlhxYLDs3cKCiAgICBkb3VibGUgY2Fsa2ExID0gbWV0b2RhX3Byb3N0b2thdG93KGEsIGIsIG4pOwogICAgZG91YmxlIGNhbGthMiA9IG1ldG9kYV90cmFwZXpvdyhhLCBiLCBuKTsKCiAgICBkb3VibGUgcGkxID0gMi4wICogY2Fsa2ExOwogICAgZG91YmxlIHBpMiA9IDIuMCAqIGNhbGthMjsKCiAgICBjb3V0IDw8ICJQaSAobWV0b2RhIHByb3N0b2thdG93KTogIiA8PCBwaTEgPDwgZW5kbDsKICAgIGNvdXQgPDwgIlBpIChtZXRvZGEgdHJhcGV6b3cpOiAgICAiIDw8IHBpMiA8PCBlbmRsOwogICAgY291dCA8PCAiUGkgKE1fUEkpOiAgICAgICAgICAgICAgICIgPDwgTV9QSSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9