Pagini recente » Cod sursa (job #3217184) | Cod sursa (job #1432980) | Cod sursa (job #2463085) | Cod sursa (job #722183) | Cod sursa (job #632455)
Cod sursa(job #632455)
#include<cstdio>
int n,p,i,u=-1,q,val;
char ex[1010],s[1010],sc[110],cs[1100];
bool v[100];
using namespace std;
bool expresie();
bool orr();
bool andd ();
void read()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(ex);
scanf("%d\n",&n);
gets(sc);
}
bool expresie()
{
bool vl;
bool semn=1;
while(cs[p]=='!')
{
p++;
semn=!semn;
}
if(cs[p]=='(')
{
p++;
vl=andd();
p++;
if(semn)
return vl;
else
return !vl;
}
if(cs[p]=='0')
vl=0;
else
vl=1;
p++;
if(semn)
return vl;
else
return !vl;
}
bool orr()
{
bool rez=expresie();
while(cs[p]=='&')
{
p++;
rez=rez & expresie();
}
return rez;
}
bool andd()
{
bool rez=orr();
while(cs[p]=='|')
{
p++;
rez=rez | orr();
}
return rez;
}
int litera(char c)
{
if(c>='A' && c<='Z')
return 1;
return 0;
}
void parsare()
{
for(i=0;ex[i]!='\0';i++)
{
if((i!=0 && litera(ex[i]) && !litera(ex[i-1]) && !litera(ex[i+1])) || i==0)
s[++u]=ex[i];
if(!litera(ex[i]) && ex[i]!=' ')
s[++u]=ex[i];
if(ex[i]=='N' && ex[i+1]=='O')
{
s[++u]='!';
i+=2;
continue;
}
if(ex[i]=='A' && ex[i+1]=='N')
{
s[++u]='&';
i+=2;
continue;
}
if(ex[i]=='O' && ex[i+1]=='R')
{
s[++u]='|';
i++;
continue;
}
if(ex[i]=='T' && ex[i+1]=='R')
{
s[++u]='1';
i+=3;
continue;
}
if(ex[i]=='F' && ex[i+1]=='A')
{
s[++u]='0';
i+=3;
continue;
}
}
}
void rez()
{
p=0;
parsare();
for(q=0;q<n;q++)
{
val=sc[q]-'A';
if(v[val]==1)
v[val]=0;
else
v[val]=1;
for(i=0;i<=u;i++)
if(litera(s[i]))
{
val=s[i]-'A';
if(v[val]==1)
cs[i]='1';
else
cs[i]='0';
}
else
cs[i]=s[i];
p=0;
val=expresie();
printf("%d",val);
}
printf("\n");
}
int main()
{
read();
rez();
return 0;
}