Cod sursa(job #718159)

Utilizator NistorIoanaNistor Ioana- Anamaria NistorIoana Data 20 martie 2012 16:27:46
Problema Evaluarea unei expresii Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
using namespace std;
char c;
ifstream f ("evaluare.in");
ofstream g ("evaluare.out");
long eval();
long number();
long prod();

long eval()
{
	long nr=prod();//inmultirea si inpartirea au prioritate asa ca incepem cu ea
	while((c=='+'||c=='-')&&!(f.eof()))
	{
		if (c=='+')
		{	
			f>>c;//incepe termenul adunarii
			nr=nr+number();
		}
		if (c=='-')
		{
			f>>c;
     		nr=nr-number();
		}
	}
	return nr;
}

long prod()
{
	long nr=number();//orice expresie incepe cu un numar
	while ((c=='*'||c=='/')&&!(f.eof()))
	{   
		if (c=='*')
		{
			f>>c;
			nr=nr*number();
		}
		if (c=='/')
		{
			f>>c;	
			nr=nr/number();//consideram ca expreia e valida deci ca number() nu va da 0
		}
	}
	return nr;
}

long number()
{
	long nr=0;
	if(c=='(')//daca e o paranteza avem o expresie de evaluat
	{
		f>>c;//prima cifra din noua expresie
		nr=eval();
		f>>c;//citim ")"
	}
	else
	{
		while ((c>='0')&&(c<='9')&&!(f.eof()))//formam numarul care poate avea si mai multe cifre
		{
			nr=nr*10+(c-'0');
			f>>c;
		}
	}
	return nr;//ne intoarcem sa calculam restul expresiei
} 

int main()
{
	f>>c;
	g<<eval();
	f.close();
	g.close();
	return 0;
}