Pagini recente » Cod sursa (job #636645) | Cod sursa (job #1086979) | Cod sursa (job #1497745) | Cod sursa (job #1064549) | Cod sursa (job #1898082)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char v[1000];
char val[28];
FILE *fin, *fout;
void citire_sir(){
int poz;
char ch;
fscanf( fin, "%s", v );
ch = fgetc( fin );
poz = 0;
val[26] = 1;///codificam true ca z+1 si false ca z+2
while( ch!='\n'){
while( v[poz]=='(' || v[poz]==')' )
poz++;
if( strcmp( v+poz, "TRUE")==0 ){
v[poz] = 'Z'+1;
v[poz+1] = 0;
}
else if( strcmp( v+poz, "FALSE") == 0 ){
v[poz] = 'Z'+2;
v[poz+1] = 0;
}
else if( strcmp( v+poz, "NOT" ) == 0 ){
v[poz] = '!';
v[poz+1] = 0;
}
else if( strcmp( v+poz, "OR" ) == 0 ){
v[poz] = '|';
v[poz+1] = 0;
}
else if( strcmp( v+poz, "AND" ) == 0 ){
v[poz] = '&';
v[poz+1] = 0;
}
poz = strlen( v );
fscanf( fin, "%s", v+poz );
ch = fgetc( fin );
}
}
int poz;
int eval();
int exp_sau();
int exp_si();
int eval(){
int exp = exp_sau();
while( v[poz]=='|' ){
poz++;
exp = exp | exp_sau();
}
return exp;
}
int exp_sau(){
int exp = exp_si();
while( v[poz]=='&' ){
poz++;
exp = exp & exp_si();
}
return exp;
}
int exp_si(){
int exp;
if( v[poz]=='!' ){
poz++;
return !exp_si();
}
else if( v[poz]=='(' ){
poz++;
exp = eval();
poz++;
}
else{
exp = val[ v[poz] - 'A' ];
poz++;
}
return exp;
}
int main(){
int n, i;
char ch;
fin = fopen( "bool.in", "r" );
fout = fopen( "bool.out", "w" );
citire_sir();
fscanf( fin, "%d\n", &n );
//printf("%s",v);
for( i=0; i<n; i++ ){
ch = fgetc( fin );
val[ ch - 'A' ] = 1 - val[ ch - 'A' ];
poz = 0;
fprintf( fout, "%d", eval() );
}
fclose( fin );
fclose( fout );
return 0;
}