Pagini recente » Cod sursa (job #395711) | Cod sursa (job #3283222) | Cod sursa (job #2621801) | Cod sursa (job #1271939) | Cod sursa (job #2789591)
#include <stdio.h>
#define MAX 1000
char expr[MAX], f[26];
int len, i;
int calcOr();
int trueFalse() {
int retval;
if(expr[i] == 'T' && expr[i + 1] == 'R') { // TRUE
i += 4;
while(expr[i] == ' ')
i++;
retval = 1;
} else if(expr[i] == 'F' && expr[i + 1] == 'A') { // FALSE
i += 5;
while(expr[i] == ' ')
i++;
retval = 0;
} else
retval = f[expr[i++] - 'A'];
return retval;
}
int calcNot() {
int retval, neg;
neg = 0;
while(expr[i] == 'N' && expr[i + 1] == 'O') { // NOT
neg = 1 - neg;
i += 3;
while(expr[i] == ' ')
i++;
}
if(expr[i] == '(') {
i++;
retval = calcOr();
i++;
while(expr[i] == ' ')
i++;
} else
retval = trueFalse();
retval ^= neg;
return retval;
}
int calcAnd() {
int retval;
retval = calcNot();
while(expr[i] == ' ')
i++;
while(expr[i] == 'A' && expr[i + 1] == 'N') { // AND
i += 3;
while(expr[i] == ' ')
i++;
retval &= calcNot();
while(expr[i] == ' ')
i++;
}
return retval;
}
int calcOr() {
int retval;
retval = calcAnd();
while(expr[i] == ' ')
i++;
while(expr[i] == 'O' && expr[i + 1] == 'R') {
i += 2;
while(expr[i] == ' ')
i++;
retval |= calcAnd();
while(expr[i] == ' ')
i++;
}
return retval;
}
int main() {
int q;
char ch;
FILE *fin, *fout;
fin = fopen("bool.in", "r");
fout = fopen("bool.out", "w");
fgets(expr, MAX, fin);
fscanf(fin, "%d ", &q);
while(q--) {
ch = fgetc(fin);
f[ch - 'A'] = 1 - f[ch - 'A'];
i = 0;
fprintf(fout, "%d", calcOr());
}
fclose(fin);
fclose(fout);
return 0;
}