#include <iostream>
#include <cmath>
// Funkcja f(x), której miejsce zerowe szukamy
double f(double x) {
return pow(x, 3) - 3 * pow(x, 2) + 2 * x - 6;
}
// Funkcja implementująca metodę połowienia
void bisection(double a, double b, double epsilon) {
if (f(a) * f(b) >= 0) {
std::cout << "Błędne przedziały. f(a) i f(b) muszą mieć różne znaki." << std::endl;
return;
}
double c = a; // Punkt środkowy
while ((b - a) >= epsilon) {
// Znajdź punkt środkowy
c = (a + b) / 2;
// Jeśli wartość w c jest bliska zeru, przerywamy
if (fabs(f(c)) < epsilon) {
break;
}
// Sprawdź, po której stronie przedziału leży miejsce zerowe
if (f(c) * f(a) < 0) {
b = c;
} else {
a = c;
}
}
std::cout << "Miejsce zerowe funkcji: x = " << c << std::endl;
}
int main() {
// Przedziały początkowe i dokładność
double a = 1.0; // Początek przedziału
double b = 2.0; // Koniec przedziału
double epsilon = 0.0001; // Dokładność
std::cout << "Funkcja: f(x) = x^3 - 3x^2 + 2x - 6" << std::endl;
std::cout << "Przedział: [" << a << ", " << b << "]" << std::endl;
std::cout << "Dokładność: " << epsilon << std::endl;
bisection(a, b, epsilon);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CgovLyBGdW5rY2phIGYoeCksIGt0w7NyZWogbWllanNjZSB6ZXJvd2Ugc3p1a2FteQpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIHBvdyh4LCAzKSAtIDMgKiBwb3coeCwgMikgKyAyICogeCAtIDY7Cn0KCi8vIEZ1bmtjamEgaW1wbGVtZW50dWrEhWNhIG1ldG9kxJkgcG/Fgm93aWVuaWEKdm9pZCBiaXNlY3Rpb24oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgZXBzaWxvbikgewogICAgaWYgKGYoYSkgKiBmKGIpID49IDApIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkLFgsSZZG5lIHByemVkemlhxYJ5LiBmKGEpIGkgZihiKSBtdXN6xIUgbWllxIcgcsOzxbxuZSB6bmFraS4iIDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZG91YmxlIGMgPSBhOyAvLyBQdW5rdCDFm3JvZGtvd3kKICAgIHdoaWxlICgoYiAtIGEpID49IGVwc2lsb24pIHsKICAgICAgICAvLyBabmFqZMW6IHB1bmt0IMWbcm9ka293eQogICAgICAgIGMgPSAoYSArIGIpIC8gMjsKCiAgICAgICAgLy8gSmXFm2xpIHdhcnRvxZvEhyB3IGMgamVzdCBibGlza2EgemVydSwgcHJ6ZXJ5d2FteQogICAgICAgIGlmIChmYWJzKGYoYykpIDwgZXBzaWxvbikgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIC8vIFNwcmF3ZMW6LCBwbyBrdMOzcmVqIHN0cm9uaWUgcHJ6ZWR6aWHFgnUgbGXFvHkgbWllanNjZSB6ZXJvd2UKICAgICAgICBpZiAoZihjKSAqIGYoYSkgPCAwKSB7CiAgICAgICAgICAgIGIgPSBjOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGEgPSBjOwogICAgICAgIH0KICAgIH0KCiAgICBzdGQ6OmNvdXQgPDwgIk1pZWpzY2UgemVyb3dlIGZ1bmtjamk6IHggPSAiIDw8IGMgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIFByemVkemlhxYJ5IHBvY3rEhXRrb3dlIGkgZG9rxYJhZG5vxZvEhwogICAgZG91YmxlIGEgPSAxLjA7IC8vIFBvY3rEhXRlayBwcnplZHppYcWCdQogICAgZG91YmxlIGIgPSAyLjA7IC8vIEtvbmllYyBwcnplZHppYcWCdQogICAgZG91YmxlIGVwc2lsb24gPSAwLjAwMDE7IC8vIERva8WCYWRub8WbxIcKCiAgICBzdGQ6OmNvdXQgPDwgIkZ1bmtjamE6IGYoeCkgPSB4XjMgLSAzeF4yICsgMnggLSA2IiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIlByemVkemlhxYI6IFsiIDw8IGEgPDwgIiwgIiA8PCBiIDw8ICJdIiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgIkRva8WCYWRub8WbxIc6ICIgPDwgZXBzaWxvbiA8PCBzdGQ6OmVuZGw7CgogICAgYmlzZWN0aW9uKGEsIGIsIGVwc2lsb24pOwoKICAgIHJldHVybiAwOwp9Cg==