Cod sursa(job #593067)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 1 iunie 2011 09:14:28
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
# include <fstream>
# include <cstring>
using namespace std;

int poz;
char s[100010];

int grad1 (), grad2 (), paranteze ();

int grad1 ()
{
	int val1 = grad2 ();
	while (s[poz] == '+' || s[poz] == '-')
	{
		if (s[poz] == '+')
		{
			++poz;
			val1 += grad2 ();
		}
		else
		{
			++poz;
			val1 -= grad2 ();
		}
	}
	
	return val1;
}

int grad2 ()
{
	int val2 = paranteze ();
	while (s[poz] == '*' || s[poz] == '/')
	{
		if (s[poz] == '*')
		{
			++poz;
			val2 *= paranteze ();
		}
		else
		{
			++poz;
			val2 /= paranteze ();
		}
	}
	
	return val2;
}

int paranteze ()
{
	int val3 = 0, semn = 1;
	if (s[poz] == '-')
	{
		semn = -1;
		++poz;
	}
	
	if (s[poz] == '(')
	{
		++poz;
		val3 = grad1 ();
		++poz;
		return semn * val3;
	}
	
	while (s[poz] >= '0' && s[poz] <= '9')
	{
		val3 = val3 * 10 + s[poz] - '0';
		++poz;
	}
	
	return val3 * semn;
}

ifstream f ("evaluare.in");
ofstream g ("evaluare.out");

int main ()
{
	f.getline (s, 100005);
	g << grad1 ();
	
	g.close ();
	return 0;
}