Pagini recente » Cod sursa (job #1816770) | Cod sursa (job #2290155) | Cod sursa (job #1752222) | Cod sursa (job #2554447) | Cod sursa (job #281934)
Cod sursa(job #281934)
#include <stdio.h>
#include <string.h>
#include <iostream.h>
char e[1001];
enum bool {false, true};
bool alf[26]={false};
int L, N, i;
bool EvaluareExpresie();
bool EvaluareOr();
bool EvaluareAnd();
bool extra(int k, char string[])
{
char temp[100];
int t=0, l=strlen(string);
while(k<L && e[k]!=' ' &&t<l)
temp[t++]=e[k++];
temp[t]=0;
if(!strcmp(temp, string))
return true;
else
return false;
}
bool EvaluareExpresie()
{
bool rez;
rez=EvaluareOr();
while(i<L && extra(i, "OR"))
{
i+=3;
rez = rez || EvaluareOr();
}
return rez;
}
bool EvaluareOr()
{
bool rez;
rez=EvaluareAnd();
while(i<L && extra(i, "AND"))
{
i+=4;
rez = rez && EvaluareAnd();
}
return rez;
}
bool EvaluareAnd()
{
bool rez;
if(e[i]=='(')
{
i++;
rez=EvaluareExpresie();
i++;
}
else
if(extra(i, "NOT"))
{
i+=4;
rez=!EvaluareExpresie();
}
else
if(e[i]>='A'&&e[i]<='Z' && (e[i+1]==' ' || e[i+1]==')' || i+1==L))
{
rez=alf[e[i]-'A'];
i+=2;
}
else
if(extra(i, "FALSE"))
{
i+=6;
return false;
}
else if(extra(i, "TRUE"))
{
i+=5;
return true;
}
return rez;
}
int main ()
{
char c;
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
cin.getline(e, 1001);
cin>>N;
L=strlen(e);
for(int j=0; j<N; j++)
{
cin>>c;
alf[c-'A']=!alf[c-'A'];
i=0;
printf("%d", EvaluareExpresie());
}
return 0;
}