Il y a un moment aussi il où il faut se prendre en main. Surtout quand le post remonte à 2 ans :
#include <iostream>
#include <cmath>
class polynome_t{
protected:
double a; // coefficient de x^2
double b; // coefficient de x^1
double c; // coefficient de x^0
public:
polynome_t(const double & a0,const double & b0,const double & c0):
a(a0),b(b0),c(c0)
{}
inline double get_delta() const{
return b*b - 4*a*c;
}
inline const double & get_a() const{
return a;
}
inline const double & get_b() const{
return b;
}
inline const double & get_c() const{
return c;
}
inline std::pair<std::pair<double,double>,bool>
get_racines() const{
std::pair<double,double> racines;
double delta = get_delta();
if(delta < 0) return std::make_pair(racines,false); // pas de racine reelle
racines.first = (- b - sqrt(delta))/(2*a);
racines.second = (- b + sqrt(delta))/(2*a);
return std::make_pair(racines,true);
}
};
inline std::ostream & operator << (std::ostream & out,const polynome_t & p){
const double &
a = p.get_a(),
b = p.get_b(),
c = p.get_c();
if (a) out << a << " * x^2";
if (a && b) out << " + ";
if (b) out << b << " * x ";
if ((a || b) && c) out << " + " << c;
return out;
}
int main(){
// x^2 - 4
polynome_t polynome(1,0,-4);
double delta = polynome.get_delta();
std::cout << polynome << std::endl << "delta = " << delta << std::endl;
std::pair<std::pair<double,double>,bool> res = polynome.get_racines();
if (res.second){
if (delta){
std::cout << "2 racines réelles" << std::endl
<< res.first.first << std::endl
<< res.first.second << std::endl;
}else{
std::cout << "1 racine réelle" << std::endl
<< res.first.first << std::endl;
}
}else{
std::cout << "Pas de racine réelle !" << std::endl;
}
return 0;
}
Ce qui donne :
(mando@aldur) (~) $ g++ -W -Wall -lm plop.cpp
(mando@aldur) (~) $ ./a.out
1 * x^2
delta = 16
2 racines réelles
-2
2
Bonne chance