Pagini recente » Cod sursa (job #3234572) | Cod sursa (job #440240) | Cod sursa (job #2385911) | Cod sursa (job #463243) | Cod sursa (job #3142722)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
char s1[1010];
char s[1010];
char *p;
bool v[30];
bool eval();
bool si();
bool sau();
bool sau()
{
bool r;
if(*p=='!')
{
p++;
r=!sau();
}
if(*p=='(')
{
p++;
r=eval();
p++;
}
if(isalnum(*p))
{
if(*p=='1')
r=true;
if(*p=='0')
r=false;
if(isalpha(*p))
r=v[*p-'A'];
p++;
}
return r;
}
bool si()
{
bool r=sau();
while(*p=='&')
{
p++;
if(*p=='!')
{
p++;
r=r&!sau();
}
else
{
r=r&sau();
}
}
return r;
}
bool eval()
{
bool r=si();
while(*p=='|')
{
p++;
if(*p=='!')
{
p++;
r=r|!si();
}
else
{
r=r|si();
}
}
return r;
}
int main()
{
int n;
fin.getline(s1,1010);
fin>>n;
char a;
int r=0;
p=s1;
while(*p!='\000')
{
if(isalpha(*(p)) && !isalpha(*(p-1)) && !isalpha(*(p+1)))
{
s[r++]=*p;
p++;
}
if(*p==' ')
p++;
if(*p==')')
{
p++;
s[r++]=')';
}
if(*p=='(')
{
p++;
s[r++]='(';
}
if(*p=='A' && *(p+1)=='N')
{
s[r++]='&';
p=p+4;
}
if(*p=='O' && *(p+1)=='R')
{
s[r++]='|';
p=p+3;
}
if(*p=='T' && *(p+1)=='R')
{
s[r++]='1';
p=p+4;
}
if(*p=='F' && *(p+1)=='A')
{
s[r++]='0';
p=p+5;
}
if(*p=='N' && *(p+1)=='O')
{
s[r++]='!';
p=p+4;
}
}
for(int k=1;k<=n;k++)
{
fin>>a;
p=s;
v[a-'A']=!v[a-'A'];
fout<<eval();
}
return 0;
}