Pagini recente » Cod sursa (job #1888003) | Cod sursa (job #559580) | Cod sursa (job #1645346) | Cod sursa (job #2708764) | Cod sursa (job #1939997)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n,k,z,pointer;
char x,line[1005],s[1005],curchar;
bool alp[30];
bool or_or(bool);
bool termen(bool);
bool negatie();
void readnextchar()
{
curchar=s[pointer];
pointer++;
}
void proces()
{
for(int i=0;i<z;i++)
{
if(line[i]=='A' && line[i+1]=='N'){
s[k++]='&';
i+=2;
}
else if(line[i]=='O' && line[i+1]=='R'){
s[k++]='|';
i++;
}
else if(line[i]=='N' && line[i+1]=='O'){
s[k++]='!';
i+=2;
}
else if(line[i]=='F' && line[i+1]=='A'){
s[k++]='0';
i+=4;
}
else if(line[i]=='T' && line[i+1]=='R'){
s[k++]='1';
i+=3;
}
else if(line[i]!=' ')
s[k++]=line[i];
}
}
bool negatie()
{
if(curchar=='!'){
readnextchar();
return !negatie();
}
else if(curchar == '1'){
readnextchar();
return true;
}
else if(curchar == '0'){
readnextchar();
return false;
}
else if(curchar == '('){
readnextchar();
bool b = or_or(0);
readnextchar();
return b;
}
else{
bool b = alp[curchar-'A'];
readnextchar();
return b;
}
}
bool termen(bool answer)
{
bool r = negatie();
if(curchar == '&'){
readnextchar();
return termen(answer & r);
}
return (answer & r);
}
bool or_or(bool answer)
{
bool r = termen(1);
if(curchar == '|'){
readnextchar();
return or_or(answer | r);
}
return (answer | r);
}
int main()
{
fin.getline(line,1005);
fin>>n;
z=strlen(line);
proces();
for(int i=0; i<n; i++)
{
fin>>x;
alp[x-'A']=!alp[x-'A'];
pointer=0;
readnextchar();
fout<<or_or(0);
}
fin.close();
fout.close();
return 0;
}