Cod sursa(job #683171)

Utilizator BabutaRaresBabuta Rares Mihai BabutaRares Data 20 februarie 2012 09:10:31
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<stdio.h>
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
int main()
{
	int st1[100000],st2[100000],v[100000],vf1=0,vf2=0,i,j,k=0,x=0,k1=0,ok=0;	
	char nr[9],c;	
	while(!feof(f))
	{
		fscanf(f,"%c",&c);
		if(c>='0'&&c<='9')
		{
			x=x*10+c-'0';ok=1;
		}
		else
		{
			if(ok==1)
			{			
			v[++k1]=x;
			x=0;
			ok=0;
			}
			if(c=='*')
			{
				while(st1[vf1]==-1||st1[vf1]==-2)
					v[++k1]=st1[vf1--];
				st1[++vf1]=-1;
			}
			if(c=='/')
			{
				while(st1[vf1]==-1||st1[vf1]==-2)
					v[++k1]=st1[vf1--];
				st1[++vf1]=-2;
			}
			if(c=='(')
				st1[++vf1]=-5;
			if(c=='+'||c=='-')
			{
				while((vf1>0)&&(st1[vf1]==-2||st1[vf1]==-1||st1[vf1]==-3||st1[vf1]==-4))
				{
					v[++k1]=st1[vf1--];
				}
				if(c=='+')
					st1[++vf1]=-3;
				else
					st1[++vf1]=-4;
			}
			if(c==')')
			{
				while((vf1>0)&&st1[vf1]!=-5)
					v[++k1]=st1[vf1--];
				vf1--;
			}
		}
	}
	
	while(vf1!=0)
		v[++k1]=st1[vf1--];
	for(i=1;i<=k1;i++)
	{
		if(v[i]>=0)
			st2[++vf2]=v[i];
		else
		{
			if(v[i]==-1)
				st2[vf2-1]=st2[vf2-1]*st2[vf2];
			if(v[i]==-2)
				st2[vf2-1]=st2[vf2-1]/st2[vf2];
			if(v[i]==-3)
				st2[vf2-1]=st2[vf2-1]+st2[vf2];
			if(v[i]==-4)
				st2[vf2-1]=st2[vf2-1]-st2[vf2];
			vf2--;}

		}
		fprintf(g,"%d",st2[1]);
}