コード例 #1
0
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"));
    }
}
コード例 #2
0
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"));
    }
}
コード例 #3
0
Entier Entier::mod(Entier e){return n%e.GetEntier();}