Pagini recente » Cod sursa (job #1886615) | Cod sursa (job #995173) | Cod sursa (job #2565627) | Cod sursa (job #149268) | Cod sursa (job #2791582)
#include <stdio.h>
#define MAX 1001
char v[MAX];
char valcar[26];
int I;
int OR();
int factor(){
int rez;
if(v[I]=='('){
I++;
rez=OR();
I++;
}else{
rez=0;
if(v[I]==1 || v[I]==0){
rez=(rez+v[I])%2;
}else{
rez=(rez+valcar[v[I]-'A'])%2;
}
I++;
}
return rez;
}
int NOT(){
int rez;
rez=0;
while(v[I]=='!'){
rez=(rez+1)%2;
I++;
}
rez=(rez+factor())%2;
return rez;
}
int AND(){
int rez;
rez=NOT();
while(v[I]=='&'){
I++;
rez=rez & NOT();
}
return rez;
}
int OR(){
int rez;
rez=AND();
while(v[I]=='|'){
I++;
rez=rez | AND();
}
return rez;
}
void read(FILE *fin) {
int i;
i=0;
v[i] = fgetc(fin);
while(v[i]!='\n'){
i++;
v[i]=fgetc(fin);
if(v[i]==' ')
i--;
if(i>0 && v[i-1]=='O' && v[i]=='R'){
i--;
v[i]='|';
}
if(i>1 && v[i-2]=='A' && v[i-1]=='N' && v[i]=='D'){
i-=2;
v[i]='&';
}
if(i>1 && v[i-2]=='N' && v[i-1]=='O' && v[i]=='T'){
i-=2;
v[i]='!';
}
if(i>2 && v[i-3]=='T' && v[i-2]=='R' && v[i-1]=='U' && v[i]=='E'){
i-=3;
v[i]=1;
}
if(i>3 && v[i-4]=='F' && v[i-3]=='A' && v[i-2]=='L' && v[i-1]=='S' && v[i]=='E'){
i-=4;
v[i]=0;
}
}
}
int main(){
FILE *fin, *fout;
int n,i;
char c;
fin=fopen("bool.in","r");
fout=fopen("bool.out","w");
read(fin);
fscanf(fin,"%d",&n);
fgetc(fin);
for(i=0;i<n;i++){
c=fgetc(fin);
valcar[c-'A']=(valcar[c-'A']+1)%2;
I=0;
fprintf(fout, "%d", OR());
}
fclose(fin);
fclose(fout);
return 0;
}