Cod sursa(job #181142)

Utilizator paulDeac Adrian paul Data 17 aprilie 2008 21:49:36
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<stdio.h>
#include<ctype.h>

#define in "evaluare.in"
#define out "evaluare.out"

int i,j,b[100],ok;
char a[100],c;

void eval(char ch);

int main()
{
	freopen(in,"r",stdin);
	freopen(out,"w",stdout);
	i=1;
	while(scanf("%c",&c)!=EOF)
	{
		if((c=='(' || c=='+' || c=='-' || c=='*' || c=='/') && (i==1 || a[i]=='(' || a[i]=='*' || a[i]=='/'))
		{
			a[++i]=c;
			ok=0;
		}
		else if(isdigit(c))
		{
			if(ok)
				b[j]=b[j]*10+c-48;
			else
				b[++j]=c-48;
			ok=1;
		}
		else if(((c=='*' || c=='/') && (a[i]=='+' || a[i]=='-' || a[i]=='*' || a[i]=='/')) || ((a[i]=='*' || a[i]=='/') && (a[i]=='*' || a[i]=='/')))
		{
			while(((c=='*' || c=='/') && (a[i]=='+' || a[i]=='-' || a[i]=='*' || a[i]=='/')) || ((a[i]=='*' || a[i]=='/') && (a[i]=='*' || a[i]=='/')))
				eval(c);
			ok=0;
		}
		else if(c==')')
		{
			while(a[i]!='(')
			{
				eval(a[i]);
				i--;
			}
			i--;
			ok=0;
		}
	}
	while(i>1)
		eval(a[i--]);
	printf("%d\n",b[j]);
	return 0;
}
void eval(char ch)
{
	j--;
	if(ch=='+')
		b[j]=b[j]+b[j+1];
	else if(ch=='-')
		b[j]=b[j]-b[j+1];
	else if(ch=='*')
		b[j]=b[j]*b[j+1];
	else
		b[j]=b[j]/b[j+1];
}