Cod sursa(job #584509)

Utilizator bugyBogdan Vlad bugy Data 25 aprilie 2011 17:52:17
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#include<string.h>
#define dim 100005
using namespace std;

char e[dim];	int i, lg;					

int EvaluareExpresie();

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;
}
	
int EvaluareFactor() // Un factor este un numar sau o expresie intre paranteze.
{
	int fin;
	if(e[i]=='(')
	{	i++;		
		fin=EvaluareExpresie();		
		i++;	}
	else
	{	fin=constanta(i);
		i++;	}	
return fin;
}
	
int EvaluareTermen() // Un termen este un factor sau un produs de factori
{
	int fin=EvaluareFactor();
	
	while( i<lg && ( e[i] == '*' || e[i]  == '/' ))
	if(e[i]=='*')
	{	i++;
		fin*=EvaluareFactor();	}
	else
	{	i++;
		fin/=EvaluareFactor();	}	
return fin;	
}
	
int EvaluareExpresie() // O expresie este un numar sau un termen al unei sume.
{
	int t=EvaluareTermen();
	
	while( i<lg && ( e[i] == '+' || e[i]=='-' ))
	if(e[i] == '+') 
	{	i++;
		t+=EvaluareTermen();	}
	else
	{	i++;
		t-=EvaluareTermen();	}
return t;
}
	
int main()
{ 
	ofstream g("evaluare.out");
	citire();
	
	g<<EvaluareExpresie();
	g<<"\n";
	
g.close();
return 0;
}