Cod sursa(job #298426)

Utilizator ilincaSorescu Ilinca ilinca Data 6 aprilie 2009 07:57:01
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>

#define nmax 100005
#define pr(x) fprintf(stderr,#x" = %d\n",x)

char x [nmax], *p=x;


int eval ();
int termen ();
int factor ();

int main ()
{
	freopen ("evaluare2.in", "r", stdin);
	freopen ("evaluare.out", "w", stdout);
	gets (x);
	printf ("%d\n", eval ());
	return 0;
}

int eval ()
{
	int  r=termen ();
	while (*p == '+' || *p == '-')
	{
		if (*p == '+')
		{
			++p;
			r+=termen ();
		}
		else
			if (*p == '-')
			{
				++p;
				r-=termen ();
			}
	}
	return r;
}

int factor ()
{
	int r=0;
	if (*p == '(')
	{
		++p;
		r=eval ();
		++p;
		return r;
	}
	for ( ; *p >= '0' && *p <= '9'; ++p)
		r=r*10 + *p-'0';
	return r;
}

int termen ()
{
	int r=factor ();
	while ((*p == '*') || (*p == '/'))
	{
		if (*p == '*')
		{
			++p;
			r*=factor ();
		}	
		else
		{
			++p;
			r/=factor ();
		}
	}
	return r;
}