void CalculatriceModele::getMean(int type){ if(pile.size()>=1){ Constante* a = pile.pop(); if(typeid (*a).name()==typeid (Entier).name()){ Entier* e = dynamic_cast<Entier*>(a); if(pile.size()>=e->GetEntier()) { Rationnel nb_moyenne = e->inv(); pile.push(e); emit getSum(type); a = pile.pop(); Constante* res = nb_moyenne * a; qDebug()<<"res :"<<res->ConvertChaine(); pile.push(res); } else{ pile.push(a); logger1->Write(&LogMessage(ERROR,"taille pile insuffisante")); logger2->Write(&LogMessage(ERROR,"taille pile insuffisante")); } } else{ logger1->Write(&LogMessage(ERROR,"type non conforme")); logger2->Write(&LogMessage(ERROR,"type non conforme")); } emit finOp(&pile); } else{ logger1->Write(&LogMessage(ERROR,"taille pile insuffisante")); logger2->Write(&LogMessage(ERROR,"taille pile insuffisante")); } }
void CalculatriceModele::getSum(int type){ if(pile.size()>=1){ Constante* a = pile.pop(); if(typeid (*a).name()==typeid (Entier).name()){ Entier* e = dynamic_cast<Entier*>(a); int k = e->GetEntier(); if(pile.size()>=k) { for(int i=0; i<k-1; i++){ emit getAdd(type); } Constante* res = pile.pop(); pile.push(res); if(typeid (*res).name()==typeid (Expression).name()){ emit getExpression(); } } else { logger1->Write(&LogMessage(ERROR,"pas assez d'expressions")); logger2->Write(&LogMessage(ERROR,"pas assez d'expressions")); pile.push(a);} }else{ pile.push(a); logger1->Write(&LogMessage(ERROR,"type non conforme")); logger2->Write(&LogMessage(ERROR,"type non conforme")); } emit finOp(&pile); } else{ logger1->Write(&LogMessage(ERROR,"taille pile insuffisante")); logger2->Write(&LogMessage(ERROR,"taille pile insuffisante")); } }
Entier Entier::mod(Entier e){return n%e.GetEntier();}