利用真值表法求取主析取范式以与主合取范式的实现副本.docx
《利用真值表法求取主析取范式以与主合取范式的实现副本.docx》由会员分享,可在线阅读,更多相关《利用真值表法求取主析取范式以与主合取范式的实现副本.docx(13页珍藏版)》请在冰豆网上搜索。
![利用真值表法求取主析取范式以与主合取范式的实现副本.docx](https://file1.bdocx.com/fileroot1/2023-2/24/73ee2405-12a5-444c-a640-260fa39a0d34/73ee2405-12a5-444c-a640-260fa39a0d341.gif)
利用真值表法求取主析取范式以与主合取范式的实现副本
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"math.h"
#defineN50
voidpd(intb[N],intf);
intH1(charT1[N],charT2[N],intT3[N],inty);
intH2(charT1[N],charT2[N],intT3[N],inty);
intmain()
{
inti1,i2,d=1,T3[N],kh=0,jg,j=0,y;
intw=0,hequ[N],h=0,x=0,xiqu[N];
charT1[N],T2[N],T10[N],s;
hequ[0]=-1;
xiqu[0]=-1;
printf("#########################################\n");
printf("##用!
表示否定##\n");
printf("##用&表示合取##\n");
printf("##用|表示析取##\n");
printf("##用^表示条件##\n");
printf("##用~表示双条件##\n");
printf("#########################################\n\n");
printf("请输入一个合法的命题公式:
\n");
gets(T1);
strcpy(T10,T1);
for(i1=0;i1{
if(T1[i1]==')'||T1[i1]=='(')
kh++;
if(T1[i1]>='a'&&T1[i1]<='z'||T1[i1]>='A'&&T1[i1]<='Z')
{
for(i2=0;i2if(T2[i2]==T1[i1])
d=0;
if(d==1)
{
T2[j]=T1[i1];
j++;
}
d=1;
}
}
printf("\n输出真值表如下:
\n\n");
for(i1=0;i1printf("%c",T2[i1]);
printf("");
puts(T1);
printf("\n");
for(i1=0;i1T3[i1]=0;
for(i2=0;i2printf("%d",T3[i2]);
jg=H1(T1,T2,T3,y);
if(jg==0)
hequ[h++]=w;
else
xiqu[x++]=w;
printf("%d\n",jg);
strcpy(T1,T10);
for(i1=0;i1<(int)pow(2,j)-1;i1++)
{
++w;
pd(T3,j-1);
jg=H1(T1,T2,T3,y);
if(jg==0)
hequ[h++]=w;
else
xiqu[x++]=w;
strcpy(T1,T10);
for(i2=0;i2printf("%d",T3[i2]);
printf("%d\n",jg);
}
if(hequ[0]==-1)
printf("\n该命题公式不存在主合取范式。
\n");
else
{
printf("\n主合取范式:
\n\t");
for(i1=0;i1{
if(i1>0)
printf("/\\");
printf("M(%d)",hequ[i1]);
}
}
if(xiqu[0]==-1)
printf("\n该命题公式不存在主析取范式。
\n");
else
{
printf("\n\n主析取范式:
\n\t");
for(i1=0;i1{
if(i1>0)
printf("\\/");
printf("m(%d)",xiqu[i1]);
}
}
printf("\n");
getch();
}
voidpd(intb[N],intf)
{
inti;
i=f;
if(b[f]==0)
b[f]=1;
else
{
b[f]=0;
pd(b,--i);
}
}
intH1(charT1[N],charT2[N],intT3[N],inty)
{
inti,j,h,s,kh=0,wz[N],a;
charxs1[N],ckh[N];
s=strlen(T1);
for(i=0;i
if(T1[i]=='('||T1[i]==')')
{
wz[kh]=i;
ckh[kh]=T1[i];
kh++;
}
if(kh==0)
returnH2(T1,T2,T3,y);
else
{
for(i=0;iif(ckh[i]==')')
break;
for(j=wz[i-1]+1,h=0;jxs1[h]=T1[j];
xs1[h]='\0';
a=H2(xs1,T2,T3,y);
if(a==1)
T1[wz[i-1]]=1;
else
T1[wz[i-1]]=-2;
for(j=wz[i-1]+1;j
T1[j]=T1[j+wz[i]-wz[i-1]];
T1[j]='\0';
returnH1(T1,T2,T3,y);
}
}
intH2(charT1[N],charT2[N],intT3[N],inty)
{
inti,h=0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1,s;
chardt[N];
s=strlen(T1);
if(s==1)
if(T1[0]==-2)
return0;
else
return1;
else
{
for(i=0;iif(T1[i]=='!
')
{
for(i1=0;i1if(T1[i+1]==T2[i1])
p1=T3[i1];
if(T1[i+1]==-2)
p1=0;
if(p1==-1)
p1=T1[i+1];
dt[j+2]=!
p1;
T1[i]=j+2;
j++;
p1=0;
for(i1=i+1;i1T1[i1]=T1[i1+1];
}
p1=-1;
j1=j;
for(i=0;iif(T1[i]=='&')
{
for(i1=0;i1{
if(T1[i-1]==T2[i1])
p1=T3[i1];
if(T1[i+1]==T2[i1])
p2=T3[i1];
}
for(i2=2;i2{
if(T1[i-1]==i2)
p1=dt[i2];
if(T1[i+1]==i2)
p2=dt[i2];
}
if(T1[i-1]==-2)
p1=0;
if(T1[i+1]==-2)
p2=0;
if(p1==-1)
p1=(int)(T1[i-1]);
if(p2==-1)
p2=(int)(T1[i+1]);
dt[j+2]=p1&&p2;
T1[i-1]=j+2;
j++;
j2++;
p1=-1;
p2=-1;
for(i1=i;i1T1[i1]=T1[i1+2];
i=i-1;
}
for(i=0;iif(T1[i]=='|')
{
for(i1=0;i1{
if(T1[i-1]==T2[i1])
if(T1[i+1]==T2[i1])
p2=T3[i1];
}
for(i2=2;i2{
if(T1[i-1]==i2)
p1=dt[i2];
if(T1[i+1]==i2)
p2=dt[i2];
}
if(T1[i-1]==-2)
p1=0;
if(T1[i+1]==-2)
p2=0;
if(p1==-1)
p1=T1[i-1];
if(p2==-1)
p2=T1[i+1];
dt[j+2]=p1||p2;
T1[i-1]=j+2;
j++;
j3++;
p1=-1;
p2=-1;
for(i1=i;i1T1[i1]=T1[i1+2];
i--;
}
for(i=0;iif(T1[i]=='^')
{
for(i1=0;i1{
if(T1[i-1]==T2[i1])
p1=T3[i1];
if(T1[i+1]==T2[i1])
p2=T3[i1];
}
for(i2=2;i2{
if(T1[i-1]==i2)
p1=dt[i2];
if(T1[i+1]==i2)
p2=dt[i2];
}
if(T1[i-1]==-2)
p1=0;
if(T1[i+1]==-2)
p2=0;
if(p1==-1)
p1=T1[i-1];
if(p2==-1)
p2=T1[i+1];
dt[j+2]=!
p1||p2;
T1[i-1]=j+2;
j++;
j4++;
p1=-1;
p2=-1;
for(i1=i;i1T1[i1]=T1[i1+2];
i--;
}
for(i=0;iif(T1[i]=='~')
{
for(i1=0;i1{
if(T1[i-1]==T2[i1])
p1=T3[i1];
if(T1[i+1]==T2[i1])
p2=T3[i1];
}
for(i2=2;i2{
if(T1[i-1]==i2)
p1=dt[i2];
if(T1[i+1]==i2)
p2=dt[i2];
}
if(T1[i-1]==-2)
p1=0;
if(T1[i+1]==-2)
p2=0;
if(p1==-1)
p1=T1[i-1];
if(p2==-1)
p2=T1[i+1];
dt[j+2]=(!
p1||p2)&&(!
p2||p1);
T1[i-1]=j+2;
j++;
j5++;
p1=-1;
p2=-1;
for(i1=i;i1T1[i1]=T1[i1+2];
i--;
}
returndt[j+1];
}
}