Cod sursa(job #1750617)

Utilizator dtoniucDaniel Toniuc dtoniuc Data 30 august 2016 16:35:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>

#define MAX_LEN 100001
using namespace std;

void ReadInput(char* string);
int eval(char **current);
int termen(char **current);
int factor(char **current);

int main()
{
	char string[100001];
	char* p = string;
	ReadInput(string);

	int result = eval(&p);

	ofstream fout;
	fout.open("evaluare.out");
	fout << result;

	return 0;
}

void ReadInput(char* string)
{
	ifstream fin;
	fin.open("evaluare.in");

	fin >> string;

	fin.close();
}

int eval(char **current)
{
	int result = termen(current);
	while(**current == '+' || **current == '-')
	{
		switch(**current)
		{
			case '+' :
				(*current)++;
				result += termen(current);
				break;
			case '-':
				(*current)++;
				result -= termen(current);
				break;
			default :
				exit(1);
		}
	}

	return result;
}

int termen(char **current)
{
	int result = factor(current);
	while(**current == '*' || **current == '/')
	{
		switch(**current)
		{
			case '*' :
				(*current)++;
				result *= factor(current);
				break;
			case '/':
				(*current)++;
				result /= factor(current);
				break;
			default :
				exit(1);
		}
	}

	return result;
}

int factor(char **current)
{
	int result = 0;

	if(**current == '(')
	{
		(*current)++;
		result = eval(current);
		(*current)++;
	}
	else
	{
		while(**current >= '0' && **current <= '9')
		{
			result = result * 10 + (**current - '0');
			(*current)++;
		}
	}

	return result;
}