Pagini recente » Cod sursa (job #3282884) | Cod sursa (job #2376876) | Cod sursa (job #1553375) | Cod sursa (job #3206054) | Cod sursa (job #1143306)
#include <cstdio>
#define MAXN 1001
#define MAXVAR 27
char s[MAXN];
bool type[MAXVAR];
int poz;
bool expr();
bool term();
bool fact();
bool expr( ) {
bool x = term();
while( s[poz] == 'O' && s[poz+1] == 'R' ) {
poz += 2;
if( s[poz] == ' ' )
++poz;
x = x | term();
}
return x;
}
bool term( ) {
bool x = fact();
while( s[poz] == 'A' && s[poz+1] == 'N' && s[poz+2] == 'D' ) {
poz += 3;
if( s[poz] == ' ' )
++poz;
x = x & fact();
}
return x;
}
bool fact() {
bool x, tild = false;
if( s[poz] == 'N' && s[poz+1] == 'O' ) {
tild = true;
poz += 3;
if( s[poz] == ' ' )
++poz;
}
if( s[poz] == '(' ) {
++poz;
x = expr();
}
else if( s[poz] == 'T' && s[poz+1] == 'R' ) {
x = true;
poz += 4;
if( s[poz] == ' ' )
++poz;
}
else if( s[poz] == 'F' && s[poz+1] == 'A' ) {
x = false;
poz += 5;
if( s[poz] == ' ' )
++poz;
}
else {
x = type[s[poz]-'A'];
if( tild )
x = 1 - x;
++poz;
if( s[poz] == ' ' )
++poz;
}
return x;
}
int main () {
FILE *f, *g;
f = fopen( "bool.in", "r" );
g = fopen( "bool.out", "w" );
int n;
char c;
fgets( s, MAXN, f );
fscanf( f, "%d", &n );
c = fgetc( f );
for( int i = 0 ; i < n ; ++i ) {
c = fgetc( f );
type[c-'A'] = 1 - type[c-'A'];
poz = 0;
fprintf( g, "%d", expr() );
}
fclose( f );
fclose( g );
return 0;
}