Pagini recente » Cod sursa (job #259625) | Cod sursa (job #2370835) | Cod sursa (job #2413585) | Cod sursa (job #2725431) | Cod sursa (job #2864516)
#include <fstream>
#include <string>
#include <cstring>
#include <bitset>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
const int nmax=1e3;
char t[nmax+5];
bitset <30> val;
string s;
int i,n;
bool termen();
bool factor();
bool eval()
{
bool r=termen();
while(s[i]=='|')
{
i++;
r|=termen();
}
return r;
}
bool termen()
{
bool r=factor();
while(s[i]=='&')
{
i++;
r&=factor();
}
return r;
}
bool factor()
{
int r;
if(s[i]=='(')
{
i++;
r=eval();
}
else if(s[i]=='!')
{
i++;
r=!eval();
}
else if(isdigit(s[i]))
r=s[i]-'0';
else
r=val[s[i]-'A'];
i++;
return r;
}
int main()
{
in.getline(t,nmax+5);
while(t[i])
{
if(t[i]==' ')
i++;
else if(t[i]=='(' || t[i]==')')
s+=t[i++];
else if(isalpha(t[i]) && !isalpha(t[i+1]))
s+=t[i++];
else if(t[i]=='O' && t[i+1]=='R')
{
s+='|';
i+=2;
}
else if(t[i]=='A' && t[i+1]=='N')
{
s+='&';
i+=3;
}
else if(t[i]=='N' && t[i+1]=='O')
{
s+='!';
i+=3;
}
else if(t[i]=='T' && t[i+1]=='R')
{
s+='1';
i+=4;
}
else if(t[i]=='F' && t[i+1]=='A')
{
s+='0';
i+=5;
}
}
in>>n;
for(int j=1; j<=n; j++)
{
char ch;
in>>ch;
val[ch-'A']=1-val[ch-'A'];
i=0;
out<<eval();
}
return 0;
}