Pagini recente » Cod sursa (job #1027416) | Cod sursa (job #1055071) | Cod sursa (job #2289688)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i,n,k1,k2;
int st1[501],pr[200];
char s[1005],st2[501],var[101];
bool val[100];
int eval(int K1,int K2,char semn)
{
if(semn=='!')
{
if(st1[K1]==0)
return 1;
else if(st1[K1]==1)
return 0;
}
else if(semn=='&')
{
if(st1[K1]==2&&st1[K2]==2)
return 1;
return 0;
}
else if(semn=='|')
{
if(st1[K1]==2||st1[K2]==2)
return 1;
return 0;
}
}
int main()
{
pr['|']=1;
pr['&']=2;
pr['!']=3;
pr['(']=0;
fin.getline(s,1005);
fin>>n;
fin.get();
fin.get(var+1,101);
for(int ii=1;ii<=n;ii++)
{
if(val[var[ii]]==0)
val[var[ii]]=1;
else
val[var[ii]]=0;
memset(st1,0,sizeof(st1));
memset(st2,0,sizeof(st2));
for(i=0;s[i]!=0;i++)
{
if(s[i]>='A'&&s[i]<='Z')
{
char aux[7]={0};
int len=0;
while(s[i]>='A'&&s[i]<='Z')
{
len++;
aux[len-1]=s[i];
i++;
}
i--;
if(len==1)
st1[++k1]=val[aux[0]];
else if(len==2)
st2[++k1]='|';
else if(len==3)
{
if(aux[0]=='N')
st2[++k2]='!';
else
st2[++k2]='&';
}
else if(len==4)
st1[++k1]=1;
else
st1[++k1]=0;
}
else if(s[i]=='(')
st2[++k2]='(';
else if(s[i]==')')
{
while(st1[k1]!='(')
{
int rez=eval(k1,k1-1,st2[k2]);
k1--;k2--;
st1[k1]=rez;
}
k1--;
}
else
{
while(k2>0&&k1>0&&pr[st2[k2]]>=pr[s[i]])
{
int rez=eval(k1,k1-1,st2[k2]);
k1--;
k2--;
st2[k2]=rez;
}
st2[++k2]=s[i];
}
}
fout<<st1[1];
}
return 0;
}