Cod sursa(job #84430)

Utilizator floringh06Florin Ghesu floringh06 Data 14 septembrie 2007 23:46:14
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include<stdio.h>

FILE *fin,*fout;
int v[1005],vec[30];
char ch,v1[1005];

int orr(int x,int y)
{
if(x==0&&y==0) return 0;
return 1;
}

int andd(int x,int y)
{
if(x==1&&y==1) return 1;
return 0;
}

int nott(int x)
{
if(x==1) return 0;
return 1;
 }

int alpha(char x)
{
return (x>='A'&&x<='Z');
}

int eval(int li,int ls)
{
int desc,min,i,poz,nrpar;

if(li==ls)
  if(v[li]==27) return 1;
   else if(v[li]==28) return 0;
     else return vec[v[li]];
else
  {
  desc=0;
  min=100;
  nrpar=1001;
  for(i=li;i<=ls;i++)
    {
    if(v[i]==33) desc++;
    else
    if(v[i]==34) desc--;
    else
      {
      if(desc==0&&v[i]>=30&&v[i]<=32&&v[i]<min)
	 min=v[i],poz=i;
      }
    }
  
  if(min==100)
     return eval(li+1,ls-1);
  else
    {
    if(v[poz]==30)
      return orr(eval(poz+1,ls),eval(li,poz-1));
    else
    if(v[poz]==31)
       return andd(eval(poz+1,ls),eval(li,poz-1));
    else
    if(v[poz]==32)
       return nott(eval(poz+1,ls));       
    }
  }
}

int main()
{
int nr,i,nr2,n,aux,cont;
nr=i=nr2=n=aux=cont=0;
fin=fopen("bool.in","r");
fout=fopen("bool.out","w");
ch=fgetc(fin);
v1[0]='|';
while(ch!='\n')
  {
  v1[++nr]=ch;
  ch=fgetc(fin);
  }
v1[nr+1]=0;

i=0;
while(i<nr)
 {
 i++;
 if(v1[i]!=' ')
     nr2++;
 if(alpha(v1[i]))
   if(alpha(v1[i+1]))
     {
     if(v1[i]=='N')
       v[nr2]=32,i+=2;
     else
     if(v1[i]=='A')
       v[nr2]=31,i+=2;
     else
     if(v1[i]=='O')
       v[nr2]=30,i++;
     else
     if(v1[i]=='T')
       v[nr2]=27,i+=3;
     else
       v[nr2]=28,i+=4;
     }
   else
      v[nr2]=v1[i]-'A'+1;
 else
   if(v1[i]=='(')
       v[nr2]=33;
   else
   if(v1[i]==')')
       v[nr2]=34;
 }

for(ch='A';ch<='Z';ch++)
     vec[ch-'A'+1]=0;

fscanf(fin,"%d",&n);
ch=fgetc(fin);
for(cont=1;cont<=n;cont++)
  {
  ch=fgetc(fin);
  aux=ch-'A'+1;
  if(vec[aux])
    vec[aux]=0;
  else vec[aux]=1;
  fprintf(fout,"%d",eval(1,nr2));
  }
fprintf(fout,"\n");

fcloseall();
}