#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
using namespace std;
// Definicja funkcji
double f(double x)
{
return 0.25 * x * x - 2.0;
}
int main()
{
double a = 2.0;
double b = 4.0;
double eps = 1e-6;
double c;
// Sprawdzenie warunku
if (f(a) * f(b) >= 0)
{
cout << "Brak zmiany znaku w przedziale!" << endl;
return 1;
}
// Metoda bisekcji
while ((b - a) > eps)
{
c = (a + b) / 2.0;
if (f(a) * f(c) < 0)
b = c;
else
a = c;
}
double root = (a + b) / 2.0;
cout << "Miejsce zerowe: x = " << root << endl;
// Zapis danych do pliku
ofstream dane("dane.txt");
for (double x = 1.5; x <= 4.5; x += 0.01)
dane << x << " " << f(x) << endl;
dane.close();
// Skrypt gnuplot
ofstream wykres("wykres.gp");
wykres << "set grid\n";
wykres << "set xlabel 'x'\n";
wykres << "set ylabel 'f(x)'\n";
wykres << "set title 'Wykres f(x) = (1/4)x^2 - 2'\n";
wykres << "plot 'dane.txt' with lines title 'f(x)', 0 with lines lt -1\n";
wykres.close();
system("gnuplot -persist wykres.gp");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBEZWZpbmljamEgZnVua2NqaQpkb3VibGUgZihkb3VibGUgeCkKewogICAgcmV0dXJuIDAuMjUgKiB4ICogeCAtIDIuMDsKfQoKaW50IG1haW4oKQp7CiAgICBkb3VibGUgYSA9IDIuMDsKICAgIGRvdWJsZSBiID0gNC4wOwogICAgZG91YmxlIGVwcyA9IDFlLTY7CiAgICBkb3VibGUgYzsKCiAgICAvLyBTcHJhd2R6ZW5pZSB3YXJ1bmt1CiAgICBpZiAoZihhKSAqIGYoYikgPj0gMCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJCcmFrIHptaWFueSB6bmFrdSB3IHByemVkemlhbGUhIiA8PCBlbmRsOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIE1ldG9kYSBiaXNla2NqaQogICAgd2hpbGUgKChiIC0gYSkgPiBlcHMpCiAgICB7CiAgICAgICAgYyA9IChhICsgYikgLyAyLjA7CgogICAgICAgIGlmIChmKGEpICogZihjKSA8IDApCiAgICAgICAgICAgIGIgPSBjOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYSA9IGM7CiAgICB9CgogICAgZG91YmxlIHJvb3QgPSAoYSArIGIpIC8gMi4wOwogICAgY291dCA8PCAiTWllanNjZSB6ZXJvd2U6IHggPSAiIDw8IHJvb3QgPDwgZW5kbDsKCiAgICAvLyBaYXBpcyBkYW55Y2ggZG8gcGxpa3UKICAgIG9mc3RyZWFtIGRhbmUoImRhbmUudHh0Iik7CiAgICBmb3IgKGRvdWJsZSB4ID0gMS41OyB4IDw9IDQuNTsgeCArPSAwLjAxKQogICAgICAgIGRhbmUgPDwgeCA8PCAiICIgPDwgZih4KSA8PCBlbmRsOwogICAgZGFuZS5jbG9zZSgpOwoKICAgIC8vIFNrcnlwdCBnbnVwbG90CiAgICBvZnN0cmVhbSB3eWtyZXMoInd5a3Jlcy5ncCIpOwogICAgd3lrcmVzIDw8ICJzZXQgZ3JpZFxuIjsKICAgIHd5a3JlcyA8PCAic2V0IHhsYWJlbCAneCdcbiI7CiAgICB3eWtyZXMgPDwgInNldCB5bGFiZWwgJ2YoeCknXG4iOwogICAgd3lrcmVzIDw8ICJzZXQgdGl0bGUgJ1d5a3JlcyBmKHgpID0gKDEvNCl4XjIgLSAyJ1xuIjsKICAgIHd5a3JlcyA8PCAicGxvdCAnZGFuZS50eHQnIHdpdGggbGluZXMgdGl0bGUgJ2YoeCknLCAwIHdpdGggbGluZXMgbHQgLTFcbiI7CiAgICB3eWtyZXMuY2xvc2UoKTsKCiAgICBzeXN0ZW0oImdudXBsb3QgLXBlcnNpc3Qgd3lrcmVzLmdwIik7CgogICAgcmV0dXJuIDA7Cn0K