Pagini recente » Cod sursa (job #2246380) | Cod sursa (job #1147028) | Cod sursa (job #386741) | Cod sursa (job #249487) | Cod sursa (job #1865973)
#include <cstdio>
#include <cctype>
#include <cstring>
#define MAXN 1001
FILE *fin,*fout;
char ch,sir[MAXN+1];
int 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();
ch=sir[j++];
}
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++]=0,v[cuv[0]-'A']=k-1;
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);
sir[v[lit-'A']]^=1;
ch=sir[0];j=1;
fprintf(fout,"%d",e());
}
return 0;
}