Cod sursa(job #469581)

Utilizator S7012MYPetru Trimbitas S7012MY Data 8 iulie 2010 13:05:09
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <iostream>
#include <string.h>
#define NM 2
#define DN 100007
using namespace std;

char op[4][4] = { "+-", "*/", "^", "" };
char S[DN], *p=S;
class exp {
private:
	int ex(int a,int b, char op) {
		if(op=='+') return a + b;
		else if(op=='-') return a - b;
		else if(op=='*') return a * b;
		else if(op=='/') return a / b;
	}
public:
	int expr( int lev ) {
		int x, y;
		if( lev == NM )
			if( *p == '(' )
				++p, x = expr(0), ++p;
			else
				for( x = 0; *p >= '0' && *p <= '9'; ++p )
					x = x * 10 + *p - '0';
		else
			for( x = expr(lev+1); strchr(op[lev], *p); x = y )
				y = ex( x, expr(lev+1), *p++ );
		return x;
	}

}Ex;

int main()
{
    ifstream f("evaluare.in");
	ofstream g("evaluare.out");
	f.get(S,DN);
	int zz=strlen(S);
	S[zz]='\n';
	g<<Ex.expr(0);
	f.close();
	g.close();
	//fgets( S, DN, fopen( "evaluare.in", "r" ) );
	//fprintf( fopen( "evaluare.out", "w" ), "%d\n", Ex.expr(0) );
	return 0;
}