Pagini recente » Cod sursa (job #2120317) | Cod sursa (job #214149) | Cod sursa (job #992834) | Cod sursa (job #2605959) | Cod sursa (job #2268258)
#include <cstdio>
#include <cstdlib>
#define FILE_IN "bool.in"
#define FILE_OUT "bool.out"
char Exp[1024];
int N;
bool Var[26];
char *p;
bool Factor();
bool Termen();
bool Eval();
int main()
{
freopen(FILE_IN, "r", stdin);
freopen(FILE_OUT, "w", stdout);
fgets(Exp, 1024, stdin);
scanf("%i", &N);
while(N--)
{
char x;
scanf(" %c", &x);
Var[x - 'A'] = !Var[x - 'A'];
p = Exp;
printf("%i", Eval());
}
return 0;
}
bool Factor()
{
while(*p == ' ') ++p;
bool r = false;
if(*p == '(')
{
++p;
r = Eval();
++p;
}
else
{
if(*(p+1) == ' ' || *(p+1) == ')' || *(p+1) == '\n')
{
r = Var[*p - 'A'];
++p;
}
else
{
if(*p == 'N')
{
p += 3;
r = 1 - Factor();
}
else if(*p == 'T')
{
p += 4;
r = true;
}
else if(*p == 'F')
{
p += 5;
r = false;
}
else
exit(-1);
}
}
return r;
}
bool Termen()
{
bool r = Factor();
while(*p == ' ') ++p;
while(*p == 'A')
{
if(*p == 'A')
{
p += 3;
r &= Factor();
}
while(*p == ' ') ++p;
}
return r;
}
bool Eval()
{
bool r = Termen();
while(*p == 'O')
{
if(*p == 'O')
{
p += 2;
r |= Termen();
}
while(*p == ' ') ++p;
}
return r;
}