Cod sursa(job #2190632)

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

using namespace std;

#define Dim 100005

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

int operatie(int A,int B,char Op)
{
    if(Op=='+') return A+B;
    if(Op=='-') return B-A;
    if(Op=='*') return A*B;
    return B/A;
}

void evaluare()
{
    while(Oper[Vfop]!='(' and Vfnr>1) {Nr[Vfnr-1]=operatie(Nr[Vfnr],Nr[Vfnr-1],Oper[Vfop]); --Vfnr; --Vfop;}
    if(Oper[Vfop]=='(' and Sir[i]==')') --Vfop;
}

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

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

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