Cod sursa(job #609772)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 23 august 2011 11:52:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<fstream>
#include<cstring>
using namespace std;
char e[100010];
int n,sol;

int EvaluareExpresie(int &i);
int Termen(int &i);
int Factor(int &i);

void Citire()
{
	ifstream fin("evaluare.in");
	fin>>e;
	fin.close();
	n=strlen(e);
}

int DeterminareValoare(int &i)
{
	int aux=0;
	while(e[i]>='0' && e[i]<='9')
	{
		aux=aux*10+(e[i]-'0');
		i++;
	}
	i--;
	return aux;
}

int Factor(int &i)
{
	int x;
	if(e[i]=='(')
	{
		i++;
		x=EvaluareExpresie(i);
		i++;
	}
	else
	{
		x=DeterminareValoare(i);
		i++;
	}
	return x;
}

int Termen(int &i)
{
	int f;
	f=Factor(i);
	while(i<n && (e[i]=='*' || e[i]=='/'))
	{
		if(e[i]=='*')
		{
			i++;
			f*=Factor(i);
		}
		else
		{
			i++;
			f/=Factor(i);
		}
	}
	return f;
}

int EvaluareExpresie(int &i)
{
	int t;
	t=Termen(i);
	while(i<n && (e[i]=='+' || e[i]=='-'))
	{
		if(e[i]=='+')
		{
			i++;
			t+=Termen(i);
		}
		else
		{
			i++;
			t-=Termen(i);
		}
	}
	return t;
}

void Afisare()
{
	ofstream fout("evaluare.out");
	fout<<sol<<"\n";
	fout.close();
}

int main()
{
	int i=0;
	Citire();
	sol=EvaluareExpresie(i);
	Afisare();
	return 0;
}