Cod sursa(job #1252006)

Utilizator alexsimi66FMI Simandi Alexandru alexsimi66 Data 30 octombrie 2014 10:43:42
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<iostream>
#include<fstream>

using namespace std;

char s[100003], *p;

//eval calculeaza valoarea unei adunari sau scaderi
//termen calculeaza valoarea unui sir de inmultiri si impartiri
//factor evalueaza parantezele

int eval();
int termen();
int factor();


int main(){

	ifstream fin("evaluare.in");

	fin.getline(s, 100003);

	fin.close();

	p = s;

	int n;

	ofstream fout("evaluare.out");

	n = eval();

	fout << n;

	fout.close();


	return 0;
}

int eval(){
	int rezultat;



	rezultat = termen();

	while (*p == '+' || *p == '-'){
		switch (*p){
		case '+':{
					 ++p;
					 rezultat += termen();
					 break;
		}

		case '-':{
					 ++p;
					 rezultat -= termen();
					 break;

		}
		}
	}

	return rezultat;

}

int termen(){
	int rezultat;

	rezultat = factor();
	while (*p == '*' || *p == '/'){
		switch (*p){
		case '*':{
					 ++p;
					 rezultat *= factor();
					 break;
		}

		case '/':{
					 ++p;
					 rezultat /= factor();
					 break;

		}
		}
	}

	return rezultat;
}

int factor(){
	int rezultat;

	rezultat = 0;
	if (*p == '('){
		++p;
		rezultat = eval();
		++p;
	}

	else {
		while ('0' <= *p && *p <= 9){
			rezultat *= 10;
			rezultat += (int)*p - '0';
			++p;
		}
	}

	return rezultat;
}