Pagini recente » Cod sursa (job #1287068) | Cod sursa (job #1522584) | Cod sursa (job #1593263) | Cod sursa (job #996795) | Cod sursa (job #2703631)
#include <iostream>
#include <stdio.h>
using namespace std;
char v[1005];
bool var[100];
int poz_cur;
int minim(int a, int b) {
return a < b ? a : b;
}
int maxim(int a, int b) {
return a > b ? a : b;
}
char comparatie();
bool expresie();
bool termen();
char comparatie() {
char val = '0';
if ( v[poz_cur] == 'A' && v[poz_cur + 1] == 'N' ) {
poz_cur += 3;
val = '&';
} else if ( v[poz_cur] == 'O' && v[poz_cur + 1] == 'R' ) {
poz_cur += 2;
val = '|';
}
return val;
}
bool termen() {
bool val;
char ch;
ch = v[poz_cur++];
if (ch == '(')
val = expresie();
else if( ch == 'T' && v[poz_cur] == 'R' ) {
poz_cur += 3;
val = 1;
} else if( ch == 'F' && v[poz_cur] == 'A' ) {
poz_cur += 4;
val = 0;
} else if( ch == 'N' && v[poz_cur] == 'O' ) {
poz_cur += 2;
val = !termen();
} else {
val = var[ch];
}
return val;
}
bool expresie() {
char semn;
bool val1, val2;
val1 = termen();
semn = -1;
while ( semn != '0' ) {
semn = comparatie();
if( semn != '0' ) {
if (semn == '&') {
val2 = termen();
val1 = ( val1 & val2 );
}
else
val1 = (val1 | expresie());
}
}
if (v[poz_cur] == ')')
poz_cur++;
return val1;
}
int main() {
FILE *fin, *fout;
fin = fopen("bool.in", "r");
fout = fopen("bool.out", "w");
int i, n;
char ch;
i = 0;
ch = fgetc( fin );
while ( ch != '\n' ) {
if( ch != ' ' ) {
v[i++] = ch;
}
ch = fgetc( fin );
}
fscanf( fin, "%d", &n );
fgetc( fin );
for( i = 0; i < n; i++ ) {
ch = fgetc( fin );
var[ch] = ( 1 - var[ch] );
poz_cur = 0;
fprintf(fout, "%d", expresie() );
}
fclose( fout );
return 0;
}