Pagini recente » Cod sursa (job #2862929) | Cod sursa (job #1868482) | Cod sursa (job #1934946) | Cod sursa (job #1272588) | Cod sursa (job #84423)
Cod sursa(job #84423)
#include<stdio.h>
int v[1010],nr2=0,vec[40];
int alpha(char x)
{return (x>='A'&&x<='Z');}
int andd(int x,int y)
{
if(x==1&&y==1) return 1;
return 0;
}
int orr(int x,int y)
{
if(x==0&&y==0) return 0;
return 1;
}
int nott(int x)
{
if(x==1) return 0;
return 1;
}
int eval(int li,int ls)
{
int min,i,poz,desc;
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;
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) eval(li+1,ls-1);
else
if(min==30)
return orr(eval(li,poz-1),eval(poz+1,ls));
else
if(min==31)
return andd(eval(li,poz-1),eval(poz+1,ls));
else
return nott(eval(poz+1,ls));
}
}
int main()
{
FILE *fin=fopen("bool.in","r"),*fout=fopen("bool.out","w");
char ch,s[1010];
int n=0,cnt,aux,i;
ch=fgetc(fin);
while(ch!='\n')
{
n++;
s[n]=ch;
ch=fgetc(fin);
}
s[n+1]=0;
i=0;
while(i<n)
{
i++;
if(s[i]!=' ') nr2++;
if(alpha(s[i]))
if(alpha(s[i+1]))
{
if(s[i]=='N')
v[nr2]=32,i+=2;
else
if(s[i]=='A')
v[nr2]=31,i+=2;
else
if(s[i]=='O')
v[nr2]=30,i++;
else
if(s[i]=='T')
v[nr2]=27,i+=3;
else
v[nr2]=28,i+=4;
}
else v[nr2]=s[i]-'A'+1;
else if(s[i]=='(') v[nr2]=33;
else if(s[i]==')') v[nr2]=34;
}
for(ch='A';ch<='Z';ch++) vec[ch-'A'+1]=0;
fscanf(fin,"%d",&n);
ch=fgetc(fin);
for(cnt=1;cnt<=n;cnt++)
{
ch=fgetc(fin);
aux=ch-'A'+1;
if(vec[aux]==1) vec[aux]=0;
else vec[aux]=1;
fprintf(fout,"%d",eval(1,nr2));
}
fprintf(fout,"\n");
fcloseall();
return 0;
}