Pagini recente » Cod sursa (job #2845626) | Cod sursa (job #3227859) | Cod sursa (job #709402) | Cod sursa (job #2976343) | Cod sursa (job #2789300)
#include <bits/stdc++.h>
using namespace std;
char s[1001];
bool val[256];
int ind = 0;
bool calc(), fact();
string getop();
string getop()
{
if (s[ind] == 'A' && s[ind + 1] == 'N')
{
ind += 3;
return "AND";
}
else if (s[ind] == 'O' && s[ind + 1] == 'R')
{
ind += 2;
return "OR";
}
else
return "xxx";
}
bool fact()
{
int ok = 0;
if (s[ind] == 'N' && s[ind + 1] == 'O' && s[ind + 2] == 'T')
ind += 3, ok = 1;
if (s[ind] == '(')
{
ind++;
bool x = calc();
ind++;
return (x + ok) % 2;
}
else if (s[ind] == 'T' && s[ind + 1] == 'R')
{
ind += 4;
return (1 + ok) % 2;
}
else if (s[ind] == 'F' && s[ind + 1] == 'A' && s[ind + 2] == 'L')
{
ind += 5;
return ok % 2;
}
else
{
ind++;
return (val[s[ind - 1]] + ok) % 2;
}
}
bool calc()
{
bool eval = fact(), x;
string op = getop();
while (op == "AND" || op == "OR")
{
x = fact();
if (op == "AND")
eval &= x;
else
eval |= x;
op = getop();
}
return eval;
}
int main()
{
ifstream cin("bool.in");
ofstream cout("bool.out");
int n, i, j, p = 0;
char ch;
cin.getline(s, 1001);
for (i = 0; i <= 1000; i++)
if (s[i] != ' ')
{
s[p] = s[i];
p++;
}
cin >> n;
for (i = 0; i < n; i++)
{
cin >> ch;
val[ch] = (val[ch] + 1) % 2;
ind = 0;
cout << calc();
}
}