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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "math.h"

#define N 50

void pd(int b[N],int f);

int H1 (char T1[N], char T2[N], int T3[N], int y);

int H2 (char T1[N], char T2[N], int T3[N], int y);

int main()

{

int i1,i2,d=1,T3[N],kh=0,jg,j=0,y;

int w=0,hequ[N],h=0,x=0,xiqu[N];

char T1[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;

}

}

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)

2

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();

}

void pd(int b[N],int f) {

int i;

i=f;

if(b[f]==0)

b[f]=1;

else

{

b[f]=0;

pd(b,--i);

}

}

int H1 (char T1[N],char T2[N],int T3[N],int y) {

int i,j,h,s,kh=0,wz[N],a;

char xs1[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)

return H2(T1,T2,T3,y);

else

{

for(i=0;i

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

3

break;

for(j=wz[i-1]+1,h=0;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]='\0';

相关文档
最新文档