Pagini recente » Borderou de evaluare (job #2023151) | Cod sursa (job #2168073) | Cod sursa (job #2164716) | UltraDP (si altele) | Cod sursa (job #1989365)
#include<fstream>
using namespace std;
long multiplicationDivision(int &w, string expr);
long term(int &w, string expr);
long ev(int &w,string expr){ //addition & subtraction
long r=multiplicationDivision(w,expr);
while(expr[w]=='+' || expr[w]=='-'){
switch(expr[w]){
case'+': {++w; r+=multiplicationDivision(w,expr); break;}
case'-': {++w; r-=multiplicationDivision(w,expr); break;}
}
}
return r;
}
long multiplicationDivision(int &w, string expr){
long r=term(w,expr);
while(expr[w]=='*' || expr[w]=='/'){
switch(expr[w]){
case '*': { ++w; r*=term(w,expr); break;}
case '/': { ++w; r/=term(w,expr); break;}
default: break;
}
}
return r;
}
long term(int &w,string expr){
long r=0;
if(expr[w]=='('){
++w;
r=ev(w,expr);
++w;
}
else
while(expr[w]<='9' && expr[w]>='0'){
r=r*10+expr[w]-'0';
w++;
}
return r;
}
int main(){
ifstream in; ofstream out;
in.open("evaluare.in"); out.open("evaluare.out");
out.clear();
string expr;
in>>expr;
int w=0;
out<<ev(w,expr);
in.close(); out.close();
return 0;
}