Pagini recente » Cod sursa (job #184389) | Cod sursa (job #998926) | Cod sursa (job #2255927) | Cod sursa (job #403305) | Cod sursa (job #592219)
Cod sursa(job #592219)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define LMAX 1010
int N, i;
bool Lit[27];
char S[LMAX], c, *p;
inline int eval();
inline int termen();
inline int expr();
inline int expr()
{
int rez;
if( *p == 'N' && *(p+1) == 'O' )
{
p += 3;
rez = expr();
return !rez;
}
else if( *p == '(' )
{
++p;
rez = eval();
++p;
return rez;
}
else if( *p == 'T' && *(p+1) == 'R' )
{
p += 4;
return 1;
}
else if( *p == 'F' && *(p+1) == 'A' )
{
p += 5;
return 0;
}
else
{
rez = Lit[ *p - 'A' ];
++p;
return rez;
}
}
inline int termen()
{
int rez = expr();
for( ; *p == 'A' && *(p+1) == 'N'; p += 3, rez &= expr() );
return rez;
}
inline int eval()
{
int rez = termen();
for( ; *p == 'O' && *(p+1) == 'R'; p += 2, rez |= termen() );
return rez;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(S);
p = strchr ( S, ' ' );
while( p )
{
strcpy( p, p+1 );
p = strchr( p, ' ' );
}
scanf("%d\n", &N);
for( i=0; i<N; i++ )
{
scanf("%c", &c);
Lit[ (int)( c-'A') ] = !Lit[ (int)( c-'A') ];
p = S;
printf("%d", eval() );
}
printf("\n");
return 0;
}