Pagini recente » Cod sursa (job #2959869) | Cod sursa (job #3283261) | Cod sursa (job #1901947) | Cod sursa (job #1004298) | Cod sursa (job #1823056)
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
using namespace std;
FILE *fin = fopen("bool.in", "r");
FILE *fout = fopen("bool.out", "w");
int N;
char EXPR[MAX_LEN + 1];
int LEN;
bool val[30];
int p;
int expresie();
int f_and();
int f_or();
int expresie() {
int cmp1 = f_or(), cmp2 = 0;
while (EXPR[p] == 'o') {
p++;
if (p < LEN)
cmp2 = f_or();
if (cmp2 == 1)
cmp1 = 1;
}
return cmp1;
}
int f_or() {
int cmp1 = f_and(), cmp2 = 1;
while (EXPR[p] == 'a') {
p++;
if (p < LEN)
cmp2 = f_or();
if (cmp2 == 0)
cmp1 = 0;
}
return cmp1;
}
int f_and() {
int cmp1, ver = 1;
while (EXPR[p] == 'n') {
p++;
if (ver == 1)
ver = 0;
else
ver = 1;
}
if (EXPR[p] == '(') {
p++;
cmp1 = expresie();
p++;
if (ver == 0) {
if (cmp1 == 1)
cmp1 = 0;
else
cmp1 = 1;
}
return cmp1;
}
else if (EXPR[p] == 't'){
p++;
if (ver == 1)
return 1;
else
return 0;
}
else if (EXPR[p] == 'f'){
p++;
if (ver == 1)
return 0;
else
return 1;
}
else if (p < LEN) {
cmp1 = val[EXPR[p] - 'A'];
p++;
if (ver == 0) {
if (cmp1 == 1)
cmp1 = 0;
else
cmp1 = 1;
}
return cmp1;
}
}
int main(){
int i, j;
char c;
fgets(EXPR, 1000, fin);
int len = strlen(EXPR) - 1;
int k = 0;
for (i = 0; i < len; i++) {
while (EXPR[i] == ' ')
i++;
if (EXPR[i] == 'A' && EXPR[i + 1] == 'N') {
EXPR[k++] = 'a';
i += 2;
}
else if (EXPR[i] == 'O' && EXPR[i + 1] == 'R') {
EXPR[k++] = 'o';
i++;
}
else if (EXPR[i] == 'N' && EXPR[i + 1] == 'O') {
EXPR[k++] = 'n';
i += 2;
}
else if (EXPR[i] == 'T' && EXPR[i + 1] == 'R') {
EXPR[k++] = 't';
i += 3;
}
else if (EXPR[i] == 'F' && EXPR[i + 1] == 'A') {
EXPR[k++] = 'f';
i += 4;
}
else {
EXPR[k++] = EXPR[i];
}
}
EXPR[k] = '\0';
LEN = k;
fscanf(fin, "%d\n", &N);
for (i = 1; i <= N; i++) {
fscanf(fin, "%c", &c);
if (val[c - 'A'] == 1)
val[c - 'A'] = 0;
else
val[c - 'A'] = 1;
p = 0;
fprintf(fout, "%d", expresie());
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}