Cod sursa(job #156138)

Utilizator andr33aradu ioana andr33a Data 12 martie 2008 13:05:54
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
ifstream f("evaluare.in");
ofstream g("evaluare.out");
long exp[100000];
int i,j,p[250],x,y,n;
char s1[100],s[100050],st[100000];
void operatie(int x,char c)
{
	if(c=='+')
		exp[x-1]=exp[x]+exp[x-1];
	else
		if(c=='-')
			exp[x-1]=exp[x-1]-exp[x];
		else
			if(c=='*')
				exp[x-1]=exp[x]*exp[x-1];
			else
					exp[x-1]=exp[x-1]/exp[x];
}
int main()
{
	f.getline(s,1000);
	i=0;y=0;x=0;
	n=strlen(s);
	p['(']=0;p[')']=0;
	p['+']=1;p['-']=1;
	p['*']=2;p['/']=2;
	while(i<=n)
	{
 		if(s[i]>='0'&&s[i]<='9')
		{
			j=0;
			s1[j]=s[i];
			j++;  i++;
			while(s[i]>='0'&&s[i]<='9')
			{
				s1[j]=s[i];
				j++;i++;
			}
			s1[j]=NULL;
			exp[++x]=atol(s1);
			strcpy(s1,NULL);
		}
		else
		{
			if(s[i]!=')'&&s[i]!='(')
			{	j=y-1;
				while(st[j]!='('&&j>=0)
				{
					if(p[st[j]]>=p[s[i]])
					{
						operatie(x,st[j]);
						y--;x--;
					}
					j--;
				}
				st[y++]=s[i];
				i++;
			}
			else
			if(s[i]==')')
			{
				j=y-1;
				while(st[j]!='(')
				{
					operatie(x,st[j]);
					j--; x--;y--;
				}
				y--;
				i++;
			}
			else
			{
				st[y++]=s[i];
				i++;
			}
		}
	}
        operatie(x,st[0]);
	g<<exp[1];
f.close();
g.close();
return 0;
}