Pagini recente » Cod sursa (job #1099060) | Cod sursa (job #3281971) | Cod sursa (job #41154) | Cod sursa (job #1109801) | Cod sursa (job #2870355)
#include <fstream>
using namespace std;
string s;
bool value[30];
ifstream cin("bool.in");
ofstream cout("bool.out");
void parse(void) {
char ch;
cin.get(ch);
while (ch != '\n') {
if (ch == ' ') {
cin.get(ch);
continue;
}
if (ch >= 'A' && ch <= 'Z')
{
char last = ch;
cin.get(ch);
if (ch == ' ' || ch == '\n' || ch == ')' || ch == '(') {
s += last;
continue;
}
else {
if (last == 'A') {
s += '&';
cin.get(ch);
}
if (last == 'N') {
s += '!';
cin.get(ch);
}
if (last == 'O') {
s += '|';
}
if (last == 'T') {
s += '1';
cin.get(ch);
cin.get(ch);
}
if (last == 'F') {
s += '0';
cin.get(ch);
cin.get(ch);
cin.get(ch);
}
}
}
if (ch == ')') {
s += ')';
}
if (ch == '(') {
s += '(';
}
cin.get(ch);
}
}
int last = 0;
bool findDigit();
bool solveNotFactor();
bool solveAndFactor();
bool solveOrFactor();
int main()
{
parse();
int n;
cin >> n;
string changes;
cin >> changes;
for (int i = 0; i < n; i++) {
value[changes[i] - 'A'] = !value[changes[i] - 'A'];
last = 0;
bool ans = solveOrFactor();
cout << ans;
}
return 0;
}
bool findDigit(){
if(s[last] >= 'A' && s[last] <= 'Z'){
bool curr = value[s[last++] - 'A'];
return curr;
}
else if(s[last] =='1' || s[last] == '0'){
bool curr = s[last++] - '0';
return curr;
}
if(s[last] == '('){
last++;
bool curr = solveOrFactor();
return curr;
}
}
bool solveNotFactor(){
bool inv = false;
while(last < s.size() && s[last] == '!'){
inv = !inv;
last++;
}
bool curr = findDigit();
if(inv == true){
curr = !curr;
}
return curr;
}
bool solveAndFactor(){
bool curr = solveNotFactor();
while(last < s.size() && s[last] == '&'){
last++;
curr &= solveNotFactor();
}
return curr;
}
bool solveOrFactor(){
bool curr = solveAndFactor();
while(last < s.size() && s[last] == '|'){
last++;
curr |= solveAndFactor();
}
last++;
return curr;
}