Pagini recente » Cod sursa (job #841354) | Cod sursa (job #2726697) | Cod sursa (job #1203183) | Cod sursa (job #6047) | Cod sursa (job #2491303)
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int NMAX = 105;
const int LMAX = 1005;
int p;
bool v[30];
char s[LMAX], sir[LMAX];
bool termen();
bool expresie();
bool factor();
bool expresie() {
bool x = termen();
while (sir[p] == '|') {
p++;
x = x | termen();
}
return x;
}
bool termen() {
bool y = factor();
while (sir[p] == '&') {
p++;
y = y & factor();
}
return y;
}
bool factor () {
int semn;
bool val;
while (sir[p] == '!') {
p++;
semn++;
}
semn %= 2;
if (sir[p] == '(') {
p++;
val = expresie();
p++;
if (semn == 0)
return val;
return !val;
}
if (sir[p] == '1' || sir[p] == '0')
val = sir[p] = '0';
else
val = v[sir[p] - 'A'];
if (semn == 0)
return val;
return !val;
}
int main() {
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
int n, i, q, k, cuv;
char ch;
cin.getline(s, LMAX);
n = strlen(s);
i = k = 0;
while (i < n) {
if (s[i] >= 'A' && s[i] <= 'Z') {
if (s[i] == 'T' || s[i] == 'F' || s[i] == 'A' || s[i] == 'O' || s[i] == 'N') {
i++;
if (i == n || s[i] == ' ' || s[i] ==')') {
sir[k++] = s[i - 1];
i--;
}
else {
i--;
if (s[i] == 'T') {
cuv = 4;
sir[k++] = '1';
}
if (s[i] == 'F') {
cuv = 5;
sir[k++] = '0';
}
if (s[i] == 'A') {
cuv = 3;
sir[k++] = '&';
}
if (s[i] == 'O') {
cuv = 2;
sir[k++] = '|';
}
if (s[i] == 'N') {
sir[k++] = '!';
cuv = 3;
}
i += cuv;
}
}
else
sir[k++] = s[i];
}
else if (s[i] != ' ')
sir[k++] = s[i];
i++;
}
sir[k] = '\0';
scanf ("%d ", &q);
for (i = 1; i <= q; i++) {
scanf ("%c", &ch);
v[ch - 'A'] = 1 - v[ch - 'A'];
printf ("%d", expresie());
}
return 0;
}