Commit dcac4b20 authored by Hernandez Francois's avatar Hernandez Francois

simplifie plus moins

parent fd413742
......@@ -38,7 +38,12 @@ Expression * Nombre::clone() const{
}
Expression * Nombre::simplifie() const{
Expression * res = this->clone();
return res;
}
double Nombre::getValue(){
return valeur_;
}
Variable::Variable(char nom){
......@@ -69,7 +74,8 @@ Expression * Variable::clone() const{
}
Expression * Variable::simplifie() const{
Expression * res = this->clone();
return res;
}
Operateur::Operateur(Expression * gauche, Expression * droite){
......@@ -106,19 +112,31 @@ void Plus::affiche(std::ostream & o) const{
Expression * Plus::simplifie() const{
Expression * res;
if(typeid(*gauche_) == typeid(Nombre)){
Nombre * cast = static_cast<Nombre *>(*gauche_);
if (cast->valeur_ == 0){
res = droite_;
Expression * gs = gauche_->simplifie();
Expression * ds = droite_->simplifie();
if(typeid(*gs) == typeid(Nombre) && typeid(*ds) == typeid(Nombre)){
Nombre *cg = dynamic_cast<Nombre*>(gs);
Nombre *cd = dynamic_cast<Nombre*>(ds);
Nombre *rep = new Nombre(cg->getValue()+cd->getValue());
res = rep;
}else if(typeid(*gs) == typeid(Nombre)){
// std::cout << "gauche est un nombre" << std::endl;
Nombre *cast = dynamic_cast<Nombre*>(gs);
//std::cout << cast->getValue() << std::endl;
if (cast->getValue() == 0){
res = ds;
}
} else if(typeid(*droite_) == typeid(Nombre)){
Nombre * cast = static_cast<Nombre *>(*droite_);
if (cast->valeur_ == 0){
res = gauche_;
} else if(typeid(*ds) == typeid(Nombre)){
// std::cout << "gauche est un nombre" << std::endl;
Nombre *cast = dynamic_cast<Nombre*>(droite_);
//std::cout << cast->getValue() << std::endl;
if (cast->getValue() == 0){
res = gs;
}
} else {
res = this;
Expression * rep = this->clone();
res = rep;
}
return res;
......@@ -153,6 +171,37 @@ void Moins::affiche(std::ostream & o) const{
}
Expression * Moins::simplifie() const{
Expression * res;
Expression * gs = gauche_->simplifie();
Expression * ds = droite_->simplifie();
if(typeid(*gs) == typeid(Nombre) && typeid(*ds) == typeid(Nombre)){
Nombre *cg = dynamic_cast<Nombre*>(gs);
Nombre *cd = dynamic_cast<Nombre*>(ds);
Nombre *rep = new Nombre(cg->getValue()-cd->getValue());
res = rep;
}else if(typeid(*gs) == typeid(Nombre)){
// std::cout << "gauche est un nombre" << std::endl;
Nombre *cast = dynamic_cast<Nombre*>(gs);
//std::cout << cast->getValue() << std::endl;
if (cast->getValue() == 0){
Nombre * mun = new Nombre(-1);
Multiplier * rep = new Multiplier(mun, ds);
res = rep;
}
} else if(typeid(*ds) == typeid(Nombre)){
// std::cout << "gauche est un nombre" << std::endl;
Nombre *cast = dynamic_cast<Nombre*>(droite_);
//std::cout << cast->getValue() << std::endl;
if (cast->getValue() == 0){
res = gs;
}
} else {
Expression * rep = this->clone();
res = rep;
}
return res;
}
......
......@@ -33,6 +33,7 @@ public:
Expression * derive(char nom) const;
Expression * clone() const;
Expression * simplifie() const;
double getValue();
private:
double valeur_;
......
No preview for this file type
......@@ -49,6 +49,17 @@ int main()
std::cout << "Simplifie : " << std::endl;
Expression * sdp = dp->simplifie();
std::cout << *sdp << std::endl;
Plus * pp = new Plus(nb,nb);
std::cout << *pp << std::endl;
Expression * pps = pp->simplifie();
std::cout << *pps << std::endl;
Plus * ppp = new Plus(pp,pp);
std::cout << *ppp << std::endl;
Expression *ppps = ppp->simplifie();
std::cout << *ppps << std::endl;
// Test du comportement de Moins
......@@ -63,6 +74,20 @@ int main()
std::cout << "Dérivée de (2 - x) : " << std::endl;
std::cout << *dm << std::endl;
std::cout << "Simplifie : " << std::endl;
Expression * sdm = dm->simplifie();
std::cout << *sdm << std::endl;
Moins * ppm = new Moins(nb,nb);
std::cout << *ppm << std::endl;
Expression * ppms = ppm->simplifie();
std::cout << *ppms << std::endl;
Moins * pppm = new Moins(pp,pp);
std::cout << *pppm << std::endl;
Expression *pppms = pppm->simplifie();
std::cout << *pppms << std::endl;
// Test du comportement de Multiplier
Multiplier * mm = new Multiplier(nb, v);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment