Pagini recente » Cod sursa (job #2819633) | Cod sursa (job #1283116) | Cod sursa (job #854494) | Cod sursa (job #828105) | Cod sursa (job #199792)
Cod sursa(job #199792)
#include <cstdio>
#include <cstring>
const int E = 2000;
const int N = 200;
char exp[E+1], var[N+1], *ev;
int n, en;
bool v['Z'-'A'+1];
int termen();
int factor();
int eval() {
int t = termen();
for (; *ev == 'O' && *(ev+1) == 'R'; ev += 2, t |= termen());
return t;
}
int termen() {
int f = factor();
for (; *ev == 'A' && *(ev+1) == 'N'; ev += 3, f &= factor());
return f;
}
int factor() {
int r, niet = false;
if (*ev == 'N' && *(ev+1) == 'O') {
ev += 3;
niet = true;
r = factor();
} else
if (*ev == '(') {
++ev;
r = eval();
++ev;
} else
if (*ev == 'T' && *(ev+1) == 'R') {
ev += 4;
r = true;
} else
if (*ev == 'F' && *(ev+1) == 'A') {
ev += 5;
r = false;
} else {
r = v[*ev - 'A'];
++ev;
}
return (niet) ? !r : r;
}
int main() {
freopen("bool.in","rt",stdin);
freopen("bool.out","wt",stdout);
fgets(exp,E,stdin);
en = strlen(exp);
int p = 0;
for (int i = 0; i < en; ++i)
if (exp[i] != ' ') exp[p++] = exp[i];
exp[p] = '\0';
scanf("%d\n",&n);
fgets(var,N,stdin);
for (int i = 0; i < n; ++i) {
v[var[i]-'A'] = !v[var[i]-'A'];
ev = exp;
printf("%d",eval());
}
printf("\n");
return 0;
}