#include <iostream>
#include<math.h>
using namespace std;
double funkcja_matematyczna1(double x)
{
return (pow(x, 3) - (3 * pow(x, 2)) + ((2 * x) - 6));
}
double funkcja_matematyczna2(double x)
{
return (pow(x, 3) - (3 * pow(x, 2)) + ((3 * x) - 7));
}
double funkcja_matematyczna3(double x)
{
return (pow(x, 3) - (6 * pow(x, 2)) + ((8 * x) - 2));
}
double algorytm_polwienia(double(*fun)(double), double a, double b, double epsilon)
{
double c;
while (fabs(a - b) > epsilon)
{
c = ((a + b) / 2.0);
if (fabs(fun(c)) < epsilon)
{
break;
}
if (fun(a) * fun(c) < 0)
{
b = c;
}
else
{
a = c;
}
}
return c;
}
double regula_falsi(double(*fun)(double), double a, double b, double epsilon)
{
double long c;
while (fabs(a - b) > epsilon)
{
c= ((a*fun(b) - b*fun(a)) / (fun(b) - fun(a)));
if (fabs(fun(c)) < epsilon)
{
break;
}
if (fun(a) * fun(c) < 0)
{
b = c;
}
else
{
a = c;
}
}
return (double)c;
}
int main()
{
double a;
double b;
double epsilon;
cout << ("Sugierowany przedzial dla moich funkcji to <-18;18>") << endl;
cout << ("Wprowadz poczatek przedzialu: ");
cin >> a;
cout << ("Wprowadz koniec przedzialu: ");
cin >> b;
cout << ("Wprowadz epsilon");
cin >> epsilon;
double(*wsk_fun)(double) = funkcja_matematyczna1;
cout << ("pow(x, 3) - (3 * pow(x, 2)) + ((2 * x) - 6)") << endl;
cout << ("Miejsce zerowe funckji (polowienie) : ") << algorytm_polwienia(wsk_fun, a, b, epsilon)<<endl;
cout << ("Miejsce zerowe funkcji (falsi): ") << regula_falsi(wsk_fun, a, b, epsilon) << endl;
wsk_fun = funkcja_matematyczna2;
cout << endl;
cout << ("pow(x, 3) - (3 * pow(x, 2)) + ((3 * x) - 7)") << endl;
cout << ("Miejsce zerowe funckji (polowienie) : ") << algorytm_polwienia(wsk_fun, a, b, epsilon) << endl;
cout << ("Miejsce zerowe funkcji (falsi): ") << regula_falsi(wsk_fun, a, b, epsilon) << endl;
wsk_fun = funkcja_matematyczna3;
cout << endl;
cout << ("pow(x, 3) - (6 * pow(x, 2)) + ((8 * x) - 2)") << endl;
cout << ("Miejsce zerowe funckji (polowienie) : ") << algorytm_polwienia(wsk_fun, a, b, epsilon) << endl;
cout << ("Miejsce zerowe funkcji (falsi): ") << regula_falsi(wsk_fun, a, b, epsilon) << endl;
}