Cod sursa(job #829048)

Utilizator olarasuloredanaOlarasu Loredana olarasuloredana Data 4 decembrie 2012 20:31:08
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 2.07 kb
#include<cstring>
#include<cstdio>
#include<fstream>
using namespace std;
char sir2[15],t[100001],sir[3];
int main()
{
    ifstream f("evaluare.in");
    ofstream g("evaluare.out");
    char s[100001],st[100];
    int vf=0,i=0,k=0,j=0,nr,st2[100],vf2=0,op1,op2;
    f>>s;st[vf]='0';
    do
    {
        if(s[i]=='(')st[++vf]='(';
        else if(s[i]>='0'&&s[i]<='9'){
                                        while(s[i]>='0'&&s[i]<='9')
                                             {sir[0]=s[i];strcat(t,sir);i++;}
                                        strcat(t," ");i--;
                                     }
            else if(s[i]==')')
                    {while(st[vf]!='(')
                          {
                              sir[0]=st[vf];
                              strcat(t,sir);
                              vf--;

                          }
                        vf--;}
                 else if(s[i]=='+'||s[i]=='-')
                      {if(st[vf]=='+'||st[vf]=='-'||st[vf]=='*'||st[vf]=='/')
                         {
                             sir[0]=st[vf];
                              strcat(t,sir);
                              st[vf]=s[i];
                         }
                        else st[++vf]=s[i];}
                        else st[++vf]=s[i];
         i++;
    }
    while(i!=strlen(s));
    while(vf!=0)
        sir2[k++]=st[vf--];

    strcat(t,sir2);
    while(j!=strlen(t))
    {
        if(t[j]>='0'&&t[j]<='9')
            {
                nr=0;
                while(t[j]>='0'&&t[j]<='9'){nr=nr*10+(t[j]-'0');j++;}
                st2[++vf2]=nr;j--;
            }
        else if(t[j]!=' ')
        {
            op1=st2[vf2];
            op2=st2[vf2-1];
            vf2=vf2-2;
            if(t[j]=='+')st2[++vf2]=op1+op2;
            else if(t[j]=='-')st2[++vf2]=op2-op1;
                  else if(t[j]=='/')st2[++vf2]=op2/op1;
                       else if(t[j]=='*')st2[++vf2]=op2*op1;
        }
        j++;
    }
    g<<st2[vf2];
    f.close();
    g.close();
    return 0;
}