Pagini recente » Cod sursa (job #332007) | Cod sursa (job #598875) | Cod sursa (job #1390442) | Cod sursa (job #2765164) | Cod sursa (job #682657)
Cod sursa(job #682657)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
int st[100],v[100],k=0,vf=0,st1[100],vf1=0,i,m,a;
char s[100];
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
fscanf(f,"%s",&s);
for(i=0;i<strlen(s);i++)
{
if(isdigit(s[i]))
{
m=0;
while(isdigit(s[i]))
{
m=m*10+(s[i]-'0');
i++;
}
i--;
v[++k]=m;
}
if(s[i]=='(')st[++vf]=-5;
if(s[i]=='+'||s[i]=='-')
{
if(st[vf]==-1||st[vf]==-4)
{
if(s[i]=='+')
{
if(st[vf]==-1)a=-1;
else a=-4;
while(st[vf]==a)
{
v[++k]=a;
vf--;
}
st[vf]=-2;
}
else
{
if(st[vf]==-1)a=-1;
else a=-4;
while(st[vf]==a)
{
v[++k]=a;
vf--;
}
st[vf]=-3;
}
}
else
{
if(s[i]=='+')a=-2;
else a=-3;
st[++vf]=a;
}
}
if(s[i]=='*')st[++vf]=-1;
if(s[i]=='/')st[++vf]=-4;
if(s[i]==')')
{
while(st[vf]!=-5)
{
v[++k]=st[vf];
vf--;
}
vf--;
}
}
for(i=vf;i>=1;i--)v[++k]=st[i];
if(st[0]<0)v[++k]=st[i];
for(i=1;i<=k;i++)
{
if(v[i]>=0)st1[++vf1]=v[i];
else
{
if(v[i]==-1){m=st1[vf1]*st1[vf1-1];vf1--;st1[vf1]=m;}
if(v[i]==-2){m=st1[vf1]+st1[vf1-1];vf1--;st1[vf1]=m;}
if(v[i]==-3){m=st1[vf1-1]-st1[vf1];vf1--;st1[vf1]=m;}
if(v[i]==-4){m=st1[vf1-1]/st1[vf1];vf1--;st1[vf1]=m;}
}
}
fprintf(g,"%d",st1[vf1]);
}