Pagini recente » Cod sursa (job #76484) | Cod sursa (job #691924) | Cod sursa (job #2389460) | Cod sursa (job #2475945) | Cod sursa (job #2941864)
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int stivanr[100005];
char stivaop[100005];
char s[100005];
int knr,kop;
int prior[256];
int evaluare(int a,int b,char op)
{
if(op=='+')
return a+b;
else if (op=='-')
return a-b;
else if (op=='*')
return a*b;
else if (op=='/')
return a/b;
}
int main()
{
prior['(']=0;
prior['+']=1;
prior['-']=1;
prior['*']=2;
prior['/']=2;
fin>>s;
for(int i=0; s[i]!='\0'; i++)
{
if(s[i]=='(')
stivaop[++kop]='(';
else
{
if(s[i]==')')
{
while(stivaop[kop]!='(')
{
char op=stivaop[kop];
int a=stivanr[knr-1],b=stivanr[knr];
int rez=evaluare(a,b,op);
kop--;
knr--;
stivanr[knr]=rez;
}
kop--; /// elimin paranteza deschisa
}
else if(s[i]=='+'|| s[i]=='-' || s[i]=='*'|| s[i]=='/')
{
while(kop>0&&prior[s[i]]<=prior[stivaop[kop]])
{
char op=stivaop[kop];
int a=stivanr[knr-1],b=stivanr[knr];
int rez=evaluare(a,b,op);
kop--;
knr--;
stivanr[knr]=rez;
}
stivaop[++kop]=s[i];
}
else /// s[i]=cifra
{
int nr=0;
while(s[i]>='0'&&s[i]<='9')
{
nr=nr*10+s[i]-'0';
i++;
}
stivanr[++knr]=nr;
i--;
}
}
}
while(kop>0)
{
char op=stivaop[kop];
int a=stivanr[knr-1],b=stivanr[knr];
int rez=evaluare(a,b,op);
kop--;
knr--;
stivanr[knr]=rez;
}
fout<<stivanr[1];
}