Cod sursa(job #515435)

Utilizator mvbinfoDragos Dinca mvbinfo Data 21 decembrie 2010 15:04:00
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<string.h>
#define dim 100005
using namespace std;

char e[dim];
long int i, lg;

	void citire();
	long long EvaluareExpresie();
	long long EvaluareFactor();
	long long EvaluareTermen();

int main()
{ 
	ofstream g("evaluare.out");
	citire();
	
	g<<EvaluareExpresie();
	g<<"\n";
	
g.close();
return 0;
}
	
void citire()
{
	ifstream f("evaluare.in");

	f.getline(e,dim);
	lg=strlen(e);

f.close();

}
	int constanta(int k)
{	
	int x;
	
	x=e[k]-48;
	k++;
	while(e[k]>='0' && e[k]<='9')
	{
	x*=10; x+=(e[k]-48);
	k++;i++;
	}	
	
return x;
}


	
long long EvaluareFactor()
	{
	long long fin;
	if(e[i]=='(')
	{
		i++;
		
		fin=EvaluareExpresie();
		
		i++;
	}
	else
	{
		fin=constanta(i);
		i++;

	}
	
return fin;
}
	
long long EvaluareTermen()
{
	long long fin=EvaluareFactor();
	
	while( i<lg && ( e[i] == '*' || e[i]  == '/' ))
	if(e[i]=='*')
	{
		i++;
		fin*=EvaluareFactor();
	}
	else
	{
		i++;
		fin/=EvaluareFactor();
	}
	
	
return fin;	
}
	
long long EvaluareExpresie()
{
	long long t=EvaluareTermen();
	
	
	while( i<lg && ( e[i] == '+' || e[i]=='-' ))
	if(e[i] == '+') 
	{
	i++;
	t+=EvaluareTermen();		
	}
	else
	{
	i++;
	t-=EvaluareTermen();	
	}
			
	
		
return t;
}