Pagini recente » Cod sursa (job #1296601) | Cod sursa (job #858086) | Cod sursa (job #983769) | Cod sursa (job #2249637) | Cod sursa (job #555933)
Cod sursa(job #555933)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char s[1001],ch;
int v[30];
int i,n,j;
int termen();
int factor();
int expresie() {
int x;
x=termen();
while (s[i]=='|') {
i++;
x|=termen();
}
return x;
}
int termen() {
int x,y;
x=factor();
while (s[i]=='&') {
i++;
x&=factor();
}
return x;
}
int factor() {
int x;
if (s[i]=='(') {
i++;
x=expresie();
i++;
}
else {
if (s[i]>='A' && s[i]<='Z') {
x=v[s[i]-'A'];
i++;
}
else
if (s[i]=='1' || s[i]=='0') {
x=s[i]-48;
i++;
}
else
if (s[i]=='!') {
i++;
x=!(expresie());
}
}
return x;
}
void prelucrare() {
int i,j;
i=0; j=0;
for (;i<=strlen(s);i++) {
if (s[i]=='(') s[j++]='(';
else if (s[i]==')') s[j++]=')';
else if (strncmp(s+i,"TRUE",4)==0) {
s[j++]='1';
i+=3;
}
else if (strncmp(s+i,"FALSE",5)==0) {
s[j++]='0';
i+=4;
}
else if (strncmp(s+i,"NOT",3)==0) {
s[j++]='!';
i+=2;
}
else if (strncmp(s+i,"OR",2)==0) {
s[j++]='|';
i+=1;
}
else if (strncmp(s+i,"AND",3)==0) {
s[j++]='&';
i+=3;
}
else if (s[i]>='A' && s[i]<='Z') s[j++]=s[i];
}
s[j+1]=NULL;
}
int main () {
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s);
prelucrare();
scanf("%d\n",&n);
for (j=1; j<=n; j++) {
scanf("%c",&ch);
v[ch-'A']=!v[ch-'A'];
i=0;
printf("%d",expresie());
}
printf("\n");
return 0;
}