Pagini recente » Cod sursa (job #2551586) | Cod sursa (job #3259587) | Cod sursa (job #1404193) | Cod sursa (job #575969) | Cod sursa (job #197057)
Cod sursa(job #197057)
#include <stdio.h>
#include <string.h>
#define dim 105
char s[dim],s2[dim];
char oper[dim],polon[dim];
int polon2[dim],s3[dim];
int n,u,v,m;
int sol[dim];
void poloneza ()
{
int i,nr;
gets(s);
n=strlen (s);
for (i=0; i<dim; ++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];
}
void calculeaza ()
{
int i,j, k ;
for (i=1, k = 0; i<=u; ++i)
if (polon[i]!='+' && polon[i]!='-' && polon[i]!='*' && polon[i]!='/')
sol[++k]=polon2[i];
else
{ sol[k-1]=calcul(polon[i],k+1);
--k;
}
/* 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;
}