示例#1
0
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;
}
示例#3
0
void Pile::Mean(){
    Constante* numero=this->GetConstante(nb-1);
    Sum();
    Enpiler(*(Depiler()->Division(numero)));
}