Pagini recente » Cod sursa (job #563040) | Cod sursa (job #2103201) | Cod sursa (job #1761766) | Cod sursa (job #1292058) | Cod sursa (job #1496779)
#include<cstdio>
#define LEN 1000
#define N 100
using namespace std;
char S[LEN+1];
char modificari[N+1];
bool val[27];
int p;
bool expresie();
bool fact(){
bool R;
if (S[p]=='('){
p++;
R=expresie();
}
else
if (S[p]=='1' ||S[p]=='0') R=S[p]-'0';
else R=val[S[p]-'A'];
p++;
return R;
}
bool factor(){
bool R,sign=0;
while(S[p]=='!'){
p++;
sign^=1;
}
R=fact();
return R^sign;
}
bool termen(){
bool F=factor();
bool R;
R=F;
while(S[p]=='&'){
p++;
F=factor();
R=(R&&F);
}
return R;
}
bool expresie(){
bool T=termen();
bool R;
R=T;
while(S[p]=='|'){
p++;
T=termen();
R=(R||T);
}
return R;
}
void trans(){
int i,j;
i=0;
j=0;
while(S[i]!='\n' &&S[i]!='\0'){
if (S[i]==' ') i++;
else
if (S[i]=='A' &&S[i+1]=='N' &&S[i+2]=='D'){
S[j]='&';
j++;
i+=3;
}
else
if (S[i]=='O' &&S[i+1]=='R'){
S[j]='|';
j++;
i+=2;
}
else
if (S[i]=='N' &&S[i+1]=='O' &&S[i+2]=='T'){
S[j]='!';
j++;
i+=3;
}
else
if (S[i]=='T' &&S[i+1]=='R' &&S[i+2]=='U'){
S[j]='1';
j++;
i+=4;
}
else
if (S[i]=='F' &&S[i+1]=='A' &&S[i+2]=='L'){
S[j]='0';
j++;
i+=5;
}
else {
S[j]=S[i];
j++;
i++;
}
}
S[j]='\0';
}
int main(){
freopen ("bool.in","r",stdin);
freopen ("bool.out","w",stdout);
int n,i;
gets(S);
scanf ("%d\n",&n);
gets(modificari);
trans();
for(i=0;i<n;i++){
val[modificari[i]-'A']=(val[modificari[i]-'A']^1);
p=0;
modificari[i]=expresie()+'0';
}
puts(modificari);
return 0;
}