#include <iostream>
#include <fstream>
#include <cmath>
#include <cstdlib>
using namespace std;
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;
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 wykresu
ofstream data("dane.txt");
for (double x = 1.5; x <= 4.5; x += 0.01)
data << x << " " << f(x) << endl;
data.close();
// Skrypt gnuplot
ofstream gp("wykres.gp");
gp << "set terminal jpeg size 800,600\n";
gp << "set output 'wykres.jpg'\n";
gp << "set grid\n";
gp << "set xlabel 'x'\n";
gp << "set ylabel 'f(x)'\n";
gp << "set title 'Wykres f(x) = (1/4)x^2 - 2'\n";
gp << "plot 'dane.txt' with lines title 'f(x)', \\\n";
gp << root << " title 'miejsce zerowe'\n";
gp.close();
system("gnuplot wykres.gp");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgZihkb3VibGUgeCkKewogICAgcmV0dXJuIDAuMjUgKiB4ICogeCAtIDIuMDsKfQoKaW50IG1haW4oKQp7CiAgICBkb3VibGUgYSA9IDIuMDsKICAgIGRvdWJsZSBiID0gNC4wOwogICAgZG91YmxlIGVwcyA9IDFlLTY7CiAgICBkb3VibGUgYzsKCiAgICBpZiAoZihhKSAqIGYoYikgPj0gMCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJCcmFrIHptaWFueSB6bmFrdSB3IHByemVkemlhbGUhIiA8PCBlbmRsOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8vIE1ldG9kYSBiaXNla2NqaQogICAgd2hpbGUgKChiIC0gYSkgPiBlcHMpCiAgICB7CiAgICAgICAgYyA9IChhICsgYikgLyAyLjA7CgogICAgICAgIGlmIChmKGEpICogZihjKSA8IDApCiAgICAgICAgICAgIGIgPSBjOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYSA9IGM7CiAgICB9CgogICAgZG91YmxlIHJvb3QgPSAoYSArIGIpIC8gMi4wOwogICAgY291dCA8PCAiTWllanNjZSB6ZXJvd2U6IHggPSAiIDw8IHJvb3QgPDwgZW5kbDsKCiAgICAvLyBaYXBpcyBkYW55Y2ggZG8gd3lrcmVzdQogICAgb2ZzdHJlYW0gZGF0YSgiZGFuZS50eHQiKTsKICAgIGZvciAoZG91YmxlIHggPSAxLjU7IHggPD0gNC41OyB4ICs9IDAuMDEpCiAgICAgICAgZGF0YSA8PCB4IDw8ICIgIiA8PCBmKHgpIDw8IGVuZGw7CiAgICBkYXRhLmNsb3NlKCk7CgogICAgLy8gU2tyeXB0IGdudXBsb3QKICAgIG9mc3RyZWFtIGdwKCJ3eWtyZXMuZ3AiKTsKICAgIGdwIDw8ICJzZXQgdGVybWluYWwganBlZyBzaXplIDgwMCw2MDBcbiI7CiAgICBncCA8PCAic2V0IG91dHB1dCAnd3lrcmVzLmpwZydcbiI7CiAgICBncCA8PCAic2V0IGdyaWRcbiI7CiAgICBncCA8PCAic2V0IHhsYWJlbCAneCdcbiI7CiAgICBncCA8PCAic2V0IHlsYWJlbCAnZih4KSdcbiI7CiAgICBncCA8PCAic2V0IHRpdGxlICdXeWtyZXMgZih4KSA9ICgxLzQpeF4yIC0gMidcbiI7CiAgICBncCA8PCAicGxvdCAnZGFuZS50eHQnIHdpdGggbGluZXMgdGl0bGUgJ2YoeCknLCBcXFxuIjsKICAgIGdwIDw8IHJvb3QgPDwgIiB0aXRsZSAnbWllanNjZSB6ZXJvd2UnXG4iOwogICAgZ3AuY2xvc2UoKTsKCiAgICBzeXN0ZW0oImdudXBsb3Qgd3lrcmVzLmdwIik7CgogICAgcmV0dXJuIDA7Cn0K