Cod sursa(job #916794)

Utilizator superman_01Avramescu Cristian superman_01 Data 16 martie 2013 21:41:53
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<cstdio>
 
#define MAX_SIZE 100005
 
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
 
using namespace std;
 
char sir[MAX_SIZE],*p=sir;
 
int term();
int factor();
 
 
//calculez suma
 
inline int eval()
{
 
   int r=term();
  while(*p == '+' || *p == '-')
  {
      switch( *p)
      {
      case '+':
        ++p;
        r+=term();
        break;
      case '-':
        ++p;
        r-=term();
        break;
      }
  }
  return r;
 
}
//formez termenii pentru suma
 
int term()
{
    int r=factor();
    while( *p == '*' || *p == '/')
    {
        switch( *p )
        {
      case '*':
        ++p;
        r*=factor();
        break;
      case '/':
        ++p;
        r/=factor();
        break;
        }
   }
   return r;
}
 
int factor()
{
    int r=0;
    if( *p == '(')
    {
 
        ++p;
        r=eval();
        ++p;
    }
    else
    {
        while( *p>= '0' && *p <= '9')
        {
 
            r=r*10+*p-'0';
            ++p;
        }
 
 
    }
return r;
}
 
 
 
 
int main( void )
{
    fgets(sir,MAX_SIZE,f);
    fprintf(g,"%d",eval());
    fclose(f);
    fclose(g);
     return 0;
}