Pagini recente » Cod sursa (job #3128353) | Cod sursa (job #3240060) | Cod sursa (job #3225139) | Cod sursa (job #2850366) | Cod sursa (job #196559)
Cod sursa(job #196559)
#include <stdio.h>
#include <string.h>
char s[100005],s2[100005];
char oper[1005],polon[100005];
int polon2[100005],s3[100005];
int n,u,v,m;
int sol[1005];
void poloneza ()
{
int i,nr;
gets(s);
n=strlen (s);
for (i=0; i<1005; ++i)
s3[i]=-1;
for (i=0; i<n; )
if (s[i]>='0' && s[i]<='9')
{
nr=0;
while (s[i]>='0' && s[i]<='9')
nr=nr*10+s[i++]-'0';
s3[m++]=nr;
}
else
s2[m++]=s[i++];
for (i=0; i<m; ++i)
if (s3[i]!=-1)
polon2[++u]=s3[i];
else if (s2[i]=='+' || s2[i]=='-' || s2[i]=='*' || s2[i]=='/' || s2[i]=='(' || s2[i]==')')
{
if (v==0)
oper[++v]=s2[i];
else
{
if ((s2[i]=='+' || s2[i]=='-') && (oper[v]=='*' || oper[v]=='/'))
{
while (oper[v]=='*' || oper[v]=='/')
polon[++u]=oper[v--];
oper[++v]=s2[i];
}
else if (s2[i]==')')
{
while (oper[v]!='(')
polon[++u]=oper[v--];
--v;
}
else
oper[++v]=s2[i];
}
}
for (i=v; i; --i)
polon[++u]=oper[i];
}
int calcul (char val,int i)
{
if (val=='+')
return sol[i-2]+sol[i-1];
if (val=='-')
return sol[i-2]-sol[i-1];
if (val=='*')
return sol[i-2]*sol[i-1];
if (val=='/')
return sol[i-2]/sol[i-1];
return 0;
}
void calculeaza ()
{
int i,j;
for (i=1; i<=u; ++i)
if (polon[i]!='+' && polon[i]!='-' && polon[i]!='*' && polon[i]!='/')
sol[i]=polon2[i];
for (i=1; i<=u; ++i)
if (polon[i]=='+' || polon[i]=='-' || polon[i]=='*' || polon[i]=='/')
{
sol[i-2]=calcul(polon[i],i);
for (j=i-1; j<u-1; ++j)
{
polon[j]=polon[j+2];
polon2[j]=polon2[j+2];
sol[j]=sol[j+2];
}
u-=2;
i-=2;
}
printf ("%d",sol[1]);
}
int main ()
{
freopen ("evaluare.in","r",stdin);
freopen ("evaluare.out","w",stdout);
poloneza ();
calculeaza ();
return 0;
}