Pagini recente » Cod sursa (job #1585116) | Cod sursa (job #2537486) | Cod sursa (job #2204459) | Cod sursa (job #2102375) | Cod sursa (job #351527)
Cod sursa(job #351527)
#include <stdio.h>
#define pmax 1005
#define nmax 105
int n;
bool v [55];
char a [nmax], *p;
inline bool conditie ()
{
if (*p == 'A' && *(p+1) == 'N')
return true;
if (*p == 'O' && *(p+1) == 'R')
return true;
return false;
}
inline bool negare ()
{
if (*p != 'N')
return false;
if (*(p+1) != 'O')
return false;
p += 4;
return true;
}
bool eval ();
inline bool True ()
{
if (*p == 'T' && *(p+1) == 'R')
{
p += 5;
return true;
}
return false;
}
inline bool False ()
{
if (*p == 'F' && *(p+1) == 'A')
{
p += 6;
return true;
}
return false;
}
bool termen ()
{
bool Not=negare (), r;
if (True ())
r=true;
else
{
if (False ())
r=false;
else
{
if (*p == '(')
{
++p;
r=eval ();
p += 2;
}
else
{
r=v [*p-'A'];
p += 2;
}
}
}
if (Not)
return ~r;
return r;
}
bool eval ()
{
bool r=termen ();
while (conditie ())
{
if ((*p == 'A') && (*(p+1) == 'N'))
{
p += 4;
r &= termen ();
}
else
if ((*p == 'O') && (*(p+1) == 'R'))
{
p += 3;
r |= termen ();
}
}
return r;
}
int main ()
{
freopen ("bool.in", "r", stdin);
freopen ("bool.out", "w", stdout);
gets (a);
scanf ("%d ", &n);
int i;
char c;
for (i=1; i <= n; ++i)
{
scanf ("%c", &c);
if (v [c-'A'] == true)
v [c-'A']=false;
else
v [c-'A']=true;
p=a;
if (eval () == true)
printf ("1");
else
printf ("0");
}
printf ("\n");
return 0;
}