Cod sursa(job #2371541)

Utilizator blackbear26Denisa Lepadatu blackbear26 Data 6 martie 2019 18:13:01
Problema Evaluarea unei expresii Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#include<cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int c,k,p,fp[100];
char a,st[100],text[100000];
int eval(char x)
{
    if(x=='+'||x=='-') return 1;
    else if (x=='*'||x=='/') return 2;
}
int op(int p)
{
    if(st[p]=='+')fp[++k]=-4;
    else if(st[p]=='-')fp[++k]=-3;
    else if(st[p]=='*')fp[++k]=-2;
    else fp[++k]=-1;
}
int main()
{
    //fin>>c;fin.get();
    fin.get(text,100000);
    for(int l=0;l<strlen(text);l++)
    {
        a=text[l];
        if(isdigit(a))
            {if(isdigit(text[l-1]))fp[k]=fp[k]*10+(int)a-48;
            else fp[++k]=(int)a-48;}
        else if(a==')')
        {
            while(st[p]!='(')op(p--);
            p--;
        }
        else if(a=='(') st[++p]=a;
        else if(eval(a)<=eval(st[p]))
            {while(eval(a)<=eval(st[p])&&st[p]!='('&&p>0)op(p--);st[++p]=a;}
        else st[++p]=a;
    }
    while(p!=0) {if(st[p]=='+')fp[++k]=-4;
            else if(st[p]=='-')fp[++k]=-3;
            else if(st[p]=='*')fp[++k]=-2;
            else fp[++k]=-1;   p--;}
//for(int l=1;l<=k;l++) cout<<fp[l]<<" ";cout<<'\n';
    int r=1;
    while(k>1)
    {while(fp[r+1]>0) r++;

         if(fp[r+1]==-1)fp[r-1]/=fp[r];
    else if(fp[r+1]==-2)fp[r-1]*=fp[r];
    else if(fp[r+1]==-3)fp[r-1]-=fp[r];
                   else fp[r-1]+=fp[r];

    for(int i=r;i<=k-2;i++)fp[i]=fp[i+2];
    k-=2;r=2;
//for(int l=1;l<=k;l++) cout<<fp[l]<<" ";cout<<'\n';
    }
    fout<<fp[1];
    return 0;
}