Cod sursa(job #1460244)

Utilizator valentin50517Vozian Valentin valentin50517 Data 11 iulie 2015 22:47:31
Problema Evaluarea unei expresii Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

string S;
int poz;

int adunare(int i,int k);
int scadere(int i,int k);
int inmultire(int i,int k);
int impartire(int i,int k);
int eval(int k){
	switch(S[poz]){
		case '+' : return eval(adunare(poz+1,k));
		case '-' : return eval(scadere(poz+1,k));
		case '*' : return eval(inmultire(poz+1,k));
		case '/' : return eval(impartire(poz+1,k));
		case '\0': return k;
		case ')' :{
			poz++;
			return k;		
		}		 
	}
}

int cifr(int i){
	if(S[i] == '(') return eval(cifr(i+1));
		int rs = 0;
		for(; int(S[i]) >= 48 && int(S[i]) <= 57;i++){
			rs*=10;
			rs+=int(S[i]) - 48;
		} 
		poz = i;
		return 	rs;
}

int adunare(int i,int k){
	int m = cifr(i);
	if(S[poz] == '*' || S[poz]== '/') return k+eval(m);
	else
	return k+m;
}
int scadere(int i,int k){
	int m = cifr(i);
	if(S[poz] == '*' || S[poz]== '/') return k-eval(m);
	else
	return k-m;
}
int inmultire(int i,int k){
	return k*cifr(i);	
}
int impartire(int i,int k){
	return k/cifr(i);
}


int main(){
	getline(fin,S);
	fout << eval(cifr(0));
	return 0;
}