Pagini recente » Cod sursa (job #993481) | Cod sursa (job #512359) | Cod sursa (job #444116) | Cod sursa (job #2049370) | Cod sursa (job #271704)
Cod sursa(job #271704)
#include<stdio.h>
#include<string.h>
int n, i,a[100];
char p, e[2000];
void citire();
int EvalExpr(), EvalFactor(), EvalTermen();
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
citire();
scanf("%d\n",&n);
for (; n; n--){
scanf("%c", &p);
a[p-'A'] = !a[p-'A'];
i = 0;
printf("%d",EvalExpr());
}
return 0;
}
void citire(){
gets(e);
}
int EvalExpr(){
if (e[i] == ' ') i++;
int r = EvalTermen(),t;
if (e[i] == ' ') i++;
while (strncmp(e+i,"OR", 2)==0 ){
i += 2;
r |= EvalTermen();
}
return r;
}
int EvalTermen(){
if (e[i] == ' ') i++;
int r=EvalFactor();
if (e[i] == ' ') i++;
while (strncmp(e+i,"AND", 3)==0 ){
i += 3;
r &= EvalFactor();
}
return r;
}
int EvalFactor(){
if (e[i] == ' ') i++;
int f;
if (strncmp(e+i,"NOT", 3)==0 ){
i += 3;
f = ! EvalFactor();
}
else
if (e[i] == '(' ){
i++;
f = EvalExpr();
i++;
}
else
if (strncmp(e+i,"TRUE", 4)==0 ){
i += 4;
f = 1;
}
else
if (strncmp(e+i,"FALSE", 5)==0 ){
i += 5;
f = 0;
}
else
f = a[e[i]-'A'], i++;
return f;
}