Pagini recente » Cod sursa (job #614570) | Cod sursa (job #2740253) | Cod sursa (job #1239439) | Cod sursa (job #1606176) | Cod sursa (job #1091168)
#include <fstream>
#include <cstring>
#include <stack>
#define NMAX 10005
using namespace std;
//forma poloneza
FILE* f=freopen("evaluare.in","r",stdin);
FILE* o=freopen("evaluare.out","w",stdout);
stack<char> op;
stack<int> num;
char sign[]="*/-+",l1[]="/*";
void Evaluate(char sym)
{
int a=num.top(); num.pop();
int b=num.top(); num.pop();
switch(sym)
{
case '+': num.push(b+a); break;
case '-': num.push(b-a); break;
case '*': num.push(b*a); break;
case '/': num.push(b/a); break;
}
}
int main()
{
char c;
scanf(" %c",&c);
while(c!='\n')
{
int n=0;
switch(c)
{
case '(':
op.push(c);
break;
case '*':
if(!op.empty()&&strchr(l1,op.top()))
{
Evaluate(op.top());
op.pop();
}
op.push(c);
break;
case '/':
if(!op.empty()&&strchr(l1,op.top()))
{
Evaluate(op.top());
op.pop();
}
op.push(c);
break;
case '+':
if(!op.empty()&&strchr(sign,op.top()))
{
Evaluate(op.top());
op.pop();
}
op.push(c);
break;
case '-':
if(!op.empty()&&strchr(sign,op.top()))
{
Evaluate(op.top());
op.pop();
}
op.push(c);
break;
case ')':
while(op.top()!='(')
{
Evaluate(op.top());
op.pop();
}
op.pop();
break;
default :
while(c>='0'&&c<='9')
{
n=n*10+(c-'0');
scanf("%c",&c);
}
num.push(n);
break;
}
if(n) n=0;
else scanf("%c",&c);
}
while(!op.empty())
{
Evaluate(op.top());
op.pop();
}
printf("%d",num.top());
return 0;
}