Pagini recente » Cod sursa (job #2328272) | Cod sursa (job #1781803) | Cod sursa (job #923817) | Cod sursa (job #2667422) | Cod sursa (job #339651)
Cod sursa(job #339651)
#include <stdio.h>
#include <string.h>
#define N 1<<10
#define OR v[poz]=='O' && v[poz+1]=='R'
#define AND v[poz]=='A' && v[poz+1]=='N' && v[poz+2]=='D'
#define NOT v[poz]=='N' && v[poz+1]=='O' && v[poz+2]=='T'
#define TRUE v[poz]=='T' && v[poz+1]=='R' && v[poz+2]=='U' && v[poz+3]=='E'
#define FALSE v[poz]=='F' && v[poz+1]=='A' && v[poz+2]=='L' && v[poz+3]=='S' && v[poz+4]=='E'
#define LITERA v[poz]>='A' && v[poz]<='Z'
#define LIT op[poz]>='A' && op[poz]<='Z'
char v[N],op[N];
int par[N],n,poz,r;
int rang2();
int rang3();
int expr();
int rang1()
{
int rez=rang2(),rez2;
while (op[poz]=='|')
{
poz++;
rez2=rang2();
if (rez==0 && rez2==0)
rez=0;
else
rez=1;
}
return rez;
}
int rang2()
{
int rez=rang3(),rez2;
while (op[poz]=='&')
{
poz++;
rez2=rang3();
if (rez && rez2)
rez=1;
else
rez=0;
}
return rez;
}
int rang3()
{
int rez=0;
while (op[poz]=='!')
{
poz++;
rez=expr();
if (rez==1)
rez=0;
else
rez=1;
}
return rez;
}
int expr()
{
int rez=0;
if (op[poz]=='1')
{
poz++;
return 1;
}
if (op[poz]=='0')
{
poz++;
return 0;
}
if (LIT)
{
if (par[(int)op[poz]-64]%2)
rez=1;
else
rez=0;
poz++;
}
if (op[poz]=='(')
{
poz++;
rez=rang1();
poz++;
}
return rez;
}
void remaking()
{
poz=1;
while (v[poz]!='\n')
{
if (AND)
{
op[++r]='&';
poz+=3;
continue;
}
if (OR)
{
op[++r]='|';
poz+=2;
continue;
}
if (TRUE)
{
op[++r]='1';
poz+=4;
continue;
}
if (FALSE)
{
op[++r]='0';
poz+=5;
continue;
}
if (NOT)
{
op[++r]='!';
poz+=3;
continue;
}
if (v[poz]==' ')
{
poz++;
continue;
}
op[++r]=v[poz];
poz++;
}
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int i;
fgets(v+1,N,stdin);
remaking();
char x;
scanf("%d\n",&n);
for (i=1; i<=n; i++)
{
scanf("%c",&x);
par[(int)x-64]++;
poz=1;
printf("%d",rang1());
}
return 0;
}