Cod sursa(job #449166)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 5 mai 2010 20:31:42
Problema Evaluarea unei expresii Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char s[1009];
int val[30],pos;

void citire();
int eval_exp(int&);
int eval_termen(int&);
int eval_factor(int&);

int main()
{
	citire();
	g<<eval_exp(pos);
	f.close();
	g.close();
	return 0;
}

int eval_factor(int &pos)
{
	int v=0;
	if (s[pos]>='a'&&s[pos]<='z')
	{
		v=val[s[pos]-'a'+1];
		++pos;
		return v;
	}
	if (s[pos]>='0'&&s[pos]<='9')
	{
		while (s[pos]>='0'&&s[pos]<='9')
		{
			v=v*10+(s[pos]-'0');
			++pos;
		}
	return v;
	}
	++pos;
	v=eval_exp(pos);
	++pos;
	return v;
}
	
int eval_termen(int &pos)
{
	int f1=eval_factor(pos),f2;
	if (s[pos]=='*')
		while (s[pos]=='*')
		{
			++pos;
			f2=eval_factor(pos);
			f1*=f2;
		}
	if (s[pos]=='/')
		while (s[pos]=='/')
		{
			++pos;
			f2=eval_factor(pos);
			f1/=f2;
		}			
	return f1;
}

int eval_exp(int &pos)
{
	int t1=eval_termen(pos),t2;
	if(s[pos]=='+')
		while (s[pos]=='+')
		{
			++pos;
			t2=eval_termen(pos);
			t1+=t2;
		}
	if(s[pos]=='-')
		while (s[pos]=='-')
		{
			++pos;
			t2=eval_termen(pos);
			t1-=t2;
		}
	return t1;
}


void citire()
{
	char x;
	int v,pos;
	f.getline(s,1000);
	while (f.get(x))
	{
		f.get();
		f>>v;
		f.get();
		pos=x-'a'+1;
		val[pos]=v;
	}
}