Cod sursa(job #1110608)

Utilizator DEYDEY2Tudorica Andrei DEYDEY2 Data 18 februarie 2014 11:32:26
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.13 kb
#include <fstream>
#include <iostream>
#include <string.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char S[100000];
int REZ[100000],krez;
int k,x,i;
char c;
char E[100005];
int priority(char c)
{
       if (c=='(')
              return -1;
       if (c=='+' || c=='-')
              return 0;
       return 1;
}

int calcul(int a, int b, int op)
{
       if (op=='+')
              return a+b;
       if (op=='-')
              return a-b;
       if (op=='*')
              return a*b;
       if (op=='/')
       {
           if(b!=0)
              return a/b;
       }
}

int main()
{
       k=0;
       krez=0;
       f.getline(E+1,100001);
       E[0]='(';
       strcat(E,")");
       for (i=0;E[i]!='\0';i++)
       {
              c=E[i];
              if (c=='(')
              {
                     S[++k]=c;
                     continue;
              }
              if (c==')')
              {
                     while (S[k]!='(')
                     {
                             krez--;
                             REZ[krez]=calcul(REZ[krez],REZ[krez+1],S[k]);
                             k--;
                     }
                     k--;
                     continue;
              }
              if (c>='0' && c<='9')
              {
                  x=0;
                     while(E[i]!='\0' && E[i]>='0' && E[i]<='9')
                     {
                        x=x*10+(E[i]-'0');
                        i++;
                     }
                     i--;
                     REZ[++krez]=x;
                     continue;
              }
              if (c=='+' || c=='-' || c=='*' || c=='/')
              {
                     while (priority(S[k])>=priority(c))
                     {
                            krez--;
                            REZ[krez]=calcul(REZ[krez],REZ[krez+1],S[k]);
                            k--;
                     }
                     S[++k]=c;
                     continue;
              }
       }
       g<<REZ[1];
       f.close();
       g.close();
       return 0;
}