Pagini recente » Cod sursa (job #384588) | Cod sursa (job #2770821) | Cod sursa (job #3293198) | Cod sursa (job #3251368) | Cod sursa (job #2836932)
#include <fstream>
using namespace std;
const int LE = 1000;
const int NOP = 100;
const int NL = 26;
char s[LE + 1], op[NOP + 1];
bool val[NL];
int p;
bool expresie();
bool termen();
bool factor();
void transforma() {
int i, nr;
i = nr = 0;
while (s[i]) {
if (s[i] == 'T' && s[i + 1] == 'R') {
s[nr++] = '1';
i += 4;
}
else if (s[i] == 'F' && s[i + 1] == 'A') {
s[nr++] = '0';
i += 5;
}
else if (s[i] == 'N' && s[i + 1] == 'O') {
s[nr++] = '!';
i += 3;
}
else if (s[i] == 'O' && s[i + 1] == 'R') {
s[nr++] = '|';
i += 2;
}
else if (s[i] == 'A' && s[i + 1] == 'N') {
s[nr++] = '&';
i += 3;
}
else if (s[i] != ' ')
s[nr++] = s[i++];
else
++i;
}
s[nr] = 0;
}
bool expresie() {
bool sau = termen();
while (s[p] == '|') {
++p;
sau |= termen();
}
return sau;
}
bool termen() {
bool shi = factor();
while (s[p] == '&') {
++p;
shi &= factor();
}
return shi;
}
bool factor() {
bool nu = false, v;
while (s[p] == '!') {
nu = !nu;
++p;
}
if (s[p] == '(') {
++p;
v = expresie();
++p;
if (nu)
return !v;
return v;
}
if (s[p] == '1') {
v = true;
++p;
}
else if (s[p] == '0') {
v = false;
++p;
}
else
v = val[s[p++] - 'A'];
if (nu)
return !v;
return v;
}
int main() {
ifstream in("bool.in");
ofstream out("bool.out");
int nop;
in.getline(s, LE);
transforma();
in >> nop >> op;
for (int i = 0; i < nop; ++i) {
val[op[i] - 'A'] = (!val[op[i] - 'A']);
p = 0;
out << expresie();
}
in.close();
out.close();
return 0;
}