Pagini recente » Cod sursa (job #1070948) | Cod sursa (job #707795) | Cod sursa (job #213468) | Cod sursa (job #2956355) | Cod sursa (job #1948901)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i, n, f[410], k;
char v[1010],c, s[1010];
int expresie(), termen(),factor(),AND();
int expresie()
{
int r=AND();
while(s[i]=='|')
{
i++;
r=(r|AND());
}
return r;
}
int AND()
{
int r=termen();
while(s[i]=='&')
{
i++;
r=(r&termen());
}
return r;
}
int termen()
{
int r=factor();
while(s[i]=='!')
{
i++;
r=(r^factor());
}
return r;
}
int factor()
{
int r=0;
if(s[i]=='(')
{
i++;
r=expresie();
i++;
}
else
{
if(s[i]>='A'&&s[i]<='Z')
{
r=f[s[i]];
i++;
}
else
{
r=s[i]-'0';
i++;
}
}
return r;
}
int main()
{
fin.get(v, 1000);
for(i=0;v[i]!=0;i++)
{
if(v[i]=='A'&&v[i+1]=='N')
{
s[++k]='&';
i+=2;
}
else
if(v[i]=='O'&&v[i+1]=='R')
{
s[++k]='1';
s[++k]='|';
i+=1;
}
else
if(v[i]=='N'&&v[i+1]=='O')
{
s[++k]='!';
i+=2;
}
else
if(v[i]=='F'&&v[i+1]=='A')
{
s[++k]='0';
i+=4;
}
else
if(v[i]=='T' && v[i+1]=='R')
{
s[++k]='1';
i+=3;
}
else
if(v[i]!=' ')
{
s[++k]=v[i];
}
}
fin>>n;
int j;
for(j=1;j<=n;j++)
{
fin>>c;
f[c]=1-f[c];
i=1;
fout<<expresie();
}
fin.close();
fout.close();
return 0;
}