Pagini recente » Cod sursa (job #1828521) | Cod sursa (job #1027970) | Cod sursa (job #1877994) | Cod sursa (job #1946628) | Cod sursa (job #1179821)
#include <iostream>
#include <fstream>
#include <stack>
#include <cctype>
using namespace std;
stack<int> val;
stack<char> op;
inline int prec(char o){
switch(o){
case '*':return 2;
case '/':return 2;
case '-':return 1;
case '+':return 1;
case '(':return 0;
}
return 0;
}
inline int eval(){
int b=val.top();val.pop();
int a=val.top();val.pop();
char o=op.top();op.pop();
switch(o){
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
}
return 0;
}
int main(){
ifstream ifs("evaluare.in");
ofstream ofs("evaluare.out");
while(ifs.good()){
if(isdigit(ifs.peek())){
int ibuf;
ifs>>ibuf;
val.push(ibuf);
}
else{
char cbuf;
ifs>>cbuf;
if(ifs.eof()) break;
if(cbuf=='(')
op.push('(');
else if(cbuf==')'){
while(op.top()!='(')
val.push(eval());
op.pop();
}
else{
if(!op.empty())
while(prec(cbuf)<=prec(op.top())){
val.push(eval());
if(op.empty()) break;
}
op.push(cbuf);
}
}
}
while(!op.empty())
val.push(eval());
ofs<<val.top()<<"\n";
}