Pagini recente » Cod sursa (job #3193531) | Cod sursa (job #2673190) | Cod sursa (job #1346159) | Cod sursa (job #185370) | Cod sursa (job #1539656)
#include <stdio.h>
#include <stdlib.h>
char v[1000],op1,op2;
char vt[1000];
char vp[1000];
int stk[1000],sp;
int val[30];
void push(char c){
stk[sp++]=c;
}
char pop(){
return stk[--sp];
}
int main(){
char ch;
int i=0,len,j,n;
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
i=0;
while(3){
scanf("%c",&ch);
if(ch=='\n' || ch=='\r'){
break;
}
v[i]=ch;
i++;
}
v[i]=0;
len=i;
j=0;
for(i=0;i<len;i++){
if((v[i]>='A' && v[i]<='Z') && !(v[i+1]>='A' && v[i+1]<='Z') ){
vt[j++]=v[i];
continue;
}
if(v[i]=='A' ){
vt[j++]='*';
i+=2;
continue;
}
if(v[i]=='O' ){
vt[j++]='+';
i+=1;
continue;
}
if(v[i]=='T' ){
vt[j++]='1';
i+=3;
continue;
}
if(v[i]=='F' ){
vt[j++]='0';
i+=4;
continue;
}
if(v[i]=='N' ){
vt[j++]='!';
i+=2;
continue;
}
if(v[i]=='(' || v[i]==')'){
vt[j++]=v[i];
}
}
len=j;
// for(i=0;i<len;i++){
// printf("%c",vt[i]);
// }
// printf("\n");
j=0;
for(i=0;i<len;i++){
if((vt[i]>='A' && vt[i]<='Z') || vt[i]=='1' || vt[i]=='0'){
vp[j++]=vt[i];
continue;
}
if(sp==0){
push(vt[i]);
continue;
}
if(vt[i]=='+'){
ch=pop();
if(ch=='('){
push(ch);
push(vt[i]);
}else{
vp[j++]=ch;
push(vt[i]);
}
continue;
}
if(vt[i]=='*'){
ch=pop();
if(ch=='+' || ch=='('){
push(ch);
push(vt[i]);
}else{
vp[j++]=ch;
push(vt[i]);
}
continue;
}
if(vt[i]=='!'){
ch=pop();
if(ch=='!'){
vp[j++]=ch;
push(vt[i]);
}else{
push(ch);
push(vt[i]);
}
continue;
}
if(vt[i]=='('){
push(vt[i]);
continue;
}
if(vt[i]==')'){
ch=pop();
if(ch!='('){
vp[j++]=ch;
i--;
continue;
}else{
continue;
}
}
}
for(;sp;sp--){
vp[j++]=stk[sp-1];
}
len=j;
// for(i=0;i<len;i++){
// printf("%c",vp[i]);
// }
scanf("%d",&n);
scanf("%c",&ch);
for(i=0;i<n;i++){
sp=0;
scanf("%c",&ch);
val[ch-'A']=!val[ch-'A'];
for(j=0;j<len;j++){
if(vp[j]>='A' && vp[j]<='Z'){
push(val[vp[j]-'A']);
continue;
}
if(vp[j]=='0' || vp[j]=='1'){
push(vp[j]-'0');
continue;
}
if(vp[j]=='+'){
op1=pop();
op2=pop();
if(op1==1 || op2==1){
push(1);
}else{
push(0);
}
continue;
}
if(vp[j]=='*'){
op1=pop();
op2=pop();
if(op1==1 && op2==1){
push(1);
}else{
push(0);
}
continue;
}
if(vp[j]=='!'){
op1=pop();
op1=!op1;
push(op1);
continue;
}
}
printf("%d",stk[0]);
}
return 0;
}