Pagini recente » Cod sursa (job #2804949) | Cod sursa (job #1196052) | Cod sursa (job #1809853) | Cod sursa (job #413720) | Cod sursa (job #153369)
Cod sursa(job #153369)
#include <stdio.h>
#include <string.h>
char s[100003],c;
struct trm
{
long val;
int tip;
};
trm t[100000];
long ns,niv,st[1000],nst;
int pri(char c)
{
if (c=='*'||c=='/')
return 2;
if (c=='(')
return 0;
return 1;
}
int main()
{
freopen("evaluare.in","r",stdin);
freopen("evaluare.out","w",stdout);
scanf("%c",&c);
long i;
while (c!='\n')
{
long nr=0;
if (c>='0'&&c<='9')
{
while (c>='0'&&c<='9')
{
nr=nr*10+c-'0';
scanf("%c",&c);
}
t[niv].val=nr;
t[niv].tip=0;
niv++;
}
if ((c<'0'||c>'9')&&c!=')'&&c!='\n')
{
while (ns&&pri(s[ns-1])>=pri(c))
{
ns--;
switch (s[ns])
{
case '+':t[niv].val=1;break;
case '-':t[niv].val=2;break;
case '*':t[niv].val=3;break;
case '/':t[niv].val=4;break;
}
t[niv].tip=1;
niv++;
}
s[ns]=c;
ns++;
}
if (c==')')
{
while (s[ns-1]!='(')
{
ns--;
switch (s[ns])
{
case '+':t[niv].val=1;break;
case '-':t[niv].val=2;break;
case '*':t[niv].val=3;break;
case '/':t[niv].val=4;break;
}
t[niv].tip=1;
niv++;
}
ns--;
}
scanf("%c",&c);
}
while (ns)
{
ns--;
switch (s[ns])
{
case '+':t[niv].val=1;break;
case '-':t[niv].val=2;break;
case '*':t[niv].val=3;break;
case '/':t[niv].val=4;break;
}
t[niv].tip=1;
niv++;
}
for (i=0;i<niv;i++)
if (t[i].tip==0)
{
st[nst]=t[i].val;
nst++;
}
else
{
nst--;
switch (t[i].val)
{
case 1:st[nst-1]=st[nst-1]+st[nst];break;
case 2:st[nst-1]=st[nst-1]-st[nst];break;
case 3:st[nst-1]=st[nst-1]*st[nst];break;
case 4:st[nst-1]=st[nst-1]/st[nst];break;
}
}
printf("%ld\n",st[0]);
return 0;
}