Commit 7501b66b authored by Hernandez Francois's avatar Hernandez Francois

simplification

parent 232b6c49
......@@ -4,6 +4,8 @@
#include "Derivation.hpp"
// EXPRESSION
int Expression::nb_instances_ = 0;
Expression::Expression(){
......@@ -14,6 +16,7 @@ Expression::~Expression(){
nb_instances_--;
}
// NOMBRE
Nombre::Nombre(double valeur){
this->valeur_ = valeur;
......@@ -46,6 +49,8 @@ double Nombre::getValue(){
return valeur_;
}
// VARIABLE
Variable::Variable(char nom){
this->nom_ = nom;
}
......@@ -62,7 +67,8 @@ Expression * Variable::derive(char nom) const{
Nombre * res;
if(this->nom_ == nom){
res = new Nombre(1);
} else {
}
else {
res = new Nombre(0);
}
return res;
......@@ -78,6 +84,8 @@ Expression * Variable::simplifie() const{
return res;
}
// OPERATEUR
Operateur::Operateur(Expression * gauche, Expression * droite){
}
......@@ -120,9 +128,7 @@ Expression * Plus::simplifie() const{
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 {
......@@ -130,9 +136,7 @@ Expression * Plus::simplifie() const{
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;
Nombre *cast = dynamic_cast<Nombre*>(ds);
if (cast->getValue() == 0){
res = gs;
}else {
......@@ -186,31 +190,27 @@ Expression * Moins::simplifie() const{
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 {
Expression * rep = this->clone();
Moins * rep = new Moins(gs, 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;
Nombre *cast = dynamic_cast<Nombre*>(ds);
if (cast->getValue() == 0){
res = gs;
} else {
Expression * rep = this->clone();
Moins * rep = new Moins(gs, ds);
res = rep;
}
} else {
Expression * rep = this->clone();
Moins * rep = new Moins(gs, ds);
res = rep;
}
......@@ -258,9 +258,7 @@ Expression * Multiplier::simplifie() const{
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;
......@@ -269,9 +267,7 @@ Expression * Multiplier::simplifie() const{
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;
Nombre *cast = dynamic_cast<Nombre*>(ds);
if (cast->getValue() == 0){
Nombre * rep = new Nombre(0);
res = rep;
......@@ -326,15 +322,17 @@ Expression * Diviser::simplifie() const{
Expression * res;
Expression * gs = gauche_->simplifie();
Expression * ds = droite_->simplifie();
if(typeid(*gs) == typeid(Nombre) && typeid(*ds) == typeid(Nombre)){
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;
}
else if(typeid(*gs) == typeid(Nombre))
{
Nombre *cast = dynamic_cast<Nombre*>(gs);
//std::cout << cast->getValue() << std::endl;
if (cast->getValue() == 0){
Nombre * rep = new Nombre(0);
res = rep;
......@@ -343,9 +341,7 @@ Expression * Diviser::simplifie() const{
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;
Nombre *cast = dynamic_cast<Nombre*>(ds);
if (cast->getValue() == 0){
std::cout << "Division par 0";
} else {
......@@ -359,10 +355,11 @@ Expression * Diviser::simplifie() const{
}
return res;
}
// surcharge de l'opérateur <<
// Surcharge de l'opérateur <<
std::ostream & operator<<( std::ostream & out, const Expression & e ) {
e.affiche( out );
return out;
......
No preview for this file type
......@@ -8,6 +8,7 @@
int main()
{
/*Nombre * zero = new Nombre(0);
Nombre * un = new Nombre(1);
Nombre * deux = new Nombre(2);
Nombre * trois = new Nombre(3);
......@@ -47,10 +48,36 @@ int main()
Multiplier * prod = new Multiplier(deuxplusx,deuxmoinsx);
Expression * prodd = prod->derive('x');
std::cout << *prodd << std::endl;
Expression * prodds = prodd->simplifie();
/*Expression * prodds = prodd->simplifie();
std::cout << *prodds << std::endl;
*/
/*
Plus * zeropun = new Plus(zero, un);
Moins * deuxmx = new Moins(deux, x);
Multiplier * test = new Multiplier(zeropun, deuxmx);
Moins * zeromun = new Moins(zero, un);
Multiplier * test2 = new Multiplier(deuxplusx, zeromun);
std::cout << * test << std::endl;
Expression * tests = test->simplifie();
std::cout << * tests << std::endl;
std::cout << * test2 << std::endl;
Expression * test2s = test2->simplifie();
/*std::cout << "TEST DES FONCTIONNALITES" << std::endl;
std::cout << * test2s << std::endl;
Expression * ttt = zeromun->simplifie();
std::cout << * ttt << std::endl;
Expression * tttt = deuxplusx->simplifie();
std::cout << * tttt << std::endl;*/
/*
std::cout << "TEST DES FONCTIONNALITES" << std::endl;
// Création du nombre 2
Nombre * nb = new Nombre(2);
......@@ -191,7 +218,40 @@ int main()
std::cout << "Simplifie : " << std::endl;
Expression * dddds = dddd->simplifie();
std::cout << *dddds << std::endl;
*/
Nombre * un = new Nombre(1);
Nombre * deux = new Nombre(2);
Nombre * trois = new Nombre(3);
Variable * x = new Variable('x');
Variable * y = new Variable('y');
Plus * unpx = new Plus(un, x);
Diviser * xsury = new Diviser(x,y);
Multiplier * test = new Multiplier(unpx,xsury);
std::cout << "Expression à dériver : " << std::endl;
std::cout << *test << std::endl;
Expression * testx = test->derive('x');
Expression * testy = test->derive('y');
Expression * testxs = testx->simplifie();
Expression * testys = testy->simplifie();
std::cout << "Dérivée par rapport à x : " << std::endl;
std::cout << *testx << std::endl;
std::cout << "Simplification : " << std::endl;
std::cout << *testxs << std::endl;
std::cout << "Dérivée par rapport à y : " << std::endl;
std::cout << *testy << std::endl;
std::cout << "Simplification : " << std::endl;
std::cout << *testys << 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