Cod sursa(job #688476)

Utilizator mateiuliIulian mateiuli Data 23 februarie 2012 16:40:00
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#define NMAX 1002
using namespace std;

// nivel maxim de prioritate
#define LMAX 2
// operatori pe niveluri de prioritate
char OP[4][4] = {"+-", "*/", "^", ""};
char S[NMAX], *p = S;

/**
* evalueaza o expresie simpla de forma a operator b
*/
int evalueaza(int a, int b, int op)
{
	switch(op)
	{
	case '+':
		return a + b;
	case '-':
		return a - b;
	case '*':
		return a * b;
	case '/':
		return a / b;
	}
}

int expresie(int nivel) 
{
	int x, y;
	if(nivel == LMAX)
	{
		if(*p == '(') 
		{
			p++;
			x = expresie(0);
			p++;
		}
		else // preiau numarul - citesc caracter cu caracter
			for(x = 0; *p >= '0' && *p <= '9'; ++p)
				// salvez numarul
				x = x * 10 + (*p - '0');
	}
	else 
		for(x = expresie(nivel+1); strchr(OP[nivel], *p); x = y)
			y = evalueaza(x, expresie(nivel+1), *p++);
	return x;
}

int main()
{
	ifstream fin ("evaluare.in");
	ofstream fout("evaluare.out");
	fin.getline(S, NMAX);
	fout<<expresie(0);
}