Pagini recente » Cod sursa (job #1840912) | Cod sursa (job #1615660) | Cod sursa (job #1882197) | Cod sursa (job #374499) | Cod sursa (job #2539909)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
char expr[1010], ch, *p;
bool val[30];
void skipspace();
bool nr();
bool eval();
bool termen();
bool factor();
int main()
{
int N;
ios_base :: sync_with_stdio (false);
cin.tie(NULL);
cin.getline(expr,100001);
strcat(expr," ");
cin>>N;
for(int i=1; i<=N; ++i)
{
p=expr;
cin>>ch;
val[ch-'A']=!val[ch-'A'];
cout<<eval();
}
return 0;
}
bool eval()
{
bool r=termen();
skipspace();
while(*p=='O' && *(p+1)=='R')
{
p+=2;
skipspace();
r=r|termen();
}
return r;
}
bool termen()
{
bool r=factor();
skipspace();
while(*p=='A' && *(p+1)=='N'&&*(p+2)=='D')
{
p+=3;
skipspace();
r=r&termen();
}
return r;
}
bool factor()
{
bool r=0;
skipspace();
if(*p=='(')
{
++p;
skipspace();
r=eval();
++p;
skipspace();
}
else if((*p=='N' && *(p+1)=='O'&&*(p+2)=='T') || isalpha(*p))
r=nr();
return r;
}
bool nr()
{
bool r;
skipspace();
if(*p=='N' && *(p+1)=='O'&&*(p+2)=='T')
{
p+=3;
skipspace();
r=!(factor());
}
else if(isalpha(*p)){
r=val[*p-'A'];
++p;
skipspace();
}
return r;
}
void skipspace()
{
while(*p==' ')
++p;
}