Pagini recente » Cod sursa (job #232638) | Cod sursa (job #1876732) | Cod sursa (job #2219405) | Cod sursa (job #887971) | Cod sursa (job #1866313)
#include <cstdio>
#include <cctype>
#include <cstring>
#define MAXN 1001
FILE *fin,*fout;
char ch,sir[MAXN+1];
bool v[26];
int k,j;
bool e();
bool a();
bool n();
bool p();
bool e()
{
bool ans=a();
while(ch=='|')
{
ch=sir[j++];
ans|=a();
}
return ans;
}
bool a()
{
bool ans=n();
while(ch=='&')
{
ch=sir[j++];
ans&=n();
}
return ans;
}
bool n()
{
bool ans=true;
while(ch=='!')
{
ch=sir[j++];
ans=!ans;
}
if(ans)
ans=p();
else
ans=!p();
return ans;
}
bool p()
{
bool ans;
if(ch=='(')
{
ch=sir[j++];
ans=e();
}
else
if(isalpha(ch))
ans=v[ch-'A'];
else
ans=ch;
ch=sir[j++];
return ans;
}
void prelucrare()
{
int i,lung=strlen(sir)-1;
char cuv[6];
ch=sir[j++];
while(j<=lung)
{
i=0;
while(isalpha(ch))
{
cuv[i++]=ch;
ch=sir[j++];
}
cuv[i]='\0';
if(i==1)
sir[k++]=cuv[0];
else
if(!strcmp(cuv,"TRUE"))
sir[k++]=1;
else
if(!strcmp(cuv,"FALSE"))
sir[k++]=0;
else
if(!strcmp(cuv,"AND"))
sir[k++]='&';
else
if(!strcmp(cuv,"NOT"))
sir[k++]='!';
else
if(!strcmp(cuv,"OR"))
sir[k++]='|';
if(ch!=' ')
sir[k++]=ch;
ch=sir[j++];
}
}
int main()
{
fin=fopen("bool.in","r");
fout=fopen("bool.out","w");
fgets(sir,MAXN,fin);
int n,i;
char lit;
prelucrare();
fscanf(fin,"%d\n",&n);
for(i=0;i<n;i++)
{
lit=fgetc(fin);
v[lit-'A']^=1;
ch=sir[0];j=1;
fprintf(fout,"%d",e());
}
return 0;
}