Cod sursa(job #1000674)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 23 septembrie 2013 16:12:44
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

#define NMAX 100001

class Expresie {
	public :
		char c[NMAX],*p;
		Expresie ();
		long double evalueaza();
		long double termen();
		long double factor();
};

Expresie :: Expresie ()
{
	p=c;
}

long double Expresie :: evalueaza()
{
	long double r;
	r=termen();
	while(*p=='+' || *p=='-') 
		if(*p=='+') {
			p++;
			r=r+termen();
		}
		else {
			p++;
			r=r-termen();
		}
	return r;
}

long double Expresie :: termen()
{
	long double r;
	r=factor();
	while(*p=='*' || *p=='/') 
		if(*p=='*') {
			p++;
			r=r*factor();
		}
		else {
			p++;
			r=(int)(r/factor());
		}
	return r;
}

long double Expresie :: factor()
{
	long double r;
	if(*p=='(') {
		++p;
		r=evalueaza();
		++p;
	}
	else {
		r=0;
		while(*p>='0' && *p<='9') {
			r=r*10+(*p)-'0';
			p++;
		}
	}
	return r;
}

int main ()
{
	Expresie S;
	ifstream f("evaluare.in");
	ofstream g("evaluare.out");
	f>>S.c;
	f.close();
	g<<S.evalueaza();
	g.close();
	return 0;
}