Pagini recente » Cod sursa (job #1306535) | Cod sursa (job #780871) | Cod sursa (job #1672747) | Cod sursa (job #1375629) | Cod sursa (job #2840841)
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
const int L=1e3;
const int N=1e2;
const int NL=26;
char s[L+1], schimb[N+1];
int pas;
bool value[NL];
bool calc();
bool element();
bool nr();
bool calc()
{
bool sau=element();
while(s[pas]=='|')
{
pas++;
bool t=element();
sau=(sau || t);
}
return sau;
}
bool element()
{
bool shi=nr();
while(s[pas]=='&')
{
pas++;
bool f=nr();
shi=(shi && f);
}
return shi;
}
bool nr()
{
bool kon,sign=true;
while(s[pas]=='!')
{
pas++;
sign=(!sign);
}
if(s[pas]=='(')
{
pas++;
kon=calc();
pas++;
if(!sign)
kon = (!kon);
return kon;
}
if(s[pas] == '0')
{
kon=false;
}
else if(s[pas]=='1')
kon=true;
else
kon=value[s[pas]-'A'];
pas++;
if(!sign)
kon = (!kon);
return kon;
}
void change()
{
int i=0,m=0;
while(s[i]!='\0')
{
if(s[i]=='T' && s[i+1]=='R')
{
s[m++]='1';
i=i+4;
}
else if(s[i]=='F' && s[i+1]=='A')
{
s[m++]='0';
i=i+5;
}
else if(s[i]=='N' && s[i+1]=='O')
{
s[m++]='!';
i=i+3;
}
else if(s[i]=='A' && s[i+1]=='N')
{
s[m++]='&';
i=i+3;
}
else if(s[i]=='O' && s[i+1]=='R')
{
s[m++]='|';
i=i+2;
}
else if(s[i]!=' ')
s[m++]=s[i++];
else
i++;
}
s[m]='\0';
}
int main()
{
int n,i;
fin.getline(s, L+1);
fin>>n;
fin>>schimb;
change();
for(i=0;i<n;i++)
{
value[schimb[i]-'A']=(!value[schimb[i]-'A']);
pas=0;
fout<<calc();
}
return 0;
}