#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
// Definicja funkcji
double f(double x) {
return 0.25 * x * x - 2;
}
// Metoda bisekcji
double bisekcja(double a, double b, double tol, int max_iter) {
if (f(a) * f(b) >= 0) {
cout << "Funkcja nie zmienia znaku na podanym przedziale." << endl;
return NAN;
}
double c;
for (int i = 0; i < max_iter; i++) {
c = (a + b) / 2;
double fc = f(c);
if (fabs(fc) < tol) {
return c; // znaleziono miejsce zerowe
}
if (f(a) * fc < 0) {
b = c;
} else {
a = c;
}
}
return c; // zwróć przybliżone miejsce zerowe
}
int main() {
double a = 2.0;
double b = 4.0;
double tol = 1e-6;
int max_iter = 100;
double x0 = bisekcja(a, b, tol, max_iter);
cout << "Miejsce zerowe funkcji: x = " << setprecision(6) << x0 << endl;
// Generowanie danych do wykresu
ofstream plik("wykres.csv");
plik << "x,f(x)\n";
int n = 100; // liczba punktów
double dx = (b - a) / (n - 1);
for (int i = 0; i < n; i++) {
double x = a + i * dx;
plik << x << "," << f(x) << "\n";
}
plik.close();
cout << "Dane do wykresu zapisane w pliku 'wykres.csv'." << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBEZWZpbmljamEgZnVua2NqaQpkb3VibGUgZihkb3VibGUgeCkgewogICAgcmV0dXJuIDAuMjUgKiB4ICogeCAtIDI7Cn0KCi8vIE1ldG9kYSBiaXNla2NqaQpkb3VibGUgYmlzZWtjamEoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgdG9sLCBpbnQgbWF4X2l0ZXIpIHsKICAgIGlmIChmKGEpICogZihiKSA+PSAwKSB7CiAgICAgICAgY291dCA8PCAiRnVua2NqYSBuaWUgem1pZW5pYSB6bmFrdSBuYSBwb2RhbnltIHByemVkemlhbGUuIiA8PCBlbmRsOwogICAgICAgIHJldHVybiBOQU47CiAgICB9CgogICAgZG91YmxlIGM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heF9pdGVyOyBpKyspIHsKICAgICAgICBjID0gKGEgKyBiKSAvIDI7CiAgICAgICAgZG91YmxlIGZjID0gZihjKTsKCiAgICAgICAgaWYgKGZhYnMoZmMpIDwgdG9sKSB7CiAgICAgICAgICAgIHJldHVybiBjOyAvLyB6bmFsZXppb25vIG1pZWpzY2UgemVyb3dlCiAgICAgICAgfQoKICAgICAgICBpZiAoZihhKSAqIGZjIDwgMCkgewogICAgICAgICAgICBiID0gYzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhID0gYzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYzsgLy8gendyw7PEhyBwcnp5YmxpxbxvbmUgbWllanNjZSB6ZXJvd2UKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgYSA9IDIuMDsKICAgIGRvdWJsZSBiID0gNC4wOwogICAgZG91YmxlIHRvbCA9IDFlLTY7CiAgICBpbnQgbWF4X2l0ZXIgPSAxMDA7CgogICAgZG91YmxlIHgwID0gYmlzZWtjamEoYSwgYiwgdG9sLCBtYXhfaXRlcik7CiAgICBjb3V0IDw8ICJNaWVqc2NlIHplcm93ZSBmdW5rY2ppOiB4ID0gIiA8PCBzZXRwcmVjaXNpb24oNikgPDwgeDAgPDwgZW5kbDsKCiAgICAvLyBHZW5lcm93YW5pZSBkYW55Y2ggZG8gd3lrcmVzdQogICAgb2ZzdHJlYW0gcGxpaygid3lrcmVzLmNzdiIpOwogICAgcGxpayA8PCAieCxmKHgpXG4iOwogICAgaW50IG4gPSAxMDA7IC8vIGxpY3piYSBwdW5rdMOzdwogICAgZG91YmxlIGR4ID0gKGIgLSBhKSAvIChuIC0gMSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGRvdWJsZSB4ID0gYSArIGkgKiBkeDsKICAgICAgICBwbGlrIDw8IHggPDwgIiwiIDw8IGYoeCkgPDwgIlxuIjsKICAgIH0KICAgIHBsaWsuY2xvc2UoKTsKCiAgICBjb3V0IDw8ICJEYW5lIGRvIHd5a3Jlc3UgemFwaXNhbmUgdyBwbGlrdSAnd3lrcmVzLmNzdicuIiA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9