Cod sursa(job #627946)

Utilizator vlcmodanModan Valentin vlcmodan Data 31 octombrie 2011 00:09:56
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.86 kb
#include<fstream.h>
using namespace std;
int a[100001],b[10001],d[100001],i,j,n,nr=1,li,lf,num,nu,ns,u,s,iv;
char c;
void inlocuire(int s,int li,int ln)
{
	int y=0,u1=0,t=1;
	y=s;
	while(y!=0)
		{
			u1++;
			y/=10;
			t*=10;
			}
	for(i=1;i<=u1;i++)
	{
		y=s;
		y=(y%t)/(t/10);
		t/=10;
		c=y;
		a[li+i-1]=c+48;
	}
t=lf-(u1+li)+1;
	for(i=u1+li;i<=n;i++)
		{
			c=a[t+i];
			a[i]=c;
		}

}
	
void inmultiri(int &nu,int &s)
{
	for(i=1;i<nu;i++)
	{
		if(d[i]==42)
		{
			b[i+1]=b[i]*b[i+1];
			for(u=i;u<nu;u++)
			{
				b[u]=b[u+1];
				d[u]=d[u+1];
			}
			d[nu]=0;
			nu--;
			i=0;
		}
		else
		if(d[i]==47)
		{
			b[i+1]=b[i]/b[i+1];
			for(u=i;u<nu;u++)
			{
				b[u]=b[u+1];
				d[u]=d[u+1];
			}
			d[nu]=0;
			nu--;
			i=0;
		}
		
	}
	for(i=1;i<nu;i++)
	{
		if(d[i]==43)
		{
			b[i+1]=b[i]+b[i+1];
			for(u=i;u<nu;u++)
			{
				b[u]=b[u+1];
				d[u]=d[u+1];
			}
			d[nu]=0;
			nu--;
			i=0;
		}
		if(d[i]==45)
		{
			b[i+1]=b[i]-b[i+1];
			for(u=i;u<nu;u++)
			{
				b[u]=b[u+1];
				d[u]=d[u+1];
			}
			d[nu]=0;
			nu--;
			i=0;
		}
	}
	s=b[1];
}
void transforma(int &li,int &lf)
{
	i=li;
	nu=0;
	
	while(i<=lf)
	{
		num=0;
		if(a[i]>=48&&a[i]<=57)
		{while(a[i]>=48&&a[i]<=57)
		{
			num=num*10+a[i]-48;
			i++;
		}
		b[++nu]=num;}
		
		d[nu]=a[i++];
	}
}
		
		
	
void paranteze(int &li,int &lf)
{
	i=1;
	li=0;
	lf=0;
	while((li==0||lf==0)&&i<=n)
		{if(a[i]==41)
				lf=i;
		else
		if(a[i]==40)
				li=i;
		i++;
		}
	if(i>n)
{li=1;
lf=n;}
}
		
int main()
{
	ifstream f("evaluare.in");
	ofstream g("evaluare.out");
	while(f>>c)
		{
			if(c=='(')
				nr++;
			a[++n]=c;
	}
for(iv=1;iv<=nr;iv++)
{
	paranteze(li,lf);
	transforma(li,lf);
	inmultiri(nu,s);
	inlocuire(s,li,lf);
	li=1;
	while(a[li]!=0)
		li++;
	li--;
	n=li;
}
g<<b[1];
return 0;}