void Pile::Sum(){ Constante* depile=this->Depiler(); if(depile->GetType()!=entier) throw LogMessage("le operande n est pas de type entier",2); int i=int(dynamic_cast<Reel*>(depile)->GetReel()); if(nb<i) throw LogMessage("Pas assez element dans la pile",3); if(i<=1) return; Constante* sum=Depiler(); for(int j=2;j<=i;j++) sum=sum->Add(Depiler()); Enpiler(*sum); }
TPile * postfixe (TPile * sommet, char Type, int nb) { int nb1, nb2; switch(Type) { case 'N': sommet = Emplier(sommet, nb); break; case '+': sommet = Depiler(sommet, &nb2); sommet = Depiler(sommet, &nb1); nb = nb1 + nb2; sommet = Emplier(sommet, nb); break; case '-': // TODO: check this snippet sommet = Depiler(sommet, &nb2); sommet = Depiler(sommet, &nb1); nb = nb1 - nb2; sommet = Emplier(sommet, nb); break; case '*': // TODO: check this snippet sommet = Depiler(sommet, &nb2); sommet = Depiler(sommet, &nb1); nb = nb1 * nb2; sommet = Emplier(sommet, nb); break; case '/': // TODO: check this snippet if (nb2 != 0) { sommet = Depiler(sommet, &nb2); sommet = Depiler(sommet, &nb1); nb = nb1 / nb2; sommet = Emplier(sommet, nb); } else exit(1); break; } return sommet; }
void Pile::Mean(){ Constante* numero=this->GetConstante(nb-1); Sum(); Enpiler(*(Depiler()->Division(numero))); }