Pagini recente » Cod sursa (job #2649298) | Cod sursa (job #367648) | Cod sursa (job #38875) | Cod sursa (job #1375231) | Cod sursa (job #536288)
Cod sursa(job #536288)
#include<cstdio>
#include<string>
const int N=5000;
const int M=100;
char s[N],s1[N],ss[M],sep[]={' '},*p;
bool valoare[M];
int m,poz,n;
bool expresie();
bool termen();
void init()
{
int nr=0;
for (int i=0;s[i];++i)
{
if (s[i]==' ')
continue;
if (s[i]=='F' && s[i+1]=='A')
{
s1[nr++]='0',i+=4;
continue;
}
if (s[i]=='T' && s[i+1]=='R')
{
s1[nr++]='1',i+=3;
continue;
}
if (s[i]=='N' && s[i+1]=='O')
{
s1[nr++]='!',i+=2;
continue;
}
if (s[i]=='O' && s[i+1]=='R')
{
s1[nr++]='|',++i;
continue;
}
if (s[i]=='A' && s[i+1]=='N')
{
s1[nr++]='&',i+=2;
continue;
}
if (s[i]=='(')
{
s1[nr++]='(';
continue;
}
if (s[i]==')')
{
s1[nr++]=')';
continue;
}
s1[nr++]=s[i];
}
for (int i=0;i<N;++i)
s[i]=0;
}
void citire()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s);
scanf("%d\n",&m);
gets(ss);
init();
}
bool factor()
{
bool semn=true,rez;
while (s1[poz]=='!')
++poz,semn=!semn;
if (s1[poz]=='(')
{
poz++;
rez=expresie();
poz++;
if (semn)
return rez;
return !rez;
}
rez=valoare[s1[poz]-'A'];
poz++;
if (semn)
return rez;
return !rez;
}
bool termen()
{
bool rez=factor();
while (s1[poz]=='&')
{
poz++;
rez=rez&factor();
}
return rez;
}
bool expresie()
{
bool rez=termen();
while (s[poz]=='|')
++poz,rez=rez||termen();
return rez;
}
void afis()
{
poz=0;
bool p=expresie();
if (p)
printf("1");
else
printf("0");
}
void initstr()
{
for (int i=0;s1[i];++i)
{
if (s1[i]=='(' || s1[i]==')' || s1[i]=='1' || s1[i]=='0' || s1[i]=='|' || s1[i]=='&' || s1[i]=='!')
{
s[i]=s1[i];
continue;
}
s[i]=valoare[s1[i]-'A']+'0';
}
}
void rez()
{
for (int i=0;i<m;++i)
{
valoare[ss[i]-'A']=!valoare[ss[i]-'A'];
initstr();
afis();
}
}
int main()
{
citire();
rez();
return 0;
}