Pagini recente » Cod sursa (job #1490351) | Cod sursa (job #943094) | Cod sursa (job #482394) | Cod sursa (job #2740417) | Cod sursa (job #1460244)
#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;
}