Pagini recente » Cod sursa (job #598731) | Cod sursa (job #3181633) | Cod sursa (job #52918) | Cod sursa (job #2499734) | Cod sursa (job #3140222)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
const int Lmax=10001;
int pos, n;
char sir[Lmax];
bool v[27];
bool eval2(), eval3(), eval4();
bool eval1(){
bool r=eval2();
while (sir[pos]=='|'){
pos++;
r|=eval2();
}
return r;
}
bool eval2(){
bool r=eval3();
while (sir[pos]=='&'){
pos++;
r&=eval3();
}
return r;
}
bool eval3(){
bool r=0;
if (sir[pos]=='!'){
pos++;
r=!eval3();
}
else{
r=eval4();
}
return r;
}
bool eval4(){
bool r=0;
if (sir[pos]=='('){
pos++;
r=eval1();
pos++;
}
else{
if (sir[pos]=='0')
r=0;
else if (sir[pos]=='1')
r=1;
else if (sir[pos]>='A' && sir[pos]<='Z')
r=v[sir[pos]-'A'];
pos++;
}
return r;
}
int main()
{
sir[0]=fin.get();
while (sir[pos]!='\n'){
if (pos>=2 && sir[pos]=='D' && sir[pos-1]=='N'){
sir[pos-2]='&';
pos-=2;
}
else if (pos>=1 && sir[pos]=='R' && sir[pos-1]=='O'){
sir[pos-1]='|';
pos--;
}
else if (pos>=2 && sir[pos]=='T' && sir[pos-1]=='O'){
sir[pos-2]='!';
pos-=2;
}
else if (pos>=3 && sir[pos]=='E' && sir[pos-1]=='U'){
sir[pos-3]='1';
pos-=3;
}
else if (pos>=4 && sir[pos]=='E' && sir[pos-1]=='S'){
sir[pos-4]='0';
pos-=4;
}
else if (sir[pos]==' '){
pos--;
}
pos++;
sir[pos]=fin.get();
}
fin>>n;
char ch;
for (int i=0; i<n; i++){
fin>>ch;
v[ch-'A']=1-v[ch-'A'];
pos=0;
fout<<eval1();
}
return 0;
}