Cod sursa(job #300271)

Utilizator adasarcaAda Sarca adasarca Data 7 aprilie 2009 12:35:06
Problema Bool Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include<fstream.h>
#include<string.h>
#define AND 3
#define OR 2
#define NOT 4
#define TRUE 1
#define FALSE 0
char a1[1010],a2[1010],a3[1010],val[100],s[105];
int n2,n3,m;
int op[1000];
int main()
{
 ifstream f("bool.in"); ofstream g("bool.out");
 int i,pr,t=0,n,j;
 char item[10];
 val['Z'+2]=1;
 f.get(a1,1000);
 f>>m;
 f>>s;
 n2=-1;n3=-1;
 for(i=0;a1[i];i++)
 {
  if(a1[i]=='(') a2[++n2]=a1[i];
  if(a1[i]==')')
  {
	while (a2[n2]!='(')
	 a3[++n3]=a2[n2--];
	n2--;
  }
  if(a1[i]>='A'&&a1[i]<='Z')
  {
	while(a1[i]>='A'&&a1[i]<='Z')
	 item[t++]=a1[i++];
	item[t]=0; i--;
	if(t==1) a3[++n3]=item[0];
	else
	      if(strcmp(item,"TRUE")==0||strcmp(item,"FALSE")==0)
	      {
		if(strcmp(item,"TRUE")==0) a3[++n3]='Z'+2;

		if(strcmp(item,"FALSE")) a3[++n3]='Z'+1;
	      }
		else
		{
			if(strcmp(item,"AND")==0) pr=AND;
			if(strcmp(item,"OR")==0) pr=OR;
			if(strcmp(item,"NOT")==0) pr=NOT;
			while(a2[n2]>=pr&&n2>=0&&a2[n2]!='(')
			{
				a3[++n3]=a2[n2--];
			}
			a2[++n2]=pr;
		}
   t=0;
  }
 }
 while(n2>=0)
  a3[++n3]=a2[n2--];
 n=-1;
for(j=0;j<m;j++)
{
 n=-1;
 if(val[s[j]]==0) val[s[j]]=1;
  else val[s[j]]=0;
 for(i=0;i<=n3;i++)
 {
  if(a3[i]>='A'&&a3[i]<='Z'+2)
   op[++n]=val[a3[i]];
  if(a3[i]==AND)
  {
	if(op[n]&&op[n-1]) op[n--]=1;
	 else op[n--]=0;
  }
  if(a3[i]==OR)
  {
	if(op[n]||op[n-1]) op[--n]=1;
	 else op[--n]=0;
  }
  if(a3[i]==NOT)
  {
	if(op[n]==1) op[n]=0;
	 else op[n]=1;
  }
 }
 g<<op[0];
}
f.close();
g.close();
return 0;
}