Pagini recente » Cod sursa (job #1406366) | Cod sursa (job #1669475) | Cod sursa (job #2819656) | Cod sursa (job #1584351) | Cod sursa (job #2840377)
#include <fstream>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
const int NMAX=10;
int tpop,tpnr;
int nr[NMAX+5];
char op[NMAX+5];
int prior(int c)
{
switch(c)
{
case '+':
case '-':return 1;
case '*':return 2;
case '/':return 3;
}
return 0;
}
int main()
{
int k=0,ok=0,a,b;
long long x=0;
char ch,oper;
while(in.get(ch))
{
if(ch>='0' && ch<='9')
{
x=x*10+(ch-'0');
ok=1;
}
else
{
if(ok==1)
{
nr[++tpnr]=x;
x=0;
ok=0;
}
if(ch=='(')
op[++tpop]=ch;
else if(ch==')')
{
while(op[tpop]!='(')
{
oper=op[tpop];
a=nr[tpnr-1];
b=nr[tpnr];
switch(oper)
{
case '+':nr[tpnr-1]=a+b;break;
case '-':nr[tpnr-1]=a-b;break;
case '*':nr[tpnr-1]=a*b;break;
case '/':nr[tpnr-1]=a/b;break;
}
tpop--;
tpnr--;
}
tpop--;
}
else
{
if(tpop==0 || op[tpop]=='(' || prior(ch)>prior(op[tpop]))
op[++tpop]=ch;
else
{
while(tpop!=0 && prior(op[tpop])>=prior(ch))
{
oper=op[tpop];
tpop--;
a=nr[tpnr-1];
b=nr[tpnr];
switch(oper)
{
case '+':nr[tpnr-1]=a+b;break;
case '-':nr[tpnr-1]=a-b;break;
case '*':nr[tpnr-1]=a*b;break;
case '/':nr[tpnr-1]=a/b;break;
}
tpnr--;
}
op[++tpop]=ch;
}
}
}
}
while(tpop!=0 && op[tpop]!='\n')
{
oper=op[tpop];
tpop--;
a=nr[tpnr-1];
b=nr[tpnr];
switch(oper)
{
case '+':nr[tpnr-1]=a+b;break;
case '-':nr[tpnr-1]=a-b;break;
case '*':nr[tpnr-1]=a*b;break;
case '/':nr[tpnr-1]=a/b;break;
}
tpnr--;
}
out<<nr[tpnr];
return 0;
}