Pagini recente » Cod sursa (job #2961345) | Cod sursa (job #3291414) | Cod sursa (job #2586271) | Cod sursa (job #798663) | Cod sursa (job #282012)
Cod sursa(job #282012)
#include <stdio.h>
#include <string.h>
#include <iostream.h>
char Expression[1001];
bool Alphabet[26];
int L, i;
bool EvaluateExpression();
bool EvaluateOr();
bool EvaluateAnd();
bool EvaluateNot();
bool 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;
}
bool EvaluateExpression()
{
bool Result;
Result=EvaluateOr();
while(i<L && StriCmp(i, " OR "))
{
i+=4;
Result = Result || EvaluateOr();
}
return Result;
}
bool EvaluateOr()
{
bool Result;
Result=EvaluateAnd();
while(i<L && StriCmp(i, " AND "))
{
i+=5;
Result = Result && EvaluateAnd();
}
return Result;
}
bool EvaluateAnd()
{
bool Result;
if(StriCmp(i, "NOT "))
{
i+=4;
Result=!EvaluateNot();
}
else
Result=EvaluateNot();
return Result;
}
bool EvaluateNot()
{
bool Result;
if(i<L)
{
if(Expression[i]=='(')
{
i++;
Result=EvaluateExpression();
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;
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());
}
return 0;
}