Pagini recente » Diferente pentru home intre reviziile 902 si 628 | Profil BogdanFaciuIntaiul | Diferente pentru utilizator/saitama intre reviziile 14 si 15 | Istoria paginii utilizator/moraru1 | Cod sursa (job #551444)
Cod sursa(job #551444)
#include<stdio.h>
#include<string.h>
#define Nmax 1100
int n=0,i,j,b[Nmax],nr,val[Nmax];
char a[Nmax],x,s[Nmax],*p=s;
int exp();
int f();
int t();
void initializare()
{
int q=0;
for(int i=0;s[i];i++)
{
if(s[i]==' ') continue;
if(s[i]=='T' && s[i+1]=='R' && s[i+2]=='U' && s[i+3]=='E')
{
i+=3;
a[++q]=1;continue;
}
if(s[i]=='F' && s[i+1]=='A' && s[i+2]=='L' && s[i+3]=='S' && s[i+4]=='E')
{
i+=4;
a[++q]=0;continue;
}
if(s[i]=='N' && s[i+1]=='O' && s[i+2]=='T')
{
i+=2;
a[++q]='!';continue;
}
if(s[i]=='O' && s[i+1]=='R')
{
i+=1;
a[++q]='|';continue;
}
if(s[i]=='A' && s[i+1]=='N' && s[i+2]=='D')
{
i+=2;
a[++q]='&';continue;
}
if(s[i]=='(')
{
a[++q]='(';continue;
}
if(s[i]==')')
{
a[++q]=')';continue;
}
a[++q]=s[i];
}
}
int eval()
{
int semn=f();
while (a[i]=='|')
{
i++;
semn|=f();
}
return semn;
}
int f()
{
int semn=t();
while (a[i]=='&')
{
i++;
semn&=t();
}
return semn;
}
int t()
{
int semn=1;
while (a[i]=='!')
{
if (semn==0) semn=1;
else semn=0;
i++;
}
if (a[i]=='(')
{
i++;
int r=eval();
i++;
if (semn==1) return r;
return (!r);
}
int r;
if (a[i]=='0') r=0;
if (a[i]=='1') r=1;
if (a[i]!='0'&&a[i]!='1') r=val[a[i]];
i++;
if (semn==1) return r;
return (!r);
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s);
initializare();
scanf("%d\n",&nr);
for (int ii=1;ii<=nr;ii++)
{
scanf("%c",&x);
if (val[x]==0) val[x]=1;
else val[x]=0;
i=1;
printf("%d",eval());
}
return 0;
}