Pagini recente » Cod sursa (job #1087752) | Cod sursa (job #1901879) | Cod sursa (job #38693) | Cod sursa (job #1435376) | Cod sursa (job #2643387)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
char str[10010], ch, *p;
int len, val[110];
void cod();
bool result();
bool nmb();
bool term();
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin.getline(str,1001);
len=strlen(str);
cod();
int N;
cin>>N;
while(N--)
{
cin>>ch;
val[ch-'A']=!val[ch-'A'];
p=str;
cout<<result();
}
cout<<'\n';
return 0;
}
bool nmb()
{
bool r=0;
if(*p=='!')
{
++p;
r=term();
}
else if(isalpha(*p))
{
r=val[(*p-'A')];
++p;
}
else if(isdigit(*p))
{
r=(*p-'0');
++p;
}
return r;
}
bool term()
{
bool r=0;
if(*p=='(')
{
++p;
r=result();
++p;
}
else
r=nmb();
return r;
}
bool element()
{
bool r=term();
if(*p=='&')
{
++p;
r&=element();
}
return r;
}
bool result()
{
bool r=element();
if(*p=='|')
{
++p;
r|=element();
}
return r;
}
void cod()
{
int nlen=0;
char aux[10010];
aux[nlen]='\0';
for(int i=0; i<len; )
if(isalpha(str[i]) || isdigit(str[i]))
{
if(str[i]=='T' && str[i+1]=='R')
{
aux[nlen++]='1';
aux[nlen]='\0';
i+=4;
}
else if(str[i]=='F' && str[i+1]=='A')
{
aux[nlen++]='0';
aux[nlen]='\0';
i+=5;
}
else if(str[i]=='O' && str[i+1]=='R')
{
aux[nlen++]='|';
aux[nlen]='\0';
i+=2;
}
else if(str[i]=='A' && str[i+1]=='N')
{
aux[nlen++]='&';
aux[nlen]='\0';
i+=3;
}
else if(str[i]=='N' && str[i+1]=='O')
{
aux[nlen++]='!';
aux[nlen]='\0';
i+=3;
}
else {
aux[nlen++]=str[i++];
aux[nlen]='\0';
}
}
else if(str[i]=='(' || str[i]==')')
{
aux[nlen++]=str[i++];
aux[nlen]='\0';
}
else while(i<len && !(isalpha(str[i])||isdigit(str[i])||str[i]=='('||str[i]==')')) ++i;
str[0]='\0';
strcpy(str, aux);
len=nlen;
}