#include<iostream>
#include<cmath>
#include<cstdlib>
#include<iomanip>
using namespace std;
long double bisek(long double(*funkcja)(long double),long double a,long double b,long double epsilon)
{
long double ya, yb, x, y;
ya=funkcja(a);//licznie wartosci f-cji w koncach przedzialu
yb=funkcja(b);
if(ya*yb>=0)//sprawdzenie czy wewnątrz przedziału smienia się znak f-cji, czy jest miejsce zerowe w tym przedziale
{
return NAN;//jezli nie ma
}
do //jesli jest
{
x=(a+b)/2;//zmniejsz przedał
y=funkcja(x);//policz wartosc w nowym koncu
if(y==0)
{
return x;
}
if(ya*y<0)//sprawdz znak f-cji w nowym przedziale
{
b=x;
yb=y;
}
else
{
a=x;
ya=y;
}
}
while(fabs(b-a)>epsilon);//wykonuj dopoki przedzial jest wiekszy od epsilon
return x;
}
long double funkcja1(long double x)//f-cja którą muszę policzyć
{
return ((0.518*223.0)/(x-0.0018707))-(12.612620/(x*(x+0.0012707)*sqrt(223.0)))-65000.0;
}
double funkcja2(double x)//f-cja do sprawdzania dzialania programu
{
return (x-2.13)*(x-2.13)*(x-2.13);
}
int main()
{
cout.precision(10);
int nr;
long double (*funkcja)(long double), a, b, epsilon=1e-16,x;
cout<<"podaj a:";
cin>>a;
cout<<"\npodaj b:";
cin>>b;
cout<<"\nfunkcje do wyboru:\n1: f-cja\n2: f-cja sprawdzajaca:\n"<<endl;
cout<<"\nPodaj numer funkcji:";
cin>>nr;
switch(nr)
{
case 0:
cout<<"to nie jest nr funkcji!";
break;
case 1:
funkcja = funkcja1;
break;
/*case 2:
funkcja = funkcja2;
break;*/
default:
cout<<"to nie jest nr funkcji!";
break;
}
x=bisek(funkcja, a, b, epsilon);
cout<<"miejsce zerowe funkcji to:"<<x<<endl;
//system("PAUSE");
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxpb21hbmlwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsb25nIGRvdWJsZSBiaXNlayhsb25nIGRvdWJsZSgqZnVua2NqYSkobG9uZyBkb3VibGUpLGxvbmcgZG91YmxlIGEsbG9uZyBkb3VibGUgYixsb25nIGRvdWJsZSBlcHNpbG9uKQogICAgICAgewogICAgICAgbG9uZyBkb3VibGUgeWEsIHliLCB4LCB5OwogICAgICAgeWE9ZnVua2NqYShhKTsvL2xpY3puaWUgd2FydG9zY2kgZi1jamkgdyBrb25jYWNoIHByemVkemlhbHUKICAgICAgIHliPWZ1bmtjamEoYik7CiAgICAgICBpZih5YSp5Yj49MCkvL3NwcmF3ZHplbmllIGN6eSB3ZXduxIV0cnogcHJ6ZWR6aWHFgnUgc21pZW5pYSBzacSZIHpuYWsgZi1jamksIGN6eSBqZXN0IG1pZWpzY2UgemVyb3dlIHcgdHltIHByemVkemlhbGUKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgcmV0dXJuIE5BTjsvL2plemxpIG5pZSBtYSAKICAgICAgICAgICAgICAgICAgfSAgIAogICAgICAgICAgICAgICBkbyAvL2plc2xpIGplc3QKICAgICAgICAgICAgewogICAgICAgICAgICB4PShhK2IpLzI7Ly96bW5pZWpzeiBwcnplZGHFgiAKICAgICAgICAgICAgeT1mdW5rY2phKHgpOy8vcG9saWN6IHdhcnRvc2MgdyBub3d5bSBrb25jdQogICAgICAgICAgICAgICAgICAgIGlmKHk9PTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZih5YSp5PDApLy9zcHJhd2R6IHpuYWsgZi1jamkgdyBub3d5bSBwcnplZHppYWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYj14OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5Yj15OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGE9eDsKICAgICAgICAgICAgICAgICAgICAgICAgIHlhPXk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUoZmFicyhiLWEpPmVwc2lsb24pOy8vd3lrb251aiBkb3Bva2kgcHJ6ZWR6aWFsIGplc3Qgd2lla3N6eSBvZCBlcHNpbG9uCiAgICAgICAgICAgIHJldHVybiB4OyAgICAgIAogICAgICAgfQogCmxvbmcgZG91YmxlIGZ1bmtjamExKGxvbmcgZG91YmxlIHgpLy9mLWNqYSBrdMOzcsSFIG11c3rEmSBwb2xpY3p5xIcgCiAgICAgICB7IAogICAgICAgcmV0dXJuICgoMC41MTgqMjIzLjApLyh4LTAuMDAxODcwNykpLSgxMi42MTI2MjAvKHgqKHgrMC4wMDEyNzA3KSpzcXJ0KDIyMy4wKSkpLTY1MDAwLjA7CiAgICAgICB9CmRvdWJsZSBmdW5rY2phMihkb3VibGUgeCkvL2YtY2phIGRvIHNwcmF3ZHphbmlhIGR6aWFsYW5pYSBwcm9ncmFtdQogICAgICAgewogICAgICAgcmV0dXJuICh4LTIuMTMpKih4LTIuMTMpKih4LTIuMTMpOwogICAgICAgfQogCmludCBtYWluKCkKICAgIHsKICAgIGNvdXQucHJlY2lzaW9uKDEwKTsKICAgIGludCBucjsKICAgIGxvbmcgZG91YmxlICgqZnVua2NqYSkobG9uZyBkb3VibGUpLCBhLCBiLCBlcHNpbG9uPTFlLTE2LHg7CiAgICBjb3V0PDwicG9kYWogYToiOwogICAgY2luPj5hOwogICAgY291dDw8IlxucG9kYWogYjoiOwogICAgY2luPj5iOwogICAgY291dDw8IlxuZnVua2NqZSBkbyB3eWJvcnU6XG4xOiBmLWNqYVxuMjogZi1jamEgc3ByYXdkemFqYWNhOlxuIjw8ZW5kbDsKICAgIGNvdXQ8PCJcblBvZGFqIG51bWVyIGZ1bmtjamk6IjsKICAgIGNpbj4+bnI7CiAgICBzd2l0Y2gobnIpCiAgICB7CiAgICBjYXNlIDA6CiAgICAgICAgIGNvdXQ8PCJ0byBuaWUgamVzdCBuciBmdW5rY2ppISI7CiAgICAgICAgIGJyZWFrOwogICAgY2FzZSAxOgogICAgICAgICBmdW5rY2phID0gZnVua2NqYTE7CiAgICAgICAgIGJyZWFrOwogICAgLypjYXNlIDI6CiAgICAgICAgICAgIGZ1bmtjamEgPSBmdW5rY2phMjsKICAgICAgICAgYnJlYWs7Ki8KICAgIGRlZmF1bHQ6CiAgICAgICAgIGNvdXQ8PCJ0byBuaWUgamVzdCBuciBmdW5rY2ppISI7CiAgICAgICAgIGJyZWFrOwogICAgfSAKICAgIHg9YmlzZWsoZnVua2NqYSwgYSwgYiwgZXBzaWxvbik7CiAKICAgIGNvdXQ8PCJtaWVqc2NlIHplcm93ZSBmdW5rY2ppIHRvOiI8PHg8PGVuZGw7CiAgICAvL3N5c3RlbSgiUEFVU0UiKTsKICAgIHJldHVybiAwOwp9IA==