Cod sursa(job #1023035)

Utilizator andrei8055Andrei andrei8055 Data 6 noiembrie 2013 12:35:51
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
//#include "stdafx.h"
#include <cstdio>
#include <cstring>
#include<fstream>
using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");
#define LMAX 2 
char op[4][4] = { "+-", "*/", "^", "" }; 

#define NX 100010
char S[NX], *p = S;

int eval( int a, int b, char o ) {
	switch( o ) {
	case '+': {return a + b;}	
	case '-': {return a - b;}
	case '*': {return a * b;}
	case '/': {return a / b;}
	}
}

int endOfExp()
{
	*p--;
	if(*p ==NULL)
		return 1;
	else
		*p++;
	return 0;

}

int expr( int lev ) {

	int x, y;
	if( lev == LMAX )
		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 = eval( x, expr(lev+1), *p++ );
			if(endOfExp()==1)
				break;
		}
		return x;
}


int main() {

	f>>p;
	p = S;
	g<<expr(0);
	return 0;
}