Cod sursa(job #1459635)

Utilizator valentin50517Vozian Valentin valentin50517 Data 10 iulie 2015 14:03:21
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

char* c;
string s;
int cif,rs;
int adunare(int k);
int parti(int k);
int cifra();

int eval(int k){
	switch(*c){
		case '+': return adunare(k);
		case '-': return adunare(k);
		case '*': return parti(k);
		case '/': return parti(k);
		case '\0': return k;
		case ')':{
					c++;
					return k;
				}
		default : return eval(cifra());
	}
}

int el(){
	switch(*c){
		case '(':{
				  c++;
				  return eval(el());
		}
		default : return cifra();
	}
}

int cifra(){
	cif = 0;
	for( ; int(*c)>=48 && int(*c) <= 57; c++){
		cif*=10;
		cif+=int(*c) - 48;
	}
	return cif;
}


int adunare(int k){
	if(*c == '+'){
		c++;
		return k + eval(0);
	}
	else{
		c++;
		return k - eval(0);
	}
}

int parti(int k){
	if(*c == '*'){
		c++;
		return eval(k*el());
	}
	else{
		c++;
		return eval(k/el());
	}
}


int main(){
	getline(fin,s);
	c = &s[0];
	fout << eval(el());
	return 0;
}