Pagini recente » Cod sursa (job #3224811) | Cod sursa (job #1908167) | Cod sursa (job #3257413) | Cod sursa (job #2662644) | Cod sursa (job #1989802)
#include <cstdio>
const int MAXN = 1e3;
#define MAXC 26
char s[MAXN + 10];
int v[MAXC];
int cursor;
int expr();
int fact() {
int x;
if ((s[cursor] == 'N') && (s[cursor + 1] == 'O') && (s[cursor + 2] == 'T')) {
cursor += 3;
x = !fact();
} else if (s[cursor] == '(') {
++cursor;
x = expr();
++cursor;
} else if ((s[cursor] == 'T') && (s[cursor + 1] == 'R') && (s[cursor + 2] == 'U') && (s[cursor + 3] == 'E')) {
cursor += 4;
x = 1;
} else if ((s[cursor] == 'F') && (s[cursor + 1] == 'A') && (s[cursor + 2] == 'L') && (s[cursor + 3] == 'S') && (s[cursor + 4] == 'E')) {
cursor += 5;
x = 0;
} else {
x = v[s[cursor++] - 'A'];
}
return x;
}
int term() {
int x = fact();
while ((s[cursor] == 'A') && (s[cursor + 1] == 'N') && (s[cursor + 2] == 'D')) {
cursor += 3;
x &= fact();
}
return x;
}
int expr() {
int x = term();
while ((s[cursor] == 'O') && (s[cursor + 1] == 'R')) {
cursor += 2;
x |= term();
}
return x;
}
int main() {
int n, p;
char ch;
FILE *fin = fopen("bool.in", "r");
ch = fgetc(fin);
p = 0;
while (ch != '\n') {
if (ch != ' ') {
s[p++] = ch;
}
ch = fgetc(fin);
}
fscanf(fin, "%d ", &n);
FILE *fout = fopen("bool.out", "w");
for (int i = 0; i < n; ++i) {
ch = fgetc(fin);
cursor = 0;
v[ch - 'A'] = !v[ch - 'A'];
fprintf(fout, "%d", expr());
}
fclose(fin);
fclose(fout);
return 0;
}