Pagini recente » Cod sursa (job #2852768) | Cod sursa (job #2633856) | Cod sursa (job #1786816) | Cod sursa (job #2998515) | Cod sursa (job #2923883)
#include <bits/stdc++.h>
#define ALPHA 30
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
bool v[ALPHA];
int s_length;
bool expresie(const char* s, int& p);
bool termen(const char* s, int& p);
bool factor(const char* s, int& p);
bool numar(const char* s, int& p);
bool expresie(const char* s, int& p){
bool res = termen(s, p);
while (p < s_length && s[p] == '|'){
p++;
res |= termen(s, p);
}
return res;
}
bool termen(const char* s, int& p){
bool res = factor(s, p);
while (p < s_length && s[p] == '&'){
p++;
res &= factor(s, p);
}
return res;
}
bool factor(const char* s, int& p){
bool res, sign = false;
while (s[p] == '!'){
sign ^= true;
p++;
}
if (s[p] == '('){
p++;
res = (sign ^ expresie(s, p));
p++;
}
else
res = (sign ^ numar(s, p));
return res;
}
bool numar(const char* s, int& p){
bool res;
if (s[p] == '1')
res = true;
else if (s[p] == '0')
res = false;
else
res = v[s[p] - 'A'];
p++;
return res;
}
int main(){
string s, sq, str;
int q, p, i, lg = 0;
getline(fin, s);
s_length = s.size();
str = s;
for (i = 0; i < s_length; i++)
if (!isspace(s[i]))
str[lg++] = s[i];
s_length = lg;
s = str;
fin >> q >> sq;
for (i = 0; i < q; i++){
v[sq[i] - 'A'] ^= 1;
p = 0;
fout << expresie(s.c_str(), p);
}
fout << "\n";
return 0;
}