Pagini recente » Cod sursa (job #1026357) | Cod sursa (job #2804419) | Cod sursa (job #1495580) | Cod sursa (job #2972439) | Cod sursa (job #349692)
Cod sursa(job #349692)
#include<cstdio>
#define N 1005
const int M=(int)'Z'+1;
char s[N],s1[N],s2[N],*p;
short int nr,n;
bool b[M];
bool eval();
bool termen();
bool factor();
bool valoare();
void citire()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(s,N-1,stdin);
scanf("%hd\n",&n);
fgets(s1,N,stdin);
}
void sir()
{
p=s;
while (*p&&*p!='\n')
{
if (*p=='A')
{
++p;
if (*p=='N')
{
s2[nr++]='&';
++p;
++p;
}
else
s2[nr++]='A';
continue;
}
if (*p=='O')
{
++p;
if (*p=='R')
{
s2[nr++]='|';
++p;
}
else
s2[nr++]='O';
continue;
}
if (*p=='T')
{
++p;
if (*p=='R')
{
s2[nr++]='1';
++p;
++p;
++p;
}
else
s2[nr++]='T';
continue;
}
if (*p=='F')
{
++p;
if (*p=='A')
{
s2[nr++]='0';
++p;
++p;
++p;
++p;
}
else
s2[nr++]='F';
continue;
}
if (*p=='N')
{
++p;
if (*p&&*p=='O')
{
s2[nr++]='!';
++p;
++p;
}
else
s2[nr++]='N';
continue;
}
if (*p=='(')
{
s2[nr++]='(';
++p;
continue;
}
if (*p==')')
{
s2[nr++]=')';
++p;
continue;
}
if (*p>='A'&&*p<='Z')
s2[nr++]=*p;
++p;
}
--nr;
}
bool valoare()
{
bool r=0;
if (*p=='(')
{
++p;
r=eval();
++p;
}
else
if(*p=='1'||*p=='0'||(*p>='A'&&*p<='Z'))
{
if (*p=='1')
r=1;
else
if(*p=='0')
r=0;
else
if (*p>='A'&&*p<='Z')
r=b[*p-'A'];
++p;
}
return r;
}
bool factor()
{
bool r=0;
while (*p=='!')
{
++p;
r=valoare();
if (r)
return 0;
return 1;
}
r=valoare();
return r;
}
bool termen()
{
bool r=factor();
while (*p=='&')
{
++p;
r&=factor();
}
return r;
}
bool eval()
{
bool r=termen();
while (*p=='|')
{
++p;
r=r|termen();
}
return r;
}
void teste()
{
char *p1;
p1=s1;
while(*p1>='A'&&*p1<='Z')
{
if (b[*p1-'A'])
b[*p1-'A']=0;
else
b[*p1-'A']=1;
++p1;
p=s2;
//printf("%s",s2);
printf("%d",eval());
}
}
int main()
{
citire();
sir();
//printf("%s",s2);
teste();
return 0;
}