Element* Calculateur::cast(Element* e) { if(typeid(*e) == typeid(Expression)) { qDebug()<<"cast expression"; return e->clone(); } else if(isComplexe())//\todo ici il faudrait faire attention de ne pas transformer les parties imaginaire et réelle d'un complexe en complexe { qDebug()<<"cast Complexe"; return e->toComplexe(); } else if(isEntier()) { qDebug()<<"cast entier"; return e->toEntier(); } else if(isReel()) { qDebug()<<"cast reel"; return e->toReel(); } else if(isRationnel()) { qDebug()<<"cast rationnel"; return e->toRationnel(); } else { qDebug()<<"cast else"; return e->toReel(); } }
Complexe* Complexe::conjugue(){ StrategieMultiplication m; Numerique* i= getI(); Entier* neg= new Entier(-1); Numerique* pr= dynamic_cast<Numerique*>(getR()->clone()); if (isEntier(i)){ Entier* e= dynamic_cast<Entier*>(i); return new Complexe(pr,m.Calcul(neg,e)); } else if (isReel(i)){ Reel* r= dynamic_cast<Reel*>(i); return new Complexe(pr,m.Calcul(neg,r)); } else{ Rationnel* ra= dynamic_cast<Rationnel*>(i); return new Complexe(pr,m.Calcul(neg,ra)); } }
void Pile::cast(Constante* & cst){ // if(typeid(*cst) ==typeid(CEntier) && !isEntier()){ // CEntier * tmp =(CEntier*) cst; // if(isRationnel()){ // cst = new CRationnel(tmp->getValue(), 1); // }else { // cst = new CReel(tmp->getValue()); // } // delete tmp; // } if(typeid(*cst) ==typeid(CRationnel) && !isRationnel()){ CRationnel * tmp = (CRationnel*) cst; if(isEntier()){ cst = new CEntier((float)tmp->getNum()/(float)tmp->getDenom()); }else { cst = new CReel((float)tmp->getNum()/(float)tmp->getDenom()); } delete tmp; } else if(typeid(*cst) ==typeid(CReel) && !(isReel())) { CReel * tmp = (CReel*) cst; if(isEntier()){ cst = new CEntier(tmp->getValue()); }else { cst = new CRationnel(tmp->getValue()); } delete tmp; } }
bool Calculatrice::isConstante(const QString& s) const{ if (isEntier(s) || isReel(s) || isRationnel(s) || isComplexe(s)) { return true; } return false; }