Pagini recente » Cod sursa (job #1356822) | Cod sursa (job #1369111) | Cod sursa (job #2589320) | Cod sursa (job #2549269) | Cod sursa (job #129105)
Cod sursa(job #129105)
# #include <stdio.h>
# #include <string.h>
# #define NMAX 1001
#
# char e[NMAX];
# int N, k, v['Z'-'A'+1];
#
# int evalf();
# int evalt();
# int evale();
#
# int main() {
# int i;
# char c;
# freopen("bool.in", "r", stdin);
# freopen("bool.out", "w", stdout);
# fgets(e, NMAX, stdin);
# //printf("%d ", strlen(e));
# scanf("%d\n", &N);
# for (i = 0; i < N; ++i) {
# scanf("%c", &c);
# k = 0, v[c-'A'] = !v[c-'A'];
# printf("%d", evale());
# }
# //printf("%d ", evale());
# //printf("%d", k);
# return 0;
# }
#
# int evalf() {
if (e[k] == '(') {
++k;
return evale();
}
else if (e[k] == 'N' && e[k+1] == 'O') {
k += 4;
return !evalf();
}
else if (e[k] == 'T' && e[k+1] == 'R') {
k += 4;
if (e[k] == ' ')
++k;
return 1;
}
else if (e[k] == 'F' && e[k+1] == 'A') {
k += 5;
if (e[k] == ' ')
++k;
return 0;
}
else {
int r = v[e[k]-'A'];
++k;
if (e[k] == ' ')
++k;
return r;
}
}
int evalt() {
int r = evalf();
while (e[k] == 'A' && e[k+1] == 'N') {
k += 4;
r &= evalf();
}
return r;
}
int evale() {
int r = evalt();
while (e[k] == 'O' && e[k+1] == 'R' && e[k] && e[k] != ')') {
k += 3;
r |= evalt();
}
++k;
if (e[k] == ' ')
++k;
//printf("%d %d %c\n", k, r, e[k]);
return r;
}