Cod sursa(job #1263798)

Utilizator LegionHagiu Stefan Legion Data 15 noiembrie 2014 10:03:32
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string s;
int p = 0;
ofstream out("evaluare.out");
int evalueaza();
int numar();
int inamulteste();
int aduna();
int numar()
{
	int r=0;
	while (s[p] >= '0' && s[p] <= '9')
	{
		r = r * 10 + s[p] - 48;
		p++;
	}
	if (r == 0){ return 1; }
	return r;
}
int inmulteste()
{
	int r=1;
	r = numar();
	while (s[p] == '(' || s[p] == '*' || s[p] == '/')
	{
		if (s[p] == '(')
		{
			p++;
			r *= evalueaza();
		}
		if (s[p] == '*')
		{
			p++;
			r *=numar();
		}
		if (s[p] == '/')
		{
			p++;
			r /= numar();
		}
	}
	return r;
}
int aduna()
{
	int r;
	r = inmulteste();
	while (s[p] == '+' || s[p] == '-')
	{
		if (s[p] == '+')
		{
			p++;
			r += inmulteste();
		}
		if (s[p] == '-')
		{
			p++;
			r -= inmulteste();
		}
	}
	return r;
}
int evalueaza()
{
	int r;
	r = aduna();
	if (s[p] == ')'){ p++; return r; }
	return r;
}
int main()
{
	ifstream in("evaluare.in");
	in >> s;
	out<<evalueaza();
}