Pagini recente » Cod sursa (job #1151793) | Cod sursa (job #79462) | Cod sursa (job #2140786) | Cod sursa (job #565916) | Cod sursa (job #2165919)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1001
char s[MAXN], aux[MAXN];
int lit[30], p, n;
bool OR();
bool expr();
bool AND();
bool expr(){
bool semn=0, val=0;
if(s[p]=='('){
p++;
val=OR();
p++;
}
else{
if(s[p]=='1' || s[p]=='0'){
val=s[p]-'0';
p++;
}
else{
if(s[p]=='!'){
p++;
val=1-expr();
}
else{
val=lit[s[p]-'A'];
p++;
}
}
}
return val;
}
bool AND(){
bool val=expr();
while(p<=n && s[p]=='&'){
p++;
val&=expr();
}
return val;
}
bool OR(){
bool val=AND();
while(p<=n && s[p]=='|'){
p++;
val |= AND();
}
return val;
}
int main(){
FILE*fin=fopen("bool.in", "r");
FILE*fout=fopen("bool.out", "w");
int i, k;
char c;
c=fgetc(fin);
n=0;
while(c!='\n'){
while(c==' ')
c=fgetc(fin);
if(c=='('|| c==')'){
n++;
s[n]=c;
c=fgetc(fin);
}
i=0;
while(isalpha(c)){
aux[i++]=c;
c=fgetc(fin);
}
aux[i] = 0;
if(i==1)
s[++n]=aux[0];
else{
if(strcmp(aux, "NOT")==0)
s[++n]='!';
if(strcmp(aux, "OR")==0)
s[++n]='|';
if(strcmp(aux, "AND")==0)
s[++n]='&';
if(strcmp(aux, "TRUE")==0)
s[++n]='1';
if(strcmp(aux, "FALSE")==0)
s[++n]='0';
}
}
for(i=1; i<=n; i++)
printf("%c", s[i]);
fscanf(fin, "%d", &k);
c=fgetc(fin);
while(!isalpha(c))
c=fgetc(fin);
for(i=1; i<=k; i++){
lit[c-'A']^=1;
p=0;
fprintf(fout, "%d", OR());
c=fgetc(fin);
}
return 0;
}