Pagini recente » Cod sursa (job #1936448) | Cod sursa (job #636830) | Cod sursa (job #2472235) | Cod sursa (job #1575094) | Cod sursa (job #1108712)
#include <cstdio>
#include <cstring>
using namespace std;
char exp[1010];
bool val[30];
int pz;
int p_1();
int p_3()
{
int v;
if (strncmp(exp + pz, "TRUE", 4) == 0)
{
pz += 4;
v = 1;
}
else if (strncmp(exp + pz, "FALSE", 5) == 0)
{
pz += 5;
v = 0;
}
else if (strncmp(exp + pz, "NOT ", 4) == 0)
{
pz += 4;
v = val[exp[pz++] - 'A'];
}
else if (exp[pz] >= 'A' && exp[pz] <= 'Z')
v = val[exp[pz++] - 'A'];
else if (exp[pz] == '(')
{
++pz;
v = p_1();
++pz;
}
return v;
}
int p_2()
{
int val = p_3();
while(strncmp(exp + pz, " AND ", 5) == 0)
{
pz += 5;
val &= p_3();
}
return val;
}
int p_1()
{
int val = p_2();
while(strncmp(exp + pz, " OR ", 4) == 0)
{
pz += 4;
val |= p_2();
}
return val;
}
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(exp);
int i, N;
char c;
scanf("%d\n", &N);
for (i = 0; i < N; ++i)
{
scanf("%c", &c);
val[c - 'A'] = !val[c - 'A'];
pz = 0;
printf("%d", p_1());
}
printf("\n");
fclose(stdout);
return 0;
}