Pagini recente » Cod sursa (job #1637536) | Cod sursa (job #1769569) | Cod sursa (job #2922112) | Cod sursa (job #118119) | Cod sursa (job #858261)
Cod sursa(job #858261)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int i,l,n,v[40],op[2010],st[2010],nu[2012];
char s[2010],s1[210];
void evaluareexp()
{
memset(nu,0,2000);
memset(st,0,2000);
int i,vf=0,vf1,j1,j;
for(i=0;i<=l;++i)
if(s[i]=='(')
{
++vf;
st[vf]=-1;
}
else
if(s[i]=='A'&&s[i+1]=='N')
{
i+=2;
op[vf+1]=1;
}
else
if(s[i]=='O'&&s[i+1]=='R')
{
++i;
op[vf+1]=2;
}
else
if(s[i]=='N'&&s[i+1]=='O')
{
i+=2;
nu[vf+1]=!nu[vf+1];
}
else
if(s[i]=='F'&&s[i+1]=='A')
{
i+=4;
++vf;
st[vf]=0;
}
else
if(s[i]=='T'&&s[i+1]=='R')
{
i+=3;
++vf;
st[vf]=1;
}
else
if(s[i]>='A'&&s[i]<='Z')
{
++vf;
st[vf]=v[s[i]-'A'];
if(nu[vf])
st[vf]=!st[vf],nu[vf]=0;
}
else
if(s[i]==')')
{
j=vf;
while(st[j]!=-1)
--j;
vf1=j+1;j1=j;
for(j+=2;j<=vf;++j)
if(op[j]==1)
{
st[vf1]=st[j]&&st[vf1];
}
else
++vf1,st[vf1]=st[j],op[vf1]=op[j];
vf=vf1;
for(j=j1+2;j<=vf;++j)
st[j1+1]=st[j]||st[j1+1];
st[j1]=st[j1+1];
vf=j1;
if(nu[vf])
st[vf]=!st[vf],nu[vf]=0;
}
vf1=1;
for(j=2;j<=vf;++j)
if(op[j]==1)
{
st[vf1]&=st[j];
}
else
++vf1,st[vf1]=st[j],op[vf1]=op[j];
vf=vf1;
for(j=2;j<=vf;++j)
st[1]|=st[j];
if(nu[1])
st[1]=!st[1],nu[vf]=0;
}
int main()
{
f.getline(s,2009);
l=strlen(s);
if(s[l]=='\n')
--l;
--l;
f>>n;
f.getline(s1,209);
f.getline(s1,209);
for(i=1;i<=n;++i)
{
v[s1[i-1]-'A']=!v[s1[i-1]-'A'];
evaluareexp();
g<<st[1];
}
return 0;
}