Cod sursa(job #2049949)

Utilizator LauraNaduLaura Nadu LauraNadu Data 27 octombrie 2017 20:37:12
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.14 kb
#include<fstream>
#include<string>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int i, n, trans[256], k, nr, b[100], sol;
char a[100], stiva[100];
int main()
{
    f>>a;
    trans[43]=-1;
    trans[45]=-2;
    trans[42]=-3;
    trans[47]=-4;
    for(i=0;a[i]!=0;i++)
        n++;
    k=0;
    stiva[k]='(';
    a[++n]=')';
    for(i=0;i<=n;i++)
    {
        if(a[i]=='(')
            stiva[++k]=a[i];
        if(a[i]==')')
        {
            while(stiva[k]!='(')
                b[++nr]=trans[stiva[k--]];
            k--;
        }
        if(a[i]=='+' || a[i]=='-')
        {
            while(stiva[k]=='-' || stiva[k]=='*' || stiva[k]=='/' || stiva[k]=='+')
                b[++nr]=trans[stiva[k--]];
            stiva[++k]=a[i];
        }
        if(a[i]=='*' || a[i]=='/')
        {
            while(stiva[k]=='*' || stiva[k]=='/')
                b[++nr]=trans[stiva[k--]];
            stiva[++k]=a[i];
        }
        if(a[i]>='0' && a[i]<='9')
        {
            int numar=0;
            while(a[i]>='0' && a[i]<='9')
            {
                //a[i]='?';
                numar=numar*10+a[i]-'0';
                i++;
            }
            i--;
            b[++nr]=numar;
        }
    }

    //g<<int(a[2])<<"\n";

    /*for(i=1;i<=nr;i++)
        g<<b[i]<<" ";
    while(k>0)
        b[++nr]=trans[stiva[k--]];*/
    for(i=1;i<=nr;i++)
        g<<b[i]<<" ";
    k=0;
    for(i=1;i<=nr;i++)
    {
        if(b[i]>=0)
            trans[++k]=b[i];
        else
        {
            if(b[i]==-1)
            {
                sol=trans[k-1]+trans[k];
                trans[k-1]=sol;
            }
            if(b[i]==-2)
            {
                sol=trans[k-1]-trans[k];
                trans[k-1]=sol;
            }
            if(b[i]==-3)
            {
                sol=trans[k-1]*trans[k];
                trans[k-1]=sol;
            }
            if(b[i]==-4)
            {
                sol=trans[k-1]/trans[k];
                trans[k-1]=sol;
            }
            k--;
        }
    }
    g<<sol;
    return 0;
}