Cod sursa(job #631230)

Utilizator vlcmodanModan Valentin vlcmodan Data 7 noiembrie 2011 14:51:25
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 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()
{
	Citire();
	cout<<"Valoarea expresiei este: "<<EvaluareExpresie();
	return 0;}
void Citire()
{
	ifstream fin("expres.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')
		return c-'0';
	for(k=0;TS[k].ns!=c;k++);
	return TS[k].v;
}
int EvaluareFactor()
{
	int f;
	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;
}