Pagini recente » Cod sursa (job #268490) | Cod sursa (job #2082570) | Cod sursa (job #116829) | Cod sursa (job #2342289) | Cod sursa (job #1460002)
#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 el();
int eval(int k){
cout << "eval " << k << '\n';
cin.get();
switch(*c){
case '+': return adunare(k);
case '-': return adunare(k);
case '(':{
c++;
}
case ')':{
c++;
return k;
}
case '\0': return k;
default : cout << "ERROR !!!\n";
}
}
int el(){
if(*c == '('){
c++;
return eval(el());
}else{
if(*(c+1) == '*'){
int m = cifra();
c++;
return m*el();
}else
if(*(c+1) == '/'){
int m = cifra();
c++;
return m/el();
}
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){
cout << "adunare\n";
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;
}