利用真值表法求取主析取范式以与主合取范式的实现副本.docx

上传人:b****7 文档编号:11061078 上传时间:2023-02-24 格式:DOCX 页数:13 大小:15.50KB
下载 相关 举报
利用真值表法求取主析取范式以与主合取范式的实现副本.docx_第1页
第1页 / 共13页
利用真值表法求取主析取范式以与主合取范式的实现副本.docx_第2页
第2页 / 共13页
利用真值表法求取主析取范式以与主合取范式的实现副本.docx_第3页
第3页 / 共13页
利用真值表法求取主析取范式以与主合取范式的实现副本.docx_第4页
第4页 / 共13页
利用真值表法求取主析取范式以与主合取范式的实现副本.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

利用真值表法求取主析取范式以与主合取范式的实现副本.docx

《利用真值表法求取主析取范式以与主合取范式的实现副本.docx》由会员分享,可在线阅读,更多相关《利用真值表法求取主析取范式以与主合取范式的实现副本.docx(13页珍藏版)》请在冰豆网上搜索。

利用真值表法求取主析取范式以与主合取范式的实现副本.docx

利用真值表法求取主析取范式以与主合取范式的实现副本

#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;i2

if(T2[i2]==T1[i1])

d=0;

if(d==1)

{

T2[j]=T1[i1];

j++;

}

d=1;

}

}

printf("\n输出真值表如下:

\n\n");

for(i1=0;i1

printf("%c",T2[i1]);

printf("");

puts(T1);

printf("\n");

for(i1=0;i1

T3[i1]=0;

for(i2=0;i2

printf("%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;i2

printf("%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;i

if(ckh[i]==')')

break;

for(j=wz[i-1]+1,h=0;j

xs1[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;i

if(T1[i]=='!

')

{

for(i1=0;i1

if(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;i1

T1[i1]=T1[i1+1];

}

p1=-1;

j1=j;

for(i=0;i

if(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;i1

T1[i1]=T1[i1+2];

i=i-1;

}

for(i=0;i

if(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;i1

T1[i1]=T1[i1+2];

i--;

}

for(i=0;i

if(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;i1

T1[i1]=T1[i1+2];

i--;

}

for(i=0;i

if(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;i1

T1[i1]=T1[i1+2];

i--;

}

returndt[j+1];

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1