Cod sursa(job #290236)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 27 martie 2009 17:39:28
Problema Evaluarea unei expresii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<fstream.h>
#include<stdlib.h>
#include<string.h>

char s[100005],sir[100005],st[100005];

int v[100005],n,m,p,k,i;

int main()
{
ifstream f("evaluare.in");
f.get(s,1000);
n=strlen(s);
i=0;
p=0;
st[p]='=';
s[n]='=';
s[n+1]=0;
k=-1;
while (i<n)
	{
	if ((s[i]-'0'>=0) && (s[i]-'0'<=9) && (i<n))
		{
		while ((s[i]-'0'>=0) && (s[i]-'0'<=9) && (i<n))
			sir[++k]=s[i++];
		sir[++k]='|';
		}
	if (s[i]=='(')
		st[++p]=s[i++];
	if (s[i]==')')
		{
		while (st[p]!='(')
			sir[++k]=st[p--];
		p--;
		i++;
		}
	if (s[i]=='+' || s[i]=='-')
		{
		while (st[p]=='+' || st[p]=='-' || st[p]=='*' || st[p]=='/')
			sir[++k]=st[p--];
		st[++p]=s[i++];
		}
	if (s[i]=='*' || s[i]=='/')
		{
		while (st[p]=='*' || st[p]=='/')
			sir[++k]=st[p--];
		st[++p]=s[i++];
		}
	if (s[i]=='=')
		while (p>0)
			sir[++k]=st[p--];
	}
m=-1;
i=0;
n=-1;
while (i<=k)
	{
	if ((sir[i]-'0'>=0) && (sir[i]-'0'<=9))
		{
		while((sir[i]-'0'>=0) && (sir[i]-'0'<=9))
			s[++n]=sir[i++];
		s[n+1]=0;
		v[++m]=atoi(s);
		n=-1;
		}
	if (sir[i]=='+') { v[--m]=v[m]+v[m+1]; i++; }
	if (sir[i]=='-') {
			 v[--m]=v[m]-v[m+1];
			 i++;
			 }
	if (sir[i]=='*') { v[--m]=v[m]*v[m+1]; i++; }
	if (sir[i]=='/') { v[--m]=v[m]/v[m+1]; i++; }
	if (sir[i]=='|') i++;
	}
ofstream g("evaluare.out");
g<<v[m];
f.close();
g.close();
return 0;
}