Pagini recente » Cod sursa (job #1274904) | Cod sursa (job #2544379) | Cod sursa (job #37996) | Cod sursa (job #379896) | Cod sursa (job #281959)
Cod sursa(job #281959)
#include <stdio.h>
#include <string.h>
#include <iostream.h>
char e[1001];
bool alf[30]={false};
int L, N, i;
bool EvaluareExpresie();
bool EvaluareOr();
bool EvaluareAnd();
bool extra(int k, const 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();
if(e[i]==' ')
i++;
while(i<L && extra(i, "OR"))
{
i+=3;
rez = rez || EvaluareOr();
}
return rez;
}
bool EvaluareOr()
{
bool rez;
rez=EvaluareAnd();
if(e[i]==' ')
i++;
while(i<L && extra(i, "AND"))
{
i+=4;
rez = rez && EvaluareAnd();
}
return rez;
}
bool EvaluareAnd()
{
bool rez;
if(e[i]=='(')
{
i++;
rez=EvaluareExpresie();
i++;
if(e[i]==' ')
i++;
}
else
if(extra(i, "NOT"))
{
i+=4;
rez=!EvaluareExpresie();
}
else
if(e[i]>='A'&&e[i]<='Z' && !(e[i+1]>='A' && e[i+1]<='Z'))
{
rez=alf[e[i]-'A'];
++i;
if(e[i]==' ')
++i;
}
else
if(extra(i, "FALSE"))
{
i+=5;
if(e[i]==' ')
i++;
return false;
}
else if(extra(i, "TRUE"))
{
i+=4;
if(e[i]==' ')
i++;
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());
}
if(N==0)
printf("%d", EvaluareExpresie());
return 0;
}