class Funkcja
{
public:
double x;
public:
Funkcja();
Funkcja* Funkcja::setX(double x);
double getX();
virtual double oblicz();
virtual ~Funkcja();
};
Funkcja* Funkcja::setX(double x)
{
this->x = x;
return this;
}
double Funkcja::getX()
{
return x;
}
double Funkcja::oblicz()
{
return x;
}
class FunkcjaLiniowa :
public Funkcja
{
private:
double a;
double b;
public:
FunkcjaLiniowa(double a, double b);
virtual double oblicz();
FunkcjaLiniowa();
~FunkcjaLiniowa();
};
double bisekcja(FunkcjaLiniowa* ob, double p, double k, double d);
FunkcjaLiniowa::FunkcjaLiniowa(double a, double b):a(a),b(b)
{
}
double FunkcjaLiniowa::oblicz()
{
return a*x+b;
}
double bisekcja(FunkcjaLiniowa* ob, double p, double k, double d) {
double x1;
if ( ( (ob->setX(p)->oblicz())*(ob->setX(k)->oblicz()) ) > 0)
{
std::cout << (ob->setX(k)->oblicz())*(ob->setX(p)->oblicz()) << "zwroc cokolwiek";
return 0;
}
while (abs(p - k) > d) {
x1 = (p + k) / 2;
if (ob->setX(x1)->oblicz() == 0) // jeżeli znaleźliśmy miejsce zerowe
break;
else if ((ob->setX(x1)->oblicz()) * (ob->setX(p)->oblicz()) < 0)
k = x1; // nadpisywanie prawego krańca przedziału
else
p = x1; // nadpisywanie lewego krańca przedziału
}
return x1;
}
Zastanawia mnie dlaczego gdy piszę std::cout << (ob->setX(k)->oblicz())*(ob->setX(p)->oblicz())
to zwraca mi pomnożone wartości
(ob->setX(p)->oblicz())*(ob->setX(p)->oblicz())
a gdy napiszę
double p_value = (ob->setX(p)->oblicz());
double k_value = (ob->setX(k)->oblicz());
std::cout << p_value*k_value ;
to jest wszystko ok, nie wiem dlaczego i proszę o pomoc. :)