Pagini recente » Cod sursa (job #1127058) | Cod sursa (job #1671498) | Cod sursa (job #825048) | Cod sursa (job #483590) | Cod sursa (job #532004)
Cod sursa(job #532004)
#include<stdio.h>
#include<string>
FILE*f=fopen("bool.in","r");
FILE*g=fopen("bool.out","w");
int n,i,Val[200],j,ch,nt;
char A[1050],S[1005],k,Ch[105];
int And();
int fct();
int Or() {
int R = And();
while ( S[i] == '|' ){
++i;
int R2 = And();
if ( R || R2 )
R = 1;
else
R = 0;
}
return R;
}
int And () {
int R = fct();
while ( S[i] == '&' ){
++i;
int R2 = fct();
if ( R && R2 )
R = 1;
else
R = 0;
}
return R;
}
int fct () {
int R = 0;
if ( S[i] == '!' ){
++i;
R = !fct();
}
else{
if ( S[i] == '(' ){
++i;
R = Or();
++i;
}
else{
R = Val[S[i]];
++i;
}
}
return R;
}
int main () {
fgets(A+1,1020,f);
n = strlen(A+1);
for ( i = 1 ; i <= n ; ){
if ( A[i] == '\n') break;
if ( A[i] == ' ' ){ ++i; continue; }
if ( A[i] == 'A' && A[i+1] == 'N' && A[i+2] == 'D' ){
S[++k] = '&';
i += 3;
continue;
}
if ( A[i] == 'O' && A[i+1] == 'R' ){
S[++k] = '|';
i += 2;
continue;
}
if ( A[i] == 'N' && A[i+1] == 'O' && A[i+2] == 'T' ){
S[++k] = '!';
i += 3;
continue;
}
if ( A[i] == 'F' && A[i+1] == 'A' && A[i+2] == 'L' && A[i+3] =='S' && A[i+4] == 'E' ){
S[++k] = 'Z' + 1;
i += 5;
continue;
}
if ( A[i] == 'T' && A[i+1] == 'R' && A[i+2] == 'U' && A[i+3] =='E' ){
S[++k] = 'Z' + 2;
i += 4;
continue;
}
if ( (A[i] >= 'A' && A[i] <= 'Z') || A[i] == '(' || A[i] == ')' ){
S[++k] = A[i];
++i;
}
}
Val['Z'+2] = 1;
fscanf(f,"%d\n",&ch);
fscanf(f,"%s",Ch+1);
for ( j = 1 ; j <= ch ; ++j ){
i = 1;
Val[Ch[j]] = 1 - Val[Ch[j]];
fprintf( g,"%d",Or() );
}
fclose(f);
fclose(g);
return 0;
}