Pagini recente » Cod sursa (job #2542579) | Cod sursa (job #314923) | Cod sursa (job #3208812) | Cod sursa (job #637636) | Cod sursa (job #1247573)
#include<cstdio>
using namespace std;
const int lMax = 1005, sMax = 105;
char S[lMax];
int p,cnt;
bool vals[sMax];
char expresie();
char andt();
char nott();
void init();
int main (){
FILE *in = fopen("bool.in","r");
FILE *out = fopen("bool.out","w");
fgets(S,lMax - 1,in);
init();
int n;
fscanf(in,"%d\n", &n);
char x;
for(int i = 0; i < n; ++i){
fscanf(in,"%c", &x);
vals[x-'A'] = !vals[x-'A'];
p=0;
x=expresie();
fprintf(out,"%d",x);
}
return 0;
}
char nott(){
char semn = 1, rez;
while (S[p]==4){
semn=-semn;
p++;
}
if(S[p]=='('){
p++;
rez=expresie();
p++;
}
if(S[p]==1 || S[p]==0){
rez=S[p];
p++;
}else if(S[p]>='A' && S[p]<='Z'){
rez=vals[S[p]-'A'];
p++;
}
rez=semn==1?rez:!rez;
return rez;
}
char andt(){
char rez = nott();
while(S[p]==3){
p++;
rez&=nott();
}
return rez;
}
char expresie(){
char rez = andt();
while(S[p]==2){
p++;
rez|=andt();
}
return rez;
}
void init (){
int i = 0;
while(S[i]!=0 && S[i]!='\n'){
if(S[i]=='O' && S[i+1]=='R'){
S[cnt++]=2;
i+=2;
}else if(S[i]=='A' && S[i+1]=='N' && S[i+2]=='D'){
S[cnt++]=3;
i+=3;
}else if(S[i]=='N' && S[i+1]=='O' && S[i+2]=='T'){
S[cnt++]=4;
i+=3;
}else if(S[i]=='T' && S[i+1]=='R' && S[i+2]=='U' && S[i+3]=='E'){
S[cnt++]=1;
i+=4;
}else if(S[i]=='F' && S[i+1]=='A' && S[i+2]=='L' && S[i+3]=='S' && S[i+4]=='E'){
S[cnt++]=0;
i+=5;
}
else if(S[i]!=' '){
S[cnt++]=S[i];
i++;
}else{
i++;
}
}
S[cnt]=100;
}