Cod sursa(job #2190664)

Utilizator Marina23Oprea Marina Marina23 Data 31 martie 2018 14:26:51
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <string.h>

using namespace std;

#define Dim 100005

int N,Vfnr,Vfop,Nr[Dim],X,i;
short Prioritate[260];
char Sir[Dim],Oper[Dim];

void evaluare()
{
    if(Oper[Vfop]=='+') Nr[Vfnr-1]+=Nr[Vfnr];
    else
        if(Oper[Vfop]=='-') Nr[Vfnr-1]-=Nr[Vfnr];
        else
            if(Oper[Vfop]=='*') Nr[Vfnr-1]*=Nr[Vfnr];
            else
                Nr[Vfnr-1]/=Nr[Vfnr];
    --Vfnr; --Vfop;
}

int main()
{
    ifstream fin("evaluare.in"); ofstream fout("evaluare.out");

    fin>>Sir; N=strlen(Sir);
    i=0;
    Prioritate['(']=0;
    Prioritate['+']=Prioritate['-']=1;
    Prioritate['*']=Prioritate['/']=2;
    while(i<=N-1)
    {
        if(Sir[i]>='0' and Sir[i]<='9')
        {
            X=0;
            while(Sir[i]>='0' and Sir[i]<='9') X=X*10+(Sir[i++]-'0');
            Nr[++Vfnr]=X;
            continue;
        }//if
        if(Sir[i]=='(') {Oper[++Vfop]=Sir[i++]; continue;}
        if(Sir[i]==')')
        {
            while(Oper[Vfop]!='(') evaluare();
            --Vfop; ++i; continue;
        }
        while(Vfop>=1 and Oper[Vfop]!='(' and Prioritate[Sir[i]]<=Prioritate[Oper[Vfop]]) evaluare();
        Oper[++Vfop]=Sir[i++];
    }
    while(Vfop>=1) evaluare();
    fout<<Nr[1];

    fin.close (); fout.close();
    return 0;
}