Pagini recente » Cod sursa (job #1964281) | Cod sursa (job #2544498) | Cod sursa (job #2613971) | Cod sursa (job #1560002) | Cod sursa (job #3294167)
#include <bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
const int MAX_LEN = 1'000;
const int SIGMA = 26;
char s[MAX_LEN + 1];
int val[SIGMA + 1];
int p, n, q;
void Citire() {
f.getline(s, MAX_LEN);
n = strlen(s);
}
bool Factor();
bool Termen();
bool Evaluare();
bool Factor() {
int f;
if (s[p] == '(') {
p++; /// Trec peste '('.
f = Evaluare();
p++; /// Trec peste ')'.
}
else
if (s[p] == 'N' && s[p + 1] == 'O') {
p += 4; /// Sar peste operatorul "NOT"
f = ~Factor();
}
else
if (s[p] == 'T' && s[p + 1] == 'R') {
p += 5; /// Sar peste "TRUE"
f = 1;
}
else {
f = val[s[p] - 'A'];
p += 2; /// Trec peste factor.
}
return f;
}
bool Termen() {
int t = Factor();
while (p < n && (s[p] == 'A' && s[p + 1] == 'N')) {
p += 4;
t &= Factor();
}
return t;
}
bool Evaluare() {
int r = Termen();
while (p < n && (s[p] == 'O' && s[p + 1] == 'R')) {
p += 3;
r |= Termen();
}
return r;
}
int main() {
Citire();
f >> q;
while (q--) {
char c;
f >> c;
val[c - 'A'] ^= 1;
p = 0;
g << Evaluare();
}
f.close();
g.close();
return 0;
}