Cod sursa(job #384263)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 19 ianuarie 2010 19:53:54
Problema Evaluarea unei expresii Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

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

char e[101000];
long int i,lg;
long int k=0;
void Citire();
long int eval(char);
long int Evaluare_Expresie();
long int Evaluare_Factor();
long int Evaluare_Termen();

int main()
{   
	Citire();
	lg=strlen(e);
	fout<<Evaluare_Expresie();
	return 0;
}

void Citire()
{
	fin.getline(e,101000);
	return;
}

long int eval(char c)
{  
   
   long int sc=0;
   k=i;
   while(e[k]<='9' && e[k]>='0')
     {
	   sc=sc*10+e[k]-'0';
	   k++;
	 }
   return sc;
}

long int Evaluare_Factor()
{
	long int f;
	if(e[i]=='(')
	{
		i++;
		f=Evaluare_Expresie();
		i++;
	}
	else
	{
		f=eval(e[i]);
		if(k-i>=2)
			i=k;
		else
		    i++;
	}
	return f;
}

long int Evaluare_Termen()
{
	long int f=Evaluare_Factor();
	while(i<lg && e[i]=='*')
	{
		i++;
		f=f*Evaluare_Factor();
	}
	
	while(i<lg && e[i]=='/')
	{
		i++;
		f=f/Evaluare_Factor();
	}
	
	return f;
}

long int Evaluare_Expresie()
{
	long int t=Evaluare_Termen();
	while(i<lg && e[i]=='+')
	{
		i++;
		t+=Evaluare_Termen();}
	while(i<lg && e[i]=='-')
	{
		i++;
		t-=Evaluare_Termen();}
	return t;
}