Pagini recente » Borderou de evaluare (job #568917) | Borderou de evaluare (job #2632143) | Borderou de evaluare (job #1011996) | Borderou de evaluare (job #740727) | Cod sursa (job #568578)
Cod sursa(job #568578)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define LMAX 1010
int N, i;
bool Lit[27];
char S[LMAX], c, *p;
inline bool eval();
inline bool termen()
{
bool rez;
char test[10] = {0}, T;
if( *p == '(' )
{
++p;
rez = eval();
++p;
return rez;
}
else
{
for( ; isalpha( *p ) && *p ; test[strlen(test)] = *p, p++ );
if( strlen(test) == 1 ) return Lit[ (int)( test[0]-'A' ) ] ;
else if ( !strcmp( test, "TRUE" ) ) return true;
else
{
++p;
if( *p == '(' ) rez = !eval();
else
{
T = *(++p-1);
return !Lit[ (int)( T-'A' ) ];
}
}
}
}
inline bool eval()
{
bool rez;
rez = termen();
for( ; *p == ' ' && *p ; ++p );
while( *p && *p != ')' )
{
char op[10] = {0};
for( ; isalpha( *p ) && *p ; op[strlen(op)] = *p, p++ );
for( ; *p == ' ' && *p ; ++p );
if( !strcmp( op, "AND" ) ) rez &= termen();
else if( !strcmp( op, "OR" ) ) rez |= termen();
}
return rez;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(S);
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", (int)(eval()) );
}
printf("\n");
return 0;
}