Pagini recente » Cod sursa (job #2076878) | Cod sursa (job #329825) | Cod sursa (job #2430680) | Cod sursa (job #1876860) | Cod sursa (job #244854)
Cod sursa(job #244854)
#include <stdio.h>
#include <string.h>
char S[2005], *p, ch;
int n, i, a[27], l, q;
int termen();
int factor();
int eval(){
int t = termen();
while (*p == 'O' && *(p + 1) == 'R'){
p += 2;
t |= termen();
}
return t;
}
int termen(){
int f = factor();
while (*p == 'A' && *(p+1) == 'N'){
p += 3;
f &= factor();
}
return f;
}
int factor(){
int poz=1,t;
if (*p == 'N' && *(p + 1)=='O'){
p += 3;
poz = 0;
t = factor();
}
else
if (*p == '('){
p++;
t = eval();
p++;
}
else
if (*p == 'T' && *(p + 1) == 'R') {
p += 4; t = 1;
}
else
if (*p == 'F' && *(p + 1) == 'A'){
p += 5;
t = 0;
}
else {
t = a[*p-'A'];
p++;
}
if (poz)
return t;
else
if (t)
return 0;
else
return 1;
}
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(S);
l = strlen(S);
q = -1;
for (i = 0; i < l; i++)
if(S[i] != ' ')
S[++q] = S[i];
for (i=++q; i < l; i++)
S[i] = 0;
scanf("%d\n", &n);
for (i = 1; i <= n;i++){
scanf("%c", &ch);
if (a[ch - 'A'])
a[ch - 'A'] = 0;
else
a[ch - 'A'] = 1;
p = S;
printf("%d", eval());
}
printf("\n");
return 0;
}