Pagini recente » Cod sursa (job #1178496) | Cod sursa (job #2792359) | Cod sursa (job #2129789) | Cod sursa (job #2134022) | Cod sursa (job #282081)
Cod sursa(job #282081)
#include <stdio.h>
char Expression[1001], *p=Expression;
int Alphabet[30];
int EvaluateExpression();
int EvaluateOr();
int EvaluateAnd();
int EvaluateNot();
int EvaluateExpression()
{
int Result;
Result=EvaluateOr();
while(*p == 'O' && *(p+1) == 'R')
{
p+=3;
Result|=EvaluateOr();
}
return Result;
}
int EvaluateOr()
{
int Result;
Result=EvaluateAnd();
while(*p == 'A' && *(p+1) == 'N' && *(p+2) == 'D')
{
p+=4;
Result&=EvaluateAnd();
}
return Result;
}
int EvaluateAnd()
{
int Result;
if(*p == 'N' && *(p+1) == 'O' && *(p+2) == 'T')
{
p+=4;
Result=EvaluateNot()^1;
}
else
Result=EvaluateNot();
return Result;
}
int EvaluateNot()
{
int Result;
if(*p=='(')
{
++p;
Result=EvaluateExpression();
++p;
}
else
if(*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E')
p+=6, Result=0;
else
if(*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E')
p+=5, Result=1;
else
Result=Alphabet[*p-'A'], p+=2;
return Result;
}
int main ()
{
char c;
int N, i;
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
do
{
scanf("%c", p++);
}
while(*(p-1)!='\n');
scanf("%d\n", &N);
for(i=0; i<N; ++i)
{
scanf("%c", &c);
Alphabet[c-'A']^=1;
p=Expression;
printf("%d", EvaluateExpression());
}
return 0;
}