Pagini recente » Cod sursa (job #2421600) | Cod sursa (job #855735) | Cod sursa (job #213218) | Cod sursa (job #1057617) | Cod sursa (job #136538)
Cod sursa(job #136538)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char exp[1002];
bool vars[26];
int pos;
bool getVar() {
//cout << "Processing variable " << exp[pos] << endl;
bool a = vars[exp[pos] - 'A'];
pos += 2;
return a;
}
// exp ::= 'TRUE' | 'FALSE' | '(' exp ')' | 'NOT' exp | exp 'AND' exp | exp 'OR' exp
bool eval() {
if (strstr(exp + pos, "TRUE") == exp + pos) {
//cout << "Found TRUE" << endl;
pos += 4;
return true;
}
if (strstr(exp + pos, "FALSE") == exp + pos) {
//cout << "Found FALSE" << endl;
pos += 5;
return false;
}
if (strstr(exp + pos, "NOT") == exp + pos) {
//cout << "Processing NOT at " << pos << endl;
pos += 4;
return !eval();
}
bool a;
if (exp[pos] == '(') {
++pos;
a = eval();
++pos;
} else
a = getVar();
if (strstr(exp + pos, "AND") == exp + pos) {
//cout << "Processing AND at " << pos << endl;
pos += 4;
bool b = eval();
return a && b;
}
if (strstr(exp + pos, "OR") == exp + pos) {
//cout << "Processing OR at " << pos << endl;
pos += 3;
bool b = eval();
return a || b;
}
return a;
}
int main(int argc, char *argv[]) {
ifstream fin("bool.in");
fin.getline(exp, 1001);
//cout << exp << endl;
int N;
fin >> N;
char c;
ofstream fout("bool.out");
while (N--) {
fin >> c;
vars[c - 'A'] = !vars[c - 'A'];
pos = 0;
// for (int i(0); i < 26; ++i)
// cout << vars[i];
// cout << endl;
fout << eval();
}
fout << endl;
fout.close();
fin.close();
return 0;
}