Cod sursa(job #631294)

Utilizator vlcmodanModan Valentin vlcmodan Data 7 noiembrie 2011 18:51:03
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<fstream.h>
#include<string.h>
#include<iostream.h>
struct{char ns; int v;} TS[200];
char e[200];
int i,lg;
void Citire();
int eval(char);
int EvaluareExpresie();
int EvaluareFactor();
int EvaluareTermen();
int main()
{
	ofstream g("evaluare.out");
	Citire();
	g<<EvaluareExpresie();
	return 0;}
void Citire()
{
	ifstream fin("evaluare.in");
	
	int NrS=0;
	fin.getline(e,200); lg=strlen(e);
	while(!fin.eof())
	{
		fin>>TS[NrS].ns>>TS[NrS].v;
		NrS++;
	}
fin.close();
}
int eval(char c)
{
	int k=0;
	if(c>='0'&&c<='9')
	{
		while(c>='0'&&c<='9')
		{k=k*10+(c-'0');
		i++;
		c=e[i];
		}
		i--;
		
		return k;
	}
	for(k=0;TS[k].ns!=c;k++);
	return TS[k].v;
}
int EvaluareFactor()
{
	int f=0;
	if(e[i]=='(')
	{
		i++;
		f=EvaluareExpresie();
		i++;
	}
	else
	{
		f=eval(e[i]);
		i++;
	}
	
	return f;
}
int EvaluareTermen()
{
	int f=EvaluareFactor();
	if(e[i]=='*')
	while(i<lg&&e[i]=='*')
	{
		i++;
		f*=EvaluareFactor();
	}
	if(e[i]=='/')
	while(i<lg&&e[i]=='/')
	{
		i++;
		f/=EvaluareFactor();
	}
	return f;
}
int EvaluareExpresie()
{
	int t=EvaluareTermen();
	if(e[i]=='+')
	while(i<lg&&e[i]=='+')
	{
		i++;
		t+=EvaluareTermen();
	}
	if(e[i]=='-')
		while(i<lg&&e[i]=='-')
	{
		i++;
		t-=EvaluareTermen();
	}
	return t;
}