Pagini recente » Cod sursa (job #2616173) | Cod sursa (job #1162699) | Cod sursa (job #164204) | Cod sursa (job #2510417) | Cod sursa (job #1077021)
#include <cstdio>
const int MAX_SIR = 100;
char sir[MAX_SIR + 1];
bool variabile[26];
int N;
bool SOL;
bool evalO(char* &sir);
bool evalX(char* &sir) {
bool answer;
if (sir[0] == '(') { // ( O )
++sir; // "("
answer = evalO(sir);
++sir; // ")"
} else if (sir[0] == 'T' && sir[1] == 'R') {
sir += 4; // "TRUE"
answer = true;
} else if (sir[0] == 'F' && sir[1] == 'A') {
sir += 5; // "FALSE"
answer = false;
} else { // VARIABLE
answer = variabile[sir[0] - 'A'];
++sir;
}
return answer;
}
bool evalN(char* &sir) {
if (sir[0] == 'N' && sir[1] == 'O') { // NOT N
sir += 4; // "NOT "
return !evalN(sir);
} else { // X
return evalX(sir);
}
}
bool evalE(char* &sir) {
bool answer = evalN(sir);
if (sir[0] == ' ' && sir[1] == 'A' && sir[2] == 'N') {
sir += 5; // " AND "
answer &= evalE(sir);
}
return answer;
}
bool evalO(char* &sir) {
bool answer = evalE(sir);
if (sir[0] == ' ' && sir[1] == 'O' && sir[2] == 'R') {
sir += 4; // " OR "
answer |= evalO(sir);
}
return answer;
}
int main(void) {
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int i;
char c;
char* pozitie;
// citirea datelor
gets(sir);
// calcularea solutiei
scanf("%d\n", &N);
for (i = 0; i < N; ++i) {
scanf("%c", &c);
variabile[c - 'A'] = !variabile[c - 'A'];
pozitie = sir;
SOL = evalO(pozitie);
//assert(pozitie == sir + strlen(sir));
// afisarea solutiei
printf("%d", SOL);
}
printf("\n");
return 0;
}