Pagini recente » Cod sursa (job #286231) | Cod sursa (job #2772418) | Cod sursa (job #983598) | Cod sursa (job #1961967) | Cod sursa (job #1496607)
#include <cstdio>
#define MAXN 1000
int val[26], p;
char s[MAXN+10];
int expresie();
int termen();
int factor();
int factor(){
int x=0, f=1;
while((s[p]=='N')&&(s[p+1]=='O')&&(s[p+2]=='T')){
f=(f==0);
p+=3;
}
if(s[p]=='('){
p++;
x=expresie();
p++;
}else if((s[p]=='T')&&(s[p+1]=='R')&&(s[p+2]=='U')&&(s[p+3]='E')){
p+=4;
x=1;
}else if((s[p]=='F')&&(s[p+1]=='A')&&(s[p+2]=='L')&&(s[p+3]=='S')&&(s[p+4]=='E')){
p+=5;
x=0;
}else{
x=val[s[p]-'A'];
p++;
}
return (x==f);
}
int termen(){
int x=factor();
while((s[p]=='A')&&(s[p+1]=='N')&&(s[p+2]=='D')){
p+=3;
x&=factor();
}
return x;
}
int expresie(){
int x=termen();
while((s[p]=='O')&&(s[p+1]=='R')){
p+=2;
x|=termen();
}
return x;
}
int main(){
int n, q, i;
char ch;
FILE *fin, *fout;
fin=fopen("bool.in", "r");
fout=fopen("bool.out", "w");
ch=fgetc(fin);
n=0;
while(ch!='\n'){
if(ch!=' '){
s[n++]=ch;
}
ch=fgetc(fin);
}
fscanf(fin, "%d ", &q);
for(i=0; i<q; i++){
ch=fgetc(fin);
val[ch-'A']=(val[ch-'A']==0);
p=0;
fprintf(fout, "%d", expresie());
}
fclose(fin);
fclose(fout);
return 0;
}