Pagini recente » Cod sursa (job #1087091) | Cod sursa (job #569788) | Cod sursa (job #1591942) | Cod sursa (job #2812860) | Cod sursa (job #351779)
Cod sursa(job #351779)
#include <stdio.h>
#define nmax 105
#define pmax 1005
char a [pmax], b [pmax], *p;
int n;
bool v [55];
void modif (char a [])
{
int i, w=-1;
for (i=0; a [i]; ++i)
{
if (a [i] == ' ')
continue;
if (a [i] == 'T' && a [i+1] == 'R')
{
b [++w]='t';
i += 3;
continue;
}
if (a [i] == 'F' && a [i+1] == 'A')
{
b [++w]='f';
i += 4;
continue;
}
if (a [i] == 'A' && a [i+1] == 'N')
{
b [++w]='&';
i += 2;
continue;
}
if (a [i] == 'O' && a [i+1] == 'R')
{
b [++w]='|';
i++;
continue;
}
if (a [i] == 'N' && a [i+1] == 'O')
{
b [++w]='~';
i += 2;
continue;
}
b [++w]=a [i];
}
b [++w]=0;
}
bool eval ();
bool termen ()
{
bool r, neg=false;
if (*p == '~')
neg=true;
if (*p == '(')
{
++p;
eval ();
++p;
}
if (*p == 't')
{
++p;
r=true;
}
if (*p == 'f')
{
++p;
r=false;
}
if (*p >= 'A' && *p <= 'Z')
r=v [*p-'A'];
if (neg)
return ~r;
return r;
}
bool eval ()
{
bool r=termen ();
while (*p == '&' || *p == '|')
{
++p;
if (*(p-1) == '&')
r &= termen ();
else
r |= termen ();
}
return r;
}
int main ()
{
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
gets (a);
modif (a);
scanf ("%d\n", &n);
int i;
char c;
for (i=1; i <= n; ++i)
{
p=b;
scanf ("%c", &c);
if (v [c-'A'])
v [c-'A']=false;
else
v [c-'A']=true;
if (eval ())
printf ("1");
else
printf ("0");
}
printf ("\n");
return 0;
}