Pagini recente » Cod sursa (job #1452383) | Cod sursa (job #1013510) | Cod sursa (job #911434) | Cod sursa (job #3151963) | Cod sursa (job #535391)
Cod sursa(job #535391)
#include<cstdio>
#include<string>
const int N=1005;
const int M=30;
char s[N],s1[N],ss[M],sep[]={' '},*p;
bool valoare[M];
int m,poz;
bool expresie();
bool termen();
void init()
{
p=strtok(s,sep);
while (p)
{
if (strcmp(p,"NOT")==0)
strcat(s1,"!"),p=strtok(NULL,sep);
else
if (strcmp(p,"OR")==0)
strcat(s1,"|"),p=strtok(NULL,sep);
else
if (strcmp(p,"AND")==0)
strcat(s1,"&"),p=strtok(NULL,sep);
else
strcat(s1,p),p=strtok(NULL,sep);
}
int nr=0;
for (int i=0;i<N;++i)
s[i]=0;
for (int i=0;i<N-1;++i)
if (s1[i]=='T' && s1[i+1]=='R')
{
s[nr++]='1';
i+=3;
}
else
if (s1[i]=='F' && s1[i+1]=='A')
{
s[nr++]='0';
i+=4;
}
else
s[nr++]=s1[i];
}
void citire()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s);
scanf("%d\n",&m);
gets(ss);
init();
}
bool termen()
{
bool val=false;
if (s[poz]=='(')
{
++poz;
val=expresie();
++poz;
return val;
}
if (s[poz]>='A' && s[poz]<='Z')
val=valoare[s[poz]-'A'],++poz;
return val;
}
bool expresie()
{
bool rez=termen();
while (s[poz]=='|' || s[poz]=='&')
{
if (s[poz]=='|')
++poz,rez=rez||termen();
if (s[poz]=='&')
++poz,rez=rez&&termen();
}
return rez;
}
void afis()
{
bool p=expresie();
if (p)
printf("1");
else
printf("0");
}
void rez()
{
for (int i=0;i<m;++i)
{
valoare[ss[i]-'A']=!valoare[ss[i]-'A'];
afis();
}
}
int main()
{
citire();
rez();
return 0;
}