Pagini recente » Cod sursa (job #583068) | Cod sursa (job #734473) | Cod sursa (job #1179032) | Cod sursa (job #2599079) | Cod sursa (job #2791806)
#include <stdio.h>
#include <stdlib.h>
#define MAXS 1000
char s[MAXS], i;
int val[28];
void readSpace() {
while( s[i] == ' ' )
i++;
}
int calcOr();
int factor() {
int nr;
if( s[i] == '(' ) {
i++;
readSpace();
nr = calcOr();
i++;
if( nr == 1 )
nr = 26;
else
nr = 27;
readSpace();
}
else if( s[i] == 'T' && s[i+1] == 'R' ) {
nr = 26;
i += 4;
readSpace();
}
else if( s[i] == 'F' && s[i+1] == 'A' ) {
nr = 27;
i += 5;
readSpace();
}
else {
nr = s[i] - 'A';
i++;
readSpace();
}
return val[nr];
}
int calcNot() {
int rez, sens;
sens = 0;
while( s[i] == 'N' && s[i+1] == 'O' ) {
i += 3;
readSpace();
sens = 1 - sens;
}
if( sens == 0 )
rez = factor();
else
rez = 1 - factor();
readSpace();
return rez;
}
int calcAnd() {
int rasp;
rasp = calcNot();
readSpace();
while( s[i] == 'A' && s[i+1] == 'N' ) {
i += 3;
readSpace();
rasp = rasp & calcNot();
readSpace();
}
return rasp;
}
int calcOr() {
int rasp;
rasp = calcAnd();
readSpace();
while( s[i] == 'O' && s[i+1] == 'R' ) {
i += 2;
readSpace();
rasp = rasp | calcAnd();
readSpace();
}
return rasp;
}
int main() {
FILE *fin, *fout;
int n, j;
char ch;
fin = fopen( "bool.in", "r" );
fout = fopen( "bool.out", "w" );
fgets( s, MAXS, fin );
fscanf( fin, "%d", &n );
fgetc( fin );
val[26] = 1;
val[27] = 0;
for( j = 0; j < n; j++ ) {
ch = fgetc( fin );
val[ch-'A'] = 1 - val[ch-'A'];
i = 0;
fprintf( fout, "%d", calcOr() );
}
fclose( fin );
fclose( fout );
return 0;
}