Cod sursa(job #1494429)

Utilizator nickulNic Kul nickul Data 1 octombrie 2015 04:48:55
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>
#include<list>
#include<iterator>

using namespace std;

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

bool numar(char a)
{
	if(a>='0'&&a<='9') return true;
	return false;
}

int rez()
{
	bool minus,impartire;
	char a,operatie='+';
	int b,total=0,curent=0;
	while(!in.eof())
	{
		b=0,minus=false;
		in>>a;
		if(!in.eof()&&a=='-') 
		{
			minus=true;
			in>>a;
		}
		if(a=='(') 
		{
			b=rez();
			in>>a;
		}
		while(!in.eof()&&numar(a)) 
		{
			b*=10;
			b+=a-'0';
			in>>a;
		}
		curent=b;
		while(!in.eof()&&(a=='*'||a=='/'))
		{
			b=0;
			if(a=='/') impartire=true;
			else impartire=false;
			in>>a;
			if(!in.eof()&&a=='-')
			{
				minus=!minus;
				in>>a;
			}
			if(a=='(') 
			{
				b=rez();
				in>>a;
			}
			while(!in.eof()&&numar(a)) 
			{
				b*=10;
				b+=a-'0';
				in>>a;
			}
			if(impartire)
				curent/=b;
			else
				curent*=b;
		}
		if((operatie=='+'&&!minus)||(operatie=='-'&&minus))
		{
			total+=curent;
			curent=0;
		}
		if((operatie=='-'&&!minus)||(operatie=='+'&&minus))
		{
			total-=curent;
			curent=0;
		}
		if(a=='+')
			operatie='+';
		else 
			operatie='-';
		if(a==')') break;
	}
	return total;
}

int main()
{
	out<<rez();
}