Pagini recente » Cod sursa (job #857290) | Cod sursa (job #3280995) | Cod sursa (job #2151326) | Cod sursa (job #1052879) | Cod sursa (job #529967)
Cod sursa(job #529967)
#include<stdio.h>
#include<string.h>
#define Nmax 1010
using namespace std;
int poz[30][Nmax],i,j,n,k,c ;
char expr[Nmax], a[Nmax], x, *p ;
int termen();
int factor();
int eval()
{
int r = termen();
while( *p == '|' )
++p, r |= termen() ;
return r ;
}
int termen()
{
int r = factor();
while( *p == '&' )
++p, r &= factor();
return r ;
}
int factor()
{
int r = 0 ;
if( *p == '!' )
{
++p ; r = eval() ; r ^= 1 ;
}
else if( *p == '(' )
{
++p ; r = eval() ; ++p ;
}
else
{
r = *p - '0' ; ++p ;
}
return r ;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(a,Nmax-5,stdin);
n = strlen(a);
for( i = 0 ; i < n ; i++ )
{
if( a[i] >= 'A' && a[i] <= 'Z' )
{
if( a[i+1] < 'A' || a[i+1] > 'Z' )
{
expr[++k] = '0' ;
c = a[i] - 'A' + 1 ;
poz[c][++poz[c][0]] = k ;
}
else
if( a[i] == 'T' )
{
expr[++k] = '1' ;
i += 3 ;
}
else if ( a[i] == 'F' )
{
expr[++k] = '0' ;
i += 4 ;
}
else if ( a[i] == 'A' )
{
expr[++k] = '&';
i += 2 ;
}
else if ( a[i] == 'O' )
{
expr[++k] = '|' ;
i++ ;
}
else if( a[i] == 'N' )
{
expr[++k] = '!' ;
i += 2 ;
}
}
else if( a[i] == '(' || a[i] == ')' )
expr[++k] = a[i];
}
scanf("%d\n",&n);
for( j = 1 ; j <= n ; j++ )
{
scanf("%c",&x);
p = expr+1 ;
c = x - 'A' + 1 ;
for( i = 1; i <= poz[c][0] ; i++ )
if( expr[poz[c][i]] == '0' )
expr[poz[c][i]] = '1' ;
else
expr[poz[c][i]] = '0' ;
printf("%d",eval());
}
return 0;
}