Pagini recente » Cod sursa (job #476188) | Cod sursa (job #1833017) | Cod sursa (job #3001159) | Borderou de evaluare (job #1743721) | Cod sursa (job #627361)
Cod sursa(job #627361)
#include<stdio.h>
bool expresie();
bool termen();
int operat();
bool non();
bool adv();
bool fals();
bool adun();
char *p,s[1002],f['Z'+5];
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n,i; char z;
gets(s);scanf("%d\n",&n);
for(i=1;i<=n;i++)
{
scanf("%c",&z);
if(f[z]==false)
f[z]=true;
else f[z]=false;
p=s;
if(expresie()==true)
{
printf("1");
continue;
}
printf("0");
}
return 0;
}
bool expresie()
{
bool x,y;
x=adun();++p;
while(operat()==2)
{
p+=3;
y=termen();
if(x||y)
x=true;
else x=false;
}
return x;
}
bool adun()
{
bool x,y,ad;
x=termen();++p;
while(operat()==1)
{
p+=4;
y=termen();
if(x&y)
x=true;
else x=false;
}
return x;
}
bool termen()
{
int semn=1;bool x;
while(non())
{
semn*=-1;
}
if(*p=='(')
{
++p;
if(adv())
return true;
if(fals())
return false;
x=expresie();
++p;
if((semn==1&&x==true)||(semn==-1&&x==false))
return true;
else return false;
}
++p;
x=f[*(p-1)];
if((semn==1&&x==true)||(semn==-1&&x==false))
return true;
else return false;
}
int operat()
{
if(*p=='A'&&*(p+1)=='N')
{
//p+=3;
return 1;
}
if(*p=='O'&&*(p+1)=='R')
{
//p+=2;
return 2;
}
return 0;
}
bool adv()
{
if(*p=='T'&&*(p+1)=='R')
{
p+=4;
return true;
}
return false;
}
bool fals()
{
if(*p=='F'&&*(p+1)=='A')
{
p+=5;
return true;
}
return false;
}
bool non()
{
if(*p=='N'&&*(p+1)=='O')
{
p+=4;
return true;
}
return false;
}