Pagini recente » Cod sursa (job #304002) | Cod sursa (job #3002079) | Cod sursa (job #2591806) | Cod sursa (job #973600) | Cod sursa (job #3192920)
#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
string s;
char c;
int n, pos;
map<char, int> m;
bool OR(); // se coupa de or
bool AND(); // se ocupa de and
bool FACT(); // se ocupa de constante true false () si NOT
bool OR() {
int res = AND();
if (s[pos] == '|') {
pos++;
res = res || AND();
}
return res;
}
bool AND() {
int res = FACT();
if (s[pos] == '&') {
pos++;
res = res && FACT();
}
return res;
}
bool FACT() {
bool res;
if (s[pos] == '(') {
pos++;
res = OR();
pos++;
} else if (s[pos] == '!') {
pos++;
res = !FACT();
} else if (s[pos] == '1' || s[pos] == '0') {
res = s[pos] - '0';
pos++;
} else if (s[pos] >= 'A' && s[pos] <= 'Z') {
res = m[s[pos]];
pos++;
}
return res;
}
int main() {
getline(fin, s);
for (int i = 0; i < s.size(); ++i) {
if (s[i] == ' ') s.erase(i, 1);
if (s[i] == 'T' && s[i + 1] == 'R' && s[i + 2] == 'U' && s[i + 3] == 'E') {
s.erase(i, 4);
s.insert(i, "1");
}
if (s[i] == 'F' && s[i + 1] == 'A' && s[i + 2] == 'L' && s[i + 3] == 'S' && s[i + 4] == 'E') {
s.erase(i, 5);
s.insert(i, "0");
}
if (s[i] == 'N' && s[i + 1] == 'O' && s[i + 2] == 'T') {
s.erase(i, 3);
s.insert(i, "!");
}
if (s[i] == 'A' && s[i + 1] == 'N' && s[i + 2] == 'D') {
s.erase(i, 3);
s.insert(i, "&");
}
if (s[i] == 'O' && s[i + 1] == 'R') {
s.erase(i, 2);
s.insert(i, "|");
}
}
fin >> n;
// for (char x='A';x<='Z';x++) m[x] = 0;
for (int i = 1; i <= n; ++i) {
fin >> c;
m[c] = !m[c];
pos = 0;
fout << OR();
}
// fout << s;
return 0;
}