Cod sursa(job #2065137)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 13 noiembrie 2017 14:48:50
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <string>
using namespace std;

int expresie (const string&, int&);
int termen (const string& , int&);
int factor (const string&, int&);

int expresie(const string& s, int& index)
{
	int ans = termen(s, index);
	int len = s.size();
	
	while(index < len && (s[index] == '+' || s[index] == '-'))
	{
		++index;
		if(s[index - 1] == '+')
		{
			ans += termen(s, index);
		}
		else
		{
			ans += termen(s, index);
		}
	}
	return ans;
}

int termen(const string& s, int& index)
{
	int len = s.size();
	int ans;
	
	ans = factor(s, index);
	while(index < len && (s[index] == '*' || s[index] == '/'))
	{
		++index;
		if(s[index - 1] == '*')
		{
			ans *= factor(s, index);
		}
		else
		{
			ans /= factor(s, index);
		}
	}
	return ans;
}

int factor(const string& s, int& index)
{
	int len = s.size();
	int ans;
	
	if(s[index] == '(')
	{
		++index;
		ans = expresie (s, index);
		++index;
	}
	else
	{
		ans = 0;	
		while(index < len && s[index] >= '0' && s[index] <= '9')
		{
			ans = 10 * ans + (s[index] - '0');
			++index;
		}
	}
	return ans;
}

int main()
{
	ifstream in("evaluare.in");
	ofstream out("ervaluare.out");
	
	string s;
	in >> s;
	int index = 0;
	out<< expresie(s, index) << "\n";
	in.close();
	out.close();
}