Cod sursa(job #566131)

Utilizator danut_01Danut Avadanei danut_01 Data 28 martie 2011 17:56:30
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#define IN "evaluare.in"
#define OUT "evaluare.out"
#define MAX 100001
using namespace std;
ifstream fin(IN);
ofstream fout(OUT);
char S[MAX],*p = S;
long eval(),factor(),termen();
int main()
{
	fin>>S;
	fout<<eval();
	return 0;
}
long eval()
{
	long r = termen();
	while(*p == '+' || *p == '-')
	{
		switch(*p)
		{
			case '+':
				++p;//trecem peste +
				r += termen();
				break;
			case '-':
				++p;//trecem peste -
				r -= termen();
				break;
		}
	}
	return r;
}
long termen()
{
	long r = factor();
	while(*p == '*' || *p == '/')
	{
		switch(*p)
		{
			case '*':
				++p;//trecem peste *
				r *= termen();
				break;
			case '/':
				++p;//trecepe peste /
				r /= termen();
				break;
		}
	}
	return r;
}
long factor()
{
	long r = 0;
	if(*p == '(')
	{
		++p;//trecem peste '('
		r = eval();
		++p;//trecem peste ')'
	}
	else
	{
		while(*p >= '0' && *p <= '9')//avem numar
		{
			r = r * 10 + *p - '0';
			++p;
		}
	}
	return r;
}