Cod sursa(job #374048)

Utilizator alexandru92alexandru alexandru92 Data 15 decembrie 2009 20:29:12
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstring>
#include <fstream>
#include <cstdlib>
#define LEVELMAX 2
#define NMAX 2000001

/*
 *
 */
using namespace std;
ifstream in;
ofstream out;
const char op[4][4]={ "+-", "*/", "^", "" };
char e[NMAX], *expresion;
int evaluate( int a, char op, int b )
{
    if( '+' == op )
	  return a+b;
	if( '-' == op )
	  return a-b;
	if( '*' == op )
	   return a*b;
	if( '/' == op )
	   return a/b; 
}
int evaluate( unsigned int level )
{int x, y;
     if( LEVELMAX == level )
     {
          if( '(' == *expresion )
          {
             ++expresion; //go over (
             x=evaluate(0); //evaluate the new expresion from in the ( )
             ++expresion; //go over )
          }
         else for( x=0; *expresion >= '0' && *expresion <= '9'; ++expresion ) //if we have a number
                 x=x*10+*expresion-'0';
     }
     else for( x=evaluate(level+1); strchr( op[level], *expresion); x=y )
          {char oper=*expresion; ++expresion;
               y=evaluate( x, oper, evaluate(level+1) );
          }
     return x;
}
int main()
{
    in.open("evaluare.in");
    in>>e;
    expresion=e;
    out.open("evaluare.out");
    out<<evaluate(0);
    return 0;
}