Pagini recente » Cod sursa (job #3171398) | Cod sursa (job #205675) | Cod sursa (job #1654175) | Cod sursa (job #713962) | Cod sursa (job #271697)
Cod sursa(job #271697)
#include<stdio.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] = 1-a[p];
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 (e[i]=='O'&& e[i+1] == 'R'){
i+=2;
r = (r > (t=EvalTermen()) ? r : t);
}
return r;
}
int EvalTermen(){
if (e[i] == ' ') i++;
int r=EvalFactor(), t;
if (e[i] == ' ') i++;
while (e[i] == 'A' && a[i+1] == 'N'){
i+=3;
r = (r < (t = EvalFactor()) ? r : t);
}
return r;
}
int EvalFactor(){
if (e[i] == ' ') i++;
int f;
if (e[i] == 'N' && e[i+1] == 'O'){
i += 3;
f = 1-EvalFactor();
}
else
if (e[i] == '(' ){
i++;
f = EvalExpr();
i++;
}
else
if (e[i] == 'T' && e[i+1] == 'R'){
i += 4;
f = 1;
}
else
if (e[i] == 'F' && e[i+1] == 'A'){
i += 5;
f = 0;
}
else
{
i++;
f= a[e[i-1]];
}
return f;
}