Pagini recente » Cod sursa (job #1268335) | Cod sursa (job #1381783) | Cod sursa (job #2145039) | Cod sursa (job #399855) | Cod sursa (job #273588)
Cod sursa(job #273588)
#include<cstdio>
#include<cstring>
bool a[100];
int n, i;
char p, e[2000], buf[2000];
bool EvalExpr(), EvalFactor(), EvalTermen();
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(buf, 2000, stdin);
for (i = 0, n = 0; buf[i] != '\n'; ++i)
if ( buf[i] != ' ' )
e[n++] = buf[i];
for (i = 0; i < 'Z' - 'A' + 1; ++i)
a[i] = 0;
scanf("%d\n",&n);
for (; n; n--){
scanf("%c", &p);
a[p - 'A'] = !a[p - 'A'];
i = 0;
printf("%d",(EvalExpr()) ? 1 : 0);
}
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}
bool EvalExpr(){
bool r = EvalTermen();
while (strncmp(e + i, "OR", 2) == 0 ){
i += 2;
r |= EvalTermen();
}
return r;
}
bool EvalTermen(){
bool r = EvalFactor();
while (strncmp(e + i, "AND", 3) == 0 ){
i += 3;
r &= EvalFactor();
}
return r;
}
bool EvalFactor(){
bool f;
if (strncmp(e + i, "TRUE", 4) == 0 ){
i += 4;
return 1;
}
else
if (strncmp(e + i, "FALSE", 5) == 0 ){
i += 5;
return 0;
}
else
if (strncmp(e + i, "NOT", 3) == 0 ){
i += 3;
f = ! EvalFactor();
}
else
if (e[i] == '(' ){
i++;
f = EvalExpr();
i++;
}
else
{
f = a[e[i]-'A'];
i++;
}
return f;
}