Pagini recente » Cod sursa (job #2039357) | Cod sursa (job #1929117) | Cod sursa (job #2760072) | Cod sursa (job #1655660) | Cod sursa (job #1952875)
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i,j,n,m,k;
int v[103];
char x;
char s[1003],t[1003];
int OR();
int AND();
int XOR();
int FIN();
int OR(){
int r=AND();
while(t[i]=='|'){
i++;
r=(r | AND());
}
return r;
}
int AND(){
int r=XOR();
while(t[i]=='&') {
i++;
r=(r & XOR());
}
return r;
}
int XOR(){
int r=FIN();
while(t[i] == '!') {
i++;
r=(r^FIN());
}
return r;
}
int FIN(){
int r;
if (t[i]=='(') {
i++;
r=OR();
i++;
}
else{
if(t[i]=='1'){
i++;
return 1;
}
if(t[i]=='0'){
i++;
return 0;
}
return v[t[i++]];
}
return r;
}
int main(){
fin.get(s,1003);
k=strlen(s);
for(i=0;i<k;i++){
if(s[i]==' '){
continue;
}
if(s[i]=='O' && s[i+1]=='R'){
t[n++]='|';
i++;
continue;
}
if(s[i]=='A' && s[i+1]=='N'){
t[n++]='&';
i+=2;
continue;
}
if(s[i]=='N' && s[i+1]=='O'){
t[n++]='1';
t[n++]='!';
i+=2;
continue;
}
if(s[i]=='T' && s[i+1]=='R'){
t[n++]='1';
i+=3;
continue;
}
if(s[i]=='F' && s[i+1]=='A'){
t[n++]='0';
i+=4;
continue;
}
if(s[i]=='(' || s[i]==')'){
t[n++]=s[i];
continue;
}
t[n++]=s[i];
}
fin>>m;
for(j=1;j<=m;j++){
fin>>x;
v[x]=1-v[x];
i=0;
fout<<OR();
}
return 0;
}