Cod sursa(job #683377)

Utilizator ivonaChili Ivona Alexandra ivona Data 20 februarie 2012 16:10:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int st[100001],v[100001],k=0,vf=0,st1[100001],vf1=0,i,m,a,ok=0;
char c;
int main()
{
	
	FILE *f=fopen("evaluare.in","r");
	FILE *g=fopen("evaluare.out","w");
	while(!feof(f))
	{
		fscanf(f,"%c",&c);
		if(c>='0'&&c<='9')
		{
			m=m*10+c-'0';ok=1;
		}
		else
		{
			if(ok==1)
			{			
			v[++k]=m;
			m=0;
			ok=0;
			}
		if(c=='(')st[++vf]=-5;
		if(c=='+'||c=='-')
		{
			while((vf>0) && (st[vf]==-1||st[vf]==-4||st[vf]==-2||st[vf]==-3))
			{
				v[++k]=st[vf];
				vf--;
			}
			if(c=='+')a=-2;
			else a=-3;
			st[++vf]=a;
		}
		if(c=='*'){while(vf>0&&(st[vf]==-1||st[vf]==-4)){v[++k]=st[vf];vf--;}st[++vf]=-1;}
		if(c=='/'){while(vf>0&&(st[vf]==-1||st[vf]==-4)){v[++k]=st[vf];vf--;}st[++vf]=-4;}
		if(c==')')
		{
			while(vf>0 && st[vf]!=-5)
			{
				v[++k]=st[vf];
				vf--;
			}
			vf--;
		}
		}
	}
	for(i=vf;i>=1;i--)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]);
	fclose(f);
	fclose(g);
}