Pagini recente » Cod sursa (job #876868) | Cod sursa (job #2055360) | Cod sursa (job #491291) | Cod sursa (job #2151943) | Cod sursa (job #876689)
Cod sursa(job #876689)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
#define MAXLIT 300
int val[MAXLIT], poz;
string s;
bool solveAND();
bool solveNUMBER();
bool solveOR() {
int sol = solveAND();
while (s.substr(poz, 2) == "OR") {
poz += 2;
sol |= solveAND();
}
return sol;
}
bool solveAND() {
int sol = solveNUMBER();
while (s.substr(poz, 3) == "AND") {
poz += 3;
sol &= solveNUMBER();
}
return sol;
}
bool solveNUMBER() {
if (s.substr(poz, 4) == "TRUE") {
poz += 4;
return 1;
}
if (s.substr(poz, 5) == "FALSE") {
poz += 5;
return 0;
}
int schimba = 0, rez;
if (s.substr(poz, 3) == "NOT") {
poz += 3;
return !solveNUMBER();
}
if (s[poz] == '(') {
poz += 1;
rez = solveOR();
poz += 1;
}
else {
rez = val[s[poz]];
poz += 1;
}
return rez;
}
int main() {
int nrMod;
char c;
string temp;
getline(fin, temp);
for (int i = 0; i < temp.size(); ++i)
if (temp[i] != ' ')
s.push_back(temp[i]);
fin >> nrMod;
for (int i = 1; i <= nrMod; ++i) {
fin >> c;
val[c] = !val[c]; poz = 0;
fout << solveOR();
}
return 0;
}