Pagini recente » Cod sursa (job #2106361) | Cod sursa (job #1889118) | Cod sursa (job #1841743) | Cod sursa (job #1139332) | Cod sursa (job #2096218)
#include<bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
char c[1002];
char bun[1002];
int L=0,n;
char lt;
bool val[27];
char *p;
void init()
{
f.getline(c,1001);
int q=strlen(c);
for(int i=0;i<q;++i)
if(c[i]=='(' || c[i]==')')
bun[L++]=c[i];
else
if(c[i]>='A' && c[i]<='Z' && !(c[i+1]>='A' && c[i+1]<='Z'))
bun[L++]=c[i];
else
if(c[i]==' ')
continue;
else
if(c[i]=='T' && c[i+1]=='R')
bun[L++]='1',i+=3;
else
if(c[i]=='F' && c[i+1]=='A')
bun[L++]='0',i+=4;
else
if(c[i]=='A' && c[i+1]=='N')
bun[L++]='&',i+=2;
else
if(c[i]=='N' && c[i+1]=='O')
bun[L++]='!',i+=2;
else
if(c[i]=='O' && c[i+1]=='R')
bun[L++]='|',i+=2;
}
bool termen();
bool eval()
{
bool r = termen();
while (*p=='|'){
++p;
r|=termen();
}
return r;
}
bool termen()
{
bool r=0;
bool neg=0;
while(*p=='!')
{
++p;
neg=!neg;
}
if(*p=='(')
{
++p;
r=eval();
++p;
}
else
if(*p>='0' && *p<='1')
r=(*p-'0');
else
if(*p>='A' && *p<='Z')
r=val[*p-'A'];
if(neg)
r!=r;
while(*p=='&')
++p,r&=termen();
return r;
}
int main()
{
init();
f>>n;
for(int i=1;i<=n;++i)
{
f>>lt;
val[lt-'A']=1-val[lt-'A'];
p=bun;
if(eval())
g<<1;
else
g<<0;
}
return 0;
}