Commit ff8259d2 authored by Hernandez Francois's avatar Hernandez Francois

simplifie multiplier diviser first try

parent dcac4b20
......@@ -236,6 +236,38 @@ void Multiplier::affiche(std::ostream & o) const{
}
Expression * Multiplier::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 * rep = new Nombre(0);
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){
Nombre * rep = new Nombre(0);
res = rep;
}
} else {
Expression * rep = this->clone();
res = rep;
}
return res;
}
......@@ -272,7 +304,39 @@ void Diviser::affiche(std::ostream & o) const{
}
Expression * Diviser::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 * rep = new Nombre(0);
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){
std::cout << "Division par 0";
} else {
Diviser * rep = new Diviser(gs, ds);
res = rep;
}
} */else {
Expression * rep = this->clone();
res = rep;
}
return res;
}
......
No preview for this file type
......@@ -110,6 +110,10 @@ int main()
std::cout << "Dérivée de ((2 + x) * (2 - x)) : " << std::endl;
std::cout << *dmmm << std::endl;
std::cout << "Simplifie : " << std::endl;
Expression * dmmms = dmmm->simplifie();
std::cout << *dmmms << std::endl;
// Test du comportement de Diviser
Diviser * d = new Diviser(nb, v);
......@@ -127,9 +131,19 @@ int main()
std::cout << "Affiche ((2 + x) / (2 - x)) : " << std::endl;
std::cout << *ddd << std::endl;
Diviser * divn = new Diviser(nb,nb);
std::cout << *divn << std::endl;
Expression * divns = divns->simplifie();
std::cout << *divns << std::endl;
Expression * dddd = ddd->derive('x');
std::cout << "Dérivée de ((2 + x) * (2 - x)) : " << std::endl;
std::cout << *dddd << std::endl;
std::cout << "Simplifie : " << std::endl;
Expression * dddds = dddd->simplifie();
std::cout << *dddds << std::endl;
}
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