Pagini recente » Cod sursa (job #590302) | Cod sursa (job #2793133) | Cod sursa (job #2621566) | Cod sursa (job #238294) | Cod sursa (job #2700935)
#include <fstream>
#include <cctype>
constexpr int N = 1000;
char s_raw[N + 1];
char s[N + 1];
char *p = s;
constexpr int A = 26;
bool vars[A];
constexpr int C = 100;
char changes[C + 1];
bool expresie();
bool termen();
bool factor();
bool expresie() {
bool sau = termen();
while (*p == '|') {
++p;
sau = sau || termen;
}
return sau;
}
bool termen() {
bool band = factor();
while (*p == '&') {
++p;
band = band && factor();
}
return band;
}
bool factor() {
bool inv = false;
bool val;
while (*p == '!') {
inv = !inv;
++p;
}
if (*p == '(') {
++p;
val = expresie();
++p;
}
else if (*p == 'T') {
val = true;
}
else if (*p == 'F') {
val = false;
}
else {
val = vars[*p - '0'];
++p;
}
return inv ? !val : val;
}
void parse(char *p) {
char *p2 = s;
while (*p) {
if (isalpha(*p)) {
if (p[1] == ' ') {
*p2 = *p - 'A' + '0';
++p2;
++p;
}
else if (*p == 'T') {
*p2 = 'T';
++p2;
p += 4;
}
else if (*p == 'F') {
*p2 = 'F';
++p2;
p += 5;
}
else if (*p == 'N') {
*p2 = '!';
++p2;
p += 3;
}
else if (*p == 'A') {
*p2 = '&';
++p2;
p += 3;
}
else if (*p == 'O') {
*p2 = '|';
++p2;
p += 2;
}
}
if (*p != ' ') {
*p2 = *p;
++p2;
}
++p;
}
}
int main() {
std::ifstream in("bool.in");
std::ofstream out("bool.out");
in.getline(s_raw, sizeof s_raw);
parse(s_raw);
int n;
in >> n;
in.ignore();
in.getline(changes, sizeof(changes));
for (int i = 0; i < n; ++i) {
vars[changes[i] - 'A'] = !vars[changes[i] - 'A'];
out << expresie();
}
}