Pagini recente » Cod sursa (job #3277195) | Cod sursa (job #290906) | Cod sursa (job #3290181) | Cod sursa (job #1948503) | Cod sursa (job #3302268)
#include <fstream>
#include <string>
#include <vector>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
string s;
vector<bool> vars(27, false);
bool expresie(string &s, int &p);
bool termen(string &s, int &p);
bool factor(string &s, int &p);
bool var(string &s, int &p);
bool s2_in_s1_at_poz(string s2, string s1, int poz) {
if (poz + s2.size() > s1.size()) return false;
for (int i = 0 ; i < s2.size() ; ++i) {
if (s1[i + poz] != s2[i]) return false;
}
return true;
}
bool expresie(string &s, int &p) {
bool rez = termen(s, p);
while (p < s.size() && s2_in_s1_at_poz(" OR ", s, p)) {
// cout << "[OR found at pos " << p << "]\n";
p += 4;
rez = rez || termen(s, p);
}
return rez;
}
bool termen(string &s, int &p) {
bool rez = factor(s, p);
while (p < s.size() && s2_in_s1_at_poz(" AND ", s, p)) {
// cout << "[AND found at pos " << p << "]\n";
p += 5;
rez = rez && factor(s, p);
}
return rez;
}
bool factor(string &s, int &p) {
if (s[p] == '(') {
++p;
bool rez = expresie(s, p);
++p;
return rez;
}
if (s2_in_s1_at_poz(" NOT ", s, p)) {
p += 5;
return !factor(s, p);
}
if (s2_in_s1_at_poz("NOT ", s, p)) {
p += 4;
return !factor(s, p);
}
if (s2_in_s1_at_poz("TRUE", s, p)) {
p += 4;
return true;
}
if (s2_in_s1_at_poz("FALSE", s, p)) {
p += 5;
return false;
}
if (s[p] >= 'A' && s[p] <= 'Z') {
++p;
return vars[s[p - 1] - 'A'];
}
return false;
}
int main() {
getline(cin, s);
int n, p = 0;
cin >> n;
char schimbari[101];
cin >> schimbari;
for (int i = 0 ; i < n ; ++i) {
vars[schimbari[i] - 'A'] = !vars[schimbari[i] - 'A'];
p = 0;
// cout << "A=" << vars['A' - 'A'] << " → result=" << expresie(s, p) << '\n';
cout << expresie(s, p);
}
return 0;
}