Cod sursa(job #584508)

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

struct 
	{char ns; int v;} ts[dim];
	
	char e[dim];
	int i, lg;
	void citire();
	int evalex();
	int evalfact();
	int evaltermen();
	int main()
	{ ofstream g("evaluare.out");
	citire();
	
	g<<evalex();
	g<<"\n";
	g.close();
	return 0;
	}
	
	void citire()
	{
	//FILE *f=fopen("extresie.in","r"), *g=fopen("expresie.out","w");
	ifstream f("evaluare.in");
	int nrs=0;
	f.getline(e,dim);
lg=strlen(e);
while(!f.eof())
{f>>ts[nrs].ns>>ts[nrs].v;
nrs++;}
	f.close();
	}
	
	int eval(char c)
	{int k;
	if(c>='0'&&c<='9') return c-'0';
	for( k=0;ts[k].ns!=c;k++);
	return ts[k].v;
	}
	
	
	int evalfact()
	{
		
		
		int fin;
		if(e[i]=='(')
		{
		i++;
		fin=evalex();
		i++;}
		else
		{
		fin=eval(e[i]);
		i++;}
		return fin;
	}
	
	int evaltermen()
	{
	int fin=evalfact();
	while((i<lg)&&(e[i]=='*'))
	{
		i++;
		fin*=evalfact();
	}
	return fin;	
	
	}
	
	int evalex()
	{
		int t=evaltermen();
		while(i<lg&&e[i]=='+')
		{
		i++;
t+=evaltermen();		
		}
		return t;
	}