#include <iostream>
#include <cmath>
using namespace std;
// Funkcja kwadratowa
double f(double x, double a, double b, double c)
{
return a * x * x + b * x + c;
}
// Metoda bisekcji
double bisekcja(double left, double right, double a, double b, double c,
double epsilon, int max_iter)
{
double mid;
if (f(left, a, b, c) * f(right, a, b, c) >= 0)
{
cout << "Funkcja nie zmienia znaku w przedziale." << endl;
return NAN;
}
for (int i = 0; i < max_iter; i++)
{
mid = (left + right) / 2.0;
if (fabs(f(mid, a, b, c)) < epsilon)
return mid;
if (f(left, a, b, c) * f(mid, a, b, c) < 0)
right = mid;
else
left = mid;
}
return (left + right) / 2.0;
}
int main()
{
double a, b, c;
double left, right;
double epsilon;
int max_iter;
cout << "Podaj wspolczynnik a: ";
cin >> a;
cout << "Podaj wspolczynnik b: ";
cin >> b;
cout << "Podaj wspolczynnik c: ";
cin >> c;
cout << "Podaj lewy koniec przedzialu: ";
cin >> left;
cout << "Podaj prawy koniec przedzialu: ";
cin >> right;
cout << "Podaj dokladnosc epsilon: ";
cin >> epsilon;
cout << "Podaj maksymalna liczbe iteracji: ";
cin >> max_iter;
double wynik = bisekcja(left, right, a, b, c, epsilon, max_iter);
if (!isnan(wynik))
cout << "Przyblizone miejsce zerowe: " << wynik << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVua2NqYSBrd2FkcmF0b3dhCmRvdWJsZSBmKGRvdWJsZSB4LCBkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKQp7CiAgICByZXR1cm4gYSAqIHggKiB4ICsgYiAqIHggKyBjOwp9CgovLyBNZXRvZGEgYmlzZWtjamkKZG91YmxlIGJpc2VrY2phKGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQsIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsCiAgICAgICAgICAgICAgICBkb3VibGUgZXBzaWxvbiwgaW50IG1heF9pdGVyKQp7CiAgICBkb3VibGUgbWlkOwoKICAgIGlmIChmKGxlZnQsIGEsIGIsIGMpICogZihyaWdodCwgYSwgYiwgYykgPj0gMCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJGdW5rY2phIG5pZSB6bWllbmlhIHpuYWt1IHcgcHJ6ZWR6aWFsZS4iIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIE5BTjsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heF9pdGVyOyBpKyspCiAgICB7CiAgICAgICAgbWlkID0gKGxlZnQgKyByaWdodCkgLyAyLjA7CgogICAgICAgIGlmIChmYWJzKGYobWlkLCBhLCBiLCBjKSkgPCBlcHNpbG9uKQogICAgICAgICAgICByZXR1cm4gbWlkOwoKICAgICAgICBpZiAoZihsZWZ0LCBhLCBiLCBjKSAqIGYobWlkLCBhLCBiLCBjKSA8IDApCiAgICAgICAgICAgIHJpZ2h0ID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgICAgbGVmdCA9IG1pZDsKICAgIH0KCiAgICByZXR1cm4gKGxlZnQgKyByaWdodCkgLyAyLjA7Cn0KCmludCBtYWluKCkKewogICAgZG91YmxlIGEsIGIsIGM7CiAgICBkb3VibGUgbGVmdCwgcmlnaHQ7CiAgICBkb3VibGUgZXBzaWxvbjsKICAgIGludCBtYXhfaXRlcjsKCiAgICBjb3V0IDw8ICJQb2RhaiB3c3BvbGN6eW5uaWsgYTogIjsKICAgIGNpbiA+PiBhOwogICAgY291dCA8PCAiUG9kYWogd3Nwb2xjenlubmlrIGI6ICI7CiAgICBjaW4gPj4gYjsKICAgIGNvdXQgPDwgIlBvZGFqIHdzcG9sY3p5bm5payBjOiAiOwogICAgY2luID4+IGM7CgogICAgY291dCA8PCAiUG9kYWogbGV3eSBrb25pZWMgcHJ6ZWR6aWFsdTogIjsKICAgIGNpbiA+PiBsZWZ0OwogICAgY291dCA8PCAiUG9kYWogcHJhd3kga29uaWVjIHByemVkemlhbHU6ICI7CiAgICBjaW4gPj4gcmlnaHQ7CgogICAgY291dCA8PCAiUG9kYWogZG9rbGFkbm9zYyBlcHNpbG9uOiAiOwogICAgY2luID4+IGVwc2lsb247CiAgICBjb3V0IDw8ICJQb2RhaiBtYWtzeW1hbG5hIGxpY3piZSBpdGVyYWNqaTogIjsKICAgIGNpbiA+PiBtYXhfaXRlcjsKCiAgICBkb3VibGUgd3luaWsgPSBiaXNla2NqYShsZWZ0LCByaWdodCwgYSwgYiwgYywgZXBzaWxvbiwgbWF4X2l0ZXIpOwoKICAgIGlmICghaXNuYW4od3luaWspKQogICAgICAgIGNvdXQgPDwgIlByenlibGl6b25lIG1pZWpzY2UgemVyb3dlOiAiIDw8IHd5bmlrIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K