#include \#include \#include \#include \#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(\ printf(\ 用!表示否定 ##\\n\ printf(\ 用&表示合取 ##\\n\ printf(\ 用|表示析取 ##\\n\ printf(\ 用^表示条件 ##\\n\ printf(\ 用~表示双条件 ##\\n\ printf(\
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 T2[j]=T1[i1]; j++; } d=1; } } 1 printf(\输出真值表如下:\\n \\n\ for(i1=0;i1 printf(\ printf(\ puts(T1); printf(\ for(i1=0;i1 for(i2=0;i2 printf(\ jg=H1(T1,T2,T3,y); if(jg==0) hequ[h++]=w; else xiqu[x++]=w; printf(\ %d\\n\ 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(\ printf(\ %d\\n\ } if(hequ[0]==-1) printf(\该命题公式不存在主合取范式。\\n\ else { printf(\主合取范式:\\n\\t\ for(i1=0;i1 if (i1>0) printf(\ printf(\ } } if(xiqu[0]==-1) 2 printf(\该命题公式不存在主析取范式。\\n\ else { printf(\主析取范式:\\n\\t\ for(i1=0;i1 printf(\ } } printf(\ 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 3 break; for(j=wz[i-1]+1,h=0;j 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 return H1(T1,T2,T3,y); } } int H2(char T1[N],char T2[N],int T3[N],int y) { int i,h=0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1,s; char dt[N]; s=strlen(T1); if(s==1) if(T1[0]==-2) return 0; else return 1; else { for(i=0;i for(i1=0;i1 for(i1=i+1;i1 4
相关推荐: