Pagini recente » Cod sursa (job #2141113) | Cod sursa (job #3267757) | Cod sursa (job #2384602) | Cod sursa (job #2648562) | Cod sursa (job #282036)
Cod sursa(job #282036)
#include <stdio.h>
#include <string.h>
#include <iostream.h>
char Expression[1001];
int Alphabet[30];
int L;
int EvaluateExpression(int &i);
int EvaluateOr(int &i);
int EvaluateAnd(int &i);
int EvaluateNot(int &i);
int StriCmp(int k, const char *string)
{
for(int l=strlen(string), t=0; t<l && k<L; t++, k++)
if(string[t++]!=Expression[k++])
return false;
return true;
}
int EvaluateExpression(int &i)
{
int Result, r;
Result=EvaluateOr(i);
while(i<L && StriCmp(i, " OR "))
{
i+=4;
r=EvaluateOr(i);
Result=Result||r;
}
return Result;
}
int EvaluateOr(int &i)
{
int Result, r;
Result=EvaluateAnd(i);
while(i<L && StriCmp(i, " AND "))
{
i+=5;
r=EvaluateAnd(i);
Result=Result&&r;
}
return Result;
}
int EvaluateAnd(int &i)
{
int Result, r;
if(StriCmp(i, "NOT "))
{
i+=4;
r=EvaluateNot(i);
Result=!r;
}
else
Result=EvaluateNot(i);
return Result;
}
int EvaluateNot(int &i)
{
int Result;
if(i<L)
{
if(Expression[i]=='(')
{
i++;
Result=EvaluateExpression(i);
i++;
}
else
if(Expression[i]>='A'&&Expression[i]<='Z' && Expression[i+1]!='A' && Expression[i+1]!='R')
Result=Alphabet[Expression[i]-'A'], i++;
else
if(StriCmp(i, "FALSE"))
i+=5, Result=false;
else
if(StriCmp(i, "TRUE"))
i+=4, Result=true;
}
return Result;
}
int main ()
{
char c;
int N, i;
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
cin.getline(Expression, 1001);
cin>>N;
L=strlen(Expression);
for(int j=0; j<N; j++)
{
cin>>c;
Alphabet[c-'A']=!Alphabet[c-'A'];
i=0;
printf("%d", EvaluateExpression(i));
}
return 0;
}