Pagini recente » Cod sursa (job #2324521) | Cod sursa (job #2734537) | Cod sursa (job #1023293) | Cod sursa (job #642825) | Cod sursa (job #1122612)
#include<stdio.h>
#include<string.h>
#define LMAX 1012
int i,lung;
char sir[LMAX];
int val[30];
// Semne: OR 0, AND 2
bool calc();
inline void ignore()
{
while(sir[i]==' ')
++i;
}
inline int get_type()
{
ignore();
switch(sir[i])
{
case 'O':{i+=2;return 0;}
case 'A':{i+=3;return 1;}
}
}
inline int get_num()
{
int rez=0,ok=0;
ignore();
while(sir[i]=='N'&&sir[i+1]=='O')
{
i+=4;
ok=1-ok;
}
switch(sir[i])
{
case '(':{++i;rez=calc();break;}
case 'T':{i+=4;rez=1;break;}
case 'F':{i+=5;rez=0;break;}
default :{++i;rez=val[sir[i-1]-'A'];break;}
}
if(ok)
return 1-rez;
return rez;
}
bool calc()
{
bool a,b,c,s1,s2;
a=b=c=s1=s2=0;
c=get_num();
if(sir[i]==')')
{
++i;
return c;
}
for(;i<lung;++i)
{
if(s2==0){
switch(s1)
{
case 0:{a=a|b;break;}
case 1:{a=a&b;break;}
}
b=c;
s1=s2;
}else if(s2==1){
b=b&c;
}
if(sir[i]==')')
{
s2=0;
c=0;
++i;
break;
}
ignore();
s2=get_type();
ignore();
c=get_num();
}
// FINISH
if(s2==0){
switch(s1)
{
case 0:{a=a|b;break;}
case 1:{a=a&b;break;}
}
b=c;
s1=s2;
}else if(s2==1){
b=b&c;
}
switch(s1)
{
case 0:{a=a|b;break;}
case 1:{a=a&b;break;}
}
return a;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n,rez;
char c;
gets(sir);
lung=strlen(sir);
scanf("%d\n",&n);
while(scanf("%c",&c))
{
if(c<'A'||c>'Z')
break;
val[c-'A']=1-val[c-'A'];
i=0;
rez=calc();
printf("%d",rez);
}
printf("\n");
return 0;
}