Pagini recente » Borderou de evaluare (job #225615) | Borderou de evaluare (job #1257525) | Cod sursa (job #1117235)
#include<cstdio>
#include<cstring>
char S[1001];
int n,k,v[27];
int termen(),factor(),eval();
int eval()
{
int r=factor();
while(S[k]=='O' && S[k+1]=='R' && S[k] && S[k]!=')')
{
k+=3;
r|=factor();
}
++k;
if (S[k] == ' ') ++k;
return r;
}
int factor()
{
int r=termen();
while (S[k]=='A' && S[k+1]=='N') k+=4, r&=termen();
return r;
}
int termen()
{
if (S[k]=='(') { ++k; return eval(); }
else
if(S[k]=='N' && S[k+1]=='O'){ k+=4; return !termen(); }
else
if(S[k]=='T' && S[k+1]=='R')
{
k+=4;
if(S[k]==' ') ++k;
return 1;
}
else
if(S[k]=='F' && S[k+1]=='A')
{
k+=5;
if (S[k] == ' ') ++k;
return 0;
}
else
{
int r=v[S[k]-'A'];
++k;
if (S[k]==' ') ++k;
return r;
}
}
int main()
{
int i;
char c;
freopen("bool.in","r",stdin);freopen("bool.out","w",stdout);
gets(S);
scanf("%d\n",&n);
for (i=0;i<n;++i)
{
scanf("%c", &c);
k=0;
v[c-'A']=!v[c-'A'];
printf("%d",eval());
}
return 0;
}