Gongshigongshi(a1,a2);//初始化一个类的对象.
gongshi.operator1();//调用该类的主操作函数,实现目的.
return0;
}
//1.3自动生成主析取范式和主合取范式
#include
#include
usingnamespacestd;
classGongshi{//得到任意公式真值表的类
private:
stringyuanshimingti;//用来保存输入的原始公式。
stringguodu;//过渡用的字符串。
stringzuijian;//保存命题变元的字符串。
intnum;//原子命题个数
public:
Gongshi(stringa)//构造函数
{
yuanshimingti=a;
guodu="00000000000000000000";//初始化为0000....为了更好的储存数据
zuijian="00000000000000000000";
huoquzimu();//调用设置函数
}
voidhuoquzimu()//得到原子命题的函数
{
intk=0;
for(inti=0;yuanshimingti[i]!
=0;i++)
if((yuanshimingti[i]>='a')&&(yuanshimingti[i]<='z')){//原子命题必须是小写字母
guodu[k]=yuanshimingti[i];
k++;
}
guodu[k]='\0';//字符串结束符
setguodu();//调用函数,去掉重复的
}
voidsetguodu()//化简所得到的命题变元,去掉重复的。
{
intk=1;
zuijian[0]=guodu[0];
for(inti=1;guodu[i]!
=0;i++){
if(jianyan(guodu[i],i)){
zuijian[k]=guodu[i];
k++;
}
}
guodu[k]='\0';
num=k;//记下命题变元的个数
}
booljianyan(chara,intn)//检验是否重复的子函数
{
for(inti=0;iif(a==zuijian[i])
return0;
}
return1;
}
voidoperator1()//主操作函数1
{
intz=0,y=0;
inttrue1[30],qq1=0;
intfalse1[30],qq2=0;
for(inti=0;icout<cout<inta=1;//用来储存一共有多少种解释。
for(i=0;ia=a*2;
//分2^num种情况,来解释真值表
intb=0,c[10]={0,0,0,0,0,0,0,0,0,0};
for(i=0;iintd=b;
for(intj=0;j//将十进制转化为二进制
c[j]=d%2;
d=(int)d/2;
}
for(j=num-1;j>-1;j--){
cout<}
b++;
stringcc="0000000000";
for(j=0;jif(c[j]==1)
cc[j]='1';
else
cc