#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define MAX 1024+10
/**************
输入文件test.txt
求不超过二元连接符集合的最小完全集输入文件:wqj.txt
输出文件output.txt
输入样例格式:test.txt
求真值时:
¬fa(ps∨q→ps∨q,q→q)∨p↔⊕q→ga(p∨q→q,qs,q)∨ps (可以有空格)
#fa 2 1010 (名称、元数、真值表最后一列为这样的格式,井号之后可换行输入)
ga 2 11001010
判断完全集时
#f 3 11000010
g 0 1
求不超过二元连接符集合的最小完全集时
#
二元以内所有连接符
***************/
typedef struct/**运算数栈和运算符栈**/
{
int data[MAX];
wchar_t op[MAX][10];
int top;
} stack;
stack stnum,stackop;
int prinum=9;
int lst=15,rst=14;
struct node/**定义左优先级和右优先级**/
{
wchar_t ch[10];
int pri;
} lpri[40]= {{L"#",0},{L"(",1},{L"^",3},{L"~",5},{L"-",7},{L"|",9},{L"&",11},{L"!",13},{L")",100}},
rpri[40]= {{L"#",0},{L"(",100},{L"^",2},{L"~",4},{L"-",6},{L"|",8},{L"&",10},{L"!",12},{L")",1}};
int leftpri(wchar_t op[])/**求运算符的左优先级**/
{
int i;
for(i=0; i<prinum; i++)
if(!wcscmp(lpri[i].ch,op))return lpri[i].pri;
}
int rigpri(wchar_t op[])/**求运算符的右优先级**/
{
int i;
for(i=0; i<prinum; i++)
if(!wcscmp(rpri[i].ch,op))return rpri[i].pri;
}
int pricmp(wchar_t op1[],wchar_t op2[])/**比较两个运算符的优先级**/
{
if(leftpri(op1)==rigpri(op2))return 0;
else if(leftpri(op1)<rigpri(op2))return -1;
else return 1;
}
struct postex/**定义后缀表达式的数据结构**/
{
wchar_t name[10];//变元或连接符的名
int no; //标志
int nof;
} postexp[MAX];
int postlen;
int isop(wchar_t cs[])/**判断是否是连接符**/
{
int i;
for(i=0; i<prinum; i++)
{
if(wcscmp(cs,lpri[i].ch)==0)
return 1;
}
return 0;
}
int preop(wchar_t ch)/**判断数字、逗号、连接符**/
{
wchar_t op[10];
op[0]=ch;
op[1]=L'\0';
int i;
for(i=0; i<9; i++)
{
if(wcscmp(op,lpri[i].ch)==0)
return 1;
}
if(ch==L',')return 2;
else if(ch>=L'0'&&ch<=L'9')return 3;
else return 0;
}
int trans(wchar_t *exp) /**中缀表达式转后缀**/
{
//wprintf(L"%ls\n",exp);
stackop.top=-1;
int i=0,j,k,cas,que,flag;
stackop.top++;
wcscpy(stackop.op[stackop.top],L"#");
wchar_t tmp[10];
int leng=0;
while(*exp!=L'\r'&&*exp!=L'\0'&&*exp!=L' ')
{
wcsset(tmp,L'\0',sizeof(tmp));
//wcscpy(tmp,L"");
que=preop(*exp);
if(que==0)//不是经典的逻辑连接符
{
if(!((*exp>=L'a'&&*exp<=L'z')||(*exp>=L'A'&&*exp<=L'Z'))) //当前逻辑连接符或变元首字符不是字母
{
wprintf(L"当前逻辑连接符或变元首字符不是字母 error!\n");
return 0;
}
//tmpbuf[leng++]=*exp;
k=0;
while(preop(*exp)==0||preop(*exp)==3)//&&(*exp)!=',')//提取变元或自定义连接符
{
if(!((*exp>=L'a'&&*exp<=L'z')||(*exp>=L'A'&&*exp<=L'Z')||(*exp>=L'0'&&*exp<=L'9')))
{
wprintf(L"当前逻辑连接符或变元中有违规字符!\n");
return 0;
}
//tmpbuf[leng++]=*exp;
tmp[k++]=*exp;
exp++;
if(*exp==L'\r'||*exp==L'\0')break;
}
//exp--;
tmp[k]=L'\0';
}
else if(que==3)
{
if((*(exp+1)>=L'a'&&*(exp+1)<=L'z')||(*(exp+1)>=L'a'&&*(exp+1)<=L'z')||(*(exp+1)>=L'A'&&*(exp+1)<=L'Z')) //当前逻辑连接符或变元首字符不是字母
{
printf("0-1 defined error!\n");
return 0;
}
tmp[0]=*exp;
tmp[1]=L'\0';
exp++;
if(*exp==L'\r'||*exp==L'\0')break;
}
else if(que==1)
{
//tmpbuf[leng++]=*exp;
tmp[0]=*exp;
tmp[1]=L'\0';
}
else //逗号
{
if(*exp!=L','&&*exp!=L' ')
{
printf("标点定义错误!!!\n");
return 0;
}
//tmpbuf[leng++]=*exp;
//把前边栈顶的连接符弹出
while(wcscmp(stackop.op[stackop.top],L"(")!=0)
{
wcscpy(postexp[i++].name,stackop.op[stackop.top]);
//wprintf(L"出%ls\n",stackop.op[stackop.top]);
stackop.top--;
}
exp++;
}
if(que!=2)
{
cas=isop(tmp);
//printf("%d\n",cas);
if(cas==0) //逻辑变元
{
//j=0;
//while(*exp!=','||*exp!=')'||isop(*exp)==0)
//{
wcscpy(postexp[i++].name,tmp);
//wprintf(L"%ls\n",tmp);
if(*exp==L'\r')break; //?
//exp++;
//}
//postexp[i][j]='\0';
//memset(nop,'\0',sizeof(nop));
}
else if(cas==1) //连接符
{
flag=0;
if(que==0)
{
for(j=9; j<prinum; j++)
{
if(!wcscmp(lpri[j].ch,tmp))
{
flag=1;
break;
}
}
if(!flag)
{
wprintf(L"没有定义这个逻辑连接符!!\n");
return 0;
}
}
switch(pricmp(stackop.op[stackop.top],tmp))
{
case -1:
stackop.top++;
wcscpy(stackop.op[stackop.top],tmp);
//wprintf(L"入%ls\n",tmp);
if(que==1)
exp++;
break;
case 0:
stackop.top--;
//pop(stackop);
/*if(!strcmp(stackop.op[stackop.top],"f")||!strcmp(stackop.op[stackop.top],"g"))
{
strcpy(postexp[i++],stackop.op[stackop.top]);
pop(stackop);
}*/
//wprintf(L"出(\n");
exp++;
break;
case 1:
wcscpy(postexp[i++].name,stackop.op[stackop.top]);
//wprintf(L"出%ls\n",stackop.op[stackop.top]);
stackop.top--;
break;
}
//memset(nop,'\0',sizeof(nop));
}
/*else if(isop(*exp)==2)//自定义连接符
{
}*/
}
}
while(wcscmp(stackop.op[stackop.top],L"#")!=0) //把剩余元素出栈(连接符)
{
wcscpy(postexp[i++].name,stackop.op[stackop.top]);
//wprintf(L"出%ls\n",stackop.op[stackop.top]);
stackop.top--;
}
postlen=i;
return 1;
}
wchar_t str1[15][10]= {L"∧",L"∨",L"¬",L"→",L"↔",L"⊕"};
wchar_t str2[15][10]= {L"&",L"|",L"!",L"-",L"~",L"^"};
char strr[MAX];
wchar_t buf[MAX];
struct newfunc/**新定义逻辑连接符信息**/
{
wchar_t name[10];//名
int yuan; //元数
int zzbf[MAX]; //真值表最后一列
int no;
} newf[40],tnewf[40],nfunc[11][500][11],ffunc[11][500][11];
int newfnum;
int errflag=0;
wchar_t errstr[10];
int check(wchar_t name[],int dou)/**检查新定义连接符的元数**/
{
int i;
for(i=0; i<newfnum; i++)
{
if(!wcscmp(name,newf[i].name))
{
//wprintf(L"%ls\n",name);
if(dou==newf[i].yuan-1)return 1;
else
{
wcscpy(errstr,name);
return 0;
}
}
}
return 0;
}
void judge(wchar_t *s,wchar_t name[],int state)/**判断逻辑连接符元数是否正确的函数**/
{
//wprintf(L"%ls\n",name);
int i,dou,sta,k;
int len = wcslen(s);
dou=0;
k=0;
sta=0;
wchar_t nam[10];
for(i=0; i<len; i++)
{
if((*s>=L'a'&&*s<=L'z')||(*s>=L'A'&&*s<=L'Z')||(*s>=L'0'&&*s<=L'9'))
{
if(sta==0)sta=1;
nam[k++]=*s;
}
else if(*s==L',')
{
dou++;
sta=0;
//wcscpy(nam,L"");
wcsset(nam,L'\0',sizeof(nam));
k=0;
}
else if(*s==L')'&&state==1)
{
//wprintf(L"%ls1\n",name);
if(!check(name,dou))errflag=1;
return ;
}
else if(sta==1&&*s==L'(')/***改***/
{
nam[k]=L'\0';
/*if(*(s+1)==L'('){
s++;
while(*s!=L')')s++;
}*/
judge(s+1,nam,1);
state=0;
wcsset(nam,L'\0',sizeof(nam));
k=0;
sta=0;
}
else if(sta==0&&*s==L'(')
{
state=0;
}
else if(state==0&&*s==L')')
{
}
else
{
sta=0;
//wcscpy(nam,L"");
wcsset(nam,L'\0',sizeof(nam));
k=0;
}
s++;
}
}
int kuohpp(wchar_t str[])/**括号匹配**/
{
int len=wcslen(str)-2;
int i,j;
struct node
{
wchar_t st[MAX];
int top;
} kuo;
kuo.top=-1;
int loc;
for(i=0; i<len; i++)
{
if(str[i]==L'(')
{
kuo.top++;
kuo.st[kuo.top]=str[i];
}
else if(str[i]==L')')
{
loc=i;
if(kuo.top==-1)
{
wprintf(L"括号不匹配!\n");
return i;
}
else
{
kuo.st[kuo.top]=L' ';
kuo.top--;
}
}
}
if(kuo.top>=0)
{
wprintf(L"括号不匹配!\n");
return loc;
}
return -1;
}
int find_error(wchar_t str[])/**语法检查**/
{
int i,k=0,len=wcslen(str)-2;//k为了找最后一个右括号
//printf("%d\n",len);
int k1=0,k2=0;
int state=0;
int loc=kuohpp(str);
if(loc!=-1)return loc;
if(str[0]==L'¬')
{
state=1;
}
else if(str[0]==L'(')
{
state=5;
}
else if(str[i]==L'0'||str[i]==L'1')state=2;
else if((str[0]>=L'a'&&str[0]<=L'z')||(str[0]>=L'A'&&str[0]<=L'Z'))state=4;
else
{
wprintf(L"语法error!!!\n");
return 0;
}
for(i=1; i<len; i++)
{
if(str[i]=='\r'||str[i]==' '||str[i]=='\0')return -1;
switch(state)
{
case 1:
if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=4;
else if(str[i]==L'0'||str[i]==L'1')state=2;
else if(str[i]==L'(')
{
state=5;
}
else if(str[i]==L'¬')state=1;
else
{
wprintf(L"语法error!!! \n");
return i;
}
break;
case 2:
if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=3;
else if(str[i]==L')')state=2;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 3:
if(str[i]==L'0'||str[i]==L'1')state=2;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=4;
else if(str[i]==L'¬')state=1;
else if(str[i]==L'(')
{
state=5;
}
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 4:
if(str[i]==L')'||(str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z')||(str[i]>=L'0'&&str[i]<=L'9'))state=4;
else if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=3;
else if(str[i]==L'(')
{
state=6;
}
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 5:
if(str[i]==L'(')
{
state=5;
}
else if(str[i]==L'¬')state=1;
else if(str[i]==L'0'||str[i]==L'1')state=2;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=4;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 6:
if(str[i]==L'(')
{
state=7;
}
else if(str[i]==L'¬')state=11;
else if(str[i]==L'0'||str[i]==L'1')state=12;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=13;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 7:
if(str[i]==L'(')
state=7;
else if(str[i]==L'0'||str[i]==L'1')state=9;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=8;
else if(str[i]==L'¬')state=10;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 8:
if(str[i]==L')')
{
state=14;
}
else if(str[i]==L'(')
{
state=6;
}
else if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=7;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z')||(str[i]>=L'0'&&str[i]<=L'9'))state=8;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 9:
if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=7;
else if(str[i]==L')')
{
state=14;
}
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 10:
if(str[i]==L'(')state=7;
else if(str[i]==L'0'||str[i]==L'1')state=9;
else if(str[i]==L'¬')state=10;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=8;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 11:
if(str[i]==L'¬')state=11;
else if(str[i]==L'(')state=7;
else if(str[i]==L'0'||str[i]==L'1')state=12;
else if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z'))state=13;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 12:
if(str[i]==L')')state=14;
else if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=6;
else if(str[i]==L',')state=6;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 13:
if((str[i]>=L'a'&&str[i]<=L'z')||(str[i]>=L'A'&&str[i]<=L'Z')||(str[i]>=L'0'&&str[i]<=L'9'))state=13;
else if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=6;
else if(str[i]==L')')state=14;
else if(str[i]==L'('||str[i]==L',')state=6;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
case 14:
if(str[i]==L')')state=14;
else if(str[i]==L'∧'||str[i]==L'∨'||str[i]==L'→'||str[i]==L'↔'||str[i]==L'⊕')state=3;
else if(str[i]==L',')state=6;
else
{
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
break;
default:
wprintf(L"语法error!!! \n");
//printf("error in %d\n",i);
return i;
}
}
return -1;
}
void strrpc(wchar_t str[],wchar_t oldstr[],wchar_t newstr[])/**为了便于用控制台debug,加一步逻辑连接符替换的处理**/
{
int len=wcslen(oldstr);
int p=wcslen(str);
wchar_t bstr[p];//转换缓冲区
memset(bstr,0,sizeof(bstr));//初始化为空
int i;
for(i = 0; i < p; i++)
{
if(wcsncmp(str+i,oldstr,len)==0) //在当前位置取和oldstr等长字符
{
wcscat(bstr,newstr);
i += len;
}
wcsncat(bstr,str + i,1);//保存一字节进缓冲区
}
wcscpy(str,bstr);
}
int hequ(int p,int q) //合取
{
return p&q;
}
int xiqu(int p,int q) //析取
{
return p|q;
}
int fei(int p) //取非
{
return !p;
}
int yunhan(int p,int q) //蕴含
{
return (!p)|q;
}
int dengjia(int p,int q) //等价
{
return ((!p)|q)&&((!q)|p);
}
int yihuo(int p,int q) //异或
{
return ((!p)&q)|((!q)&p);
}
int zzb[MAX][50];
void tentob(int len,int row,int x)/**十进制转二进制,填真值表的一行**/
{
int k=0,j=0;
while(x)
{
zzb[row][len-1-j]=x%2;
k++;
j++;
x/=2;
}
}
void creatzzb(int n)/**生成真值表**/
{
int i,j,row=(int)pow(2.0,n),col=n;
for(i=0; i<row; i++)
{
tentob(col,i,i);
}
}
int compvalue(int row)/**按全局真值表的一行,求真值**/
{
stnum.top=-1;
int a,b,c,i,j;
int u[10];
int op=0;
memset(stnum.data,0,sizeof(stnum.data));
while(op<postlen)
{
if(!wcscmp(postexp[op].name,L"!"))
{
a=stnum.data[stnum.top];
stnum.top--;
b=fei(a);
stnum.top++;
stnum.data[stnum.top]=b;
}
else if(!wcscmp(postexp[op].name,L"-"))
{
a=stnum.data[stnum.top];
stnum.top--;
b=stnum.data[stnum.top];
stnum.top--;
c=yunhan(b,a);
stnum.top++;
stnum.data[stnum.top]=c;
}
else if(!wcscmp(postexp[op].name,L"^"))
{
a=stnum.data[stnum.top];
stnum.top--;
b=stnum.data[stnum.top];
stnum.top--;
c=yihuo(b,a);
stnum.top++;
stnum.data[stnum.top]=c;
}
else if(!wcscmp(postexp[op].name,L"&"))
{
a=stnum.data[stnum.top];
stnum.top--;
b=stnum.data[stnum.top];
stnum.top--;
c=hequ(b,a);
stnum.top++;
stnum.data[stnum.top]=c;
}
else if(!wcscmp(postexp[op].name,L"|"))
{
a=stnum.data[stnum.top];
stnum.top--;
b=stnum.data[stnum.top];
stnum.top--;
c=xiqu(b,a);
stnum.top++;
stnum.data[stnum.top]=c;
}
else if(!wcscmp(postexp[op].name,L"~"))
{
a=stnum.data[stnum.top];
stnum.top--;
b=stnum.data[stnum.top];
stnum.top--;
//printf("%d %d\n",a,b);
c=dengjia(b,a);
//printf("c=%d\n",c);
stnum.top++;
stnum.data[stnum.top]=c;
}
else
{
if(postexp[op].no==-1)
{
int s=0,z=postexp[op].nof;
//printf("\n");
for(i=0; i<z; i++)
{
u[i]=stnum.data[stnum.top];
//printf("%d ",u[i]);
stnum.top--;
s+=u[i]*(int)pow(2.0,i);
}
//printf("%d\n",s);
stnum.top++;
for(i=0; i<newfnum; i++)
{
if(!wcscmp(newf[i].name,postexp[op].name))
{
stnum.data[stnum.top]=newf[i].zzbf[s];
break;
}
}
}
else
{
stnum.top++;
if(postexp[op].name[0]>=L'0'&&postexp[op].name[0]<=L'9')
stnum.data[stnum.top]=_wtoi(postexp[op].name);
else /*wprintf(L"%ls %d %d\n",postexp[op].name, postexp[op].no,zzb[row][postexp[op].no]);*/
{
stnum.data[stnum.top]=zzb[row][postexp[op].no];
}
}
}
op++;
}
return stnum.data[stnum.top];
}
wchar_t newexp[MAX];
void inserstr(wchar_t str[],int loc,wchar_t tmp[]) /**往自定义连接符中嵌套字符串**/
{
int i,stop;
int len=wcslen(str);
wcsset(newexp,L'\0',sizeof(newexp));
if(loc==1)
{
for(i=0; i<len; i++)
{
if(str[i]==L'(')
{
stop=i;
newexp[i]=L'(';
break;
}
newexp[i]=str[i];
}
wcscat(newexp,tmp);
for(i=stop+1; i<len; i++)
{
if(str[i]==L','||str[i]==L')')
{
break;
}
}
wcscat(newexp,str+i);
}
else
{
int k=0,go,zuok=0;
for(i=0; i<len; i++) //for(i=0; i<3; i++)
{
newexp[i]=str[i];
if(str[i]==L'(')
{
//printf("22\n");
go=i;
break;
}
}
//wprintf(L"1%ls\n",newexp);
for(i=go+1; i<len; i++)
{
if(str[i]==L'(')
{
//zuok++;
while(!(str[i]==L')'&&zuok==1))
{
if(str[i]==L'(')zuok++;
if(str[i]==L')')zuok--;
newexp[i]=str[i];
i++;
}
zuok=0;
//wprintf(L"1%ls\n",newexp);
}
else
{
if(str[i]==L',')
{
k++;
if(k==loc-1)
{
stop=i;
newexp[i]=L',';
break;
}
}
}
newexp[i]=str[i];
}
wcscat(newexp,tmp);
for(i=stop+1; i<len; i++)
{
if(str[i]==L','||str[i]==L')')
{
break;
}
}
wcscat(newexp,str+i);
}
}
struct finalwk/**求完全集所生成的公式表**/
{
wchar_t gs[MAX];
int hide;
} gsb[200];
int gsblen,hidelen;
struct WQJ/**求完全集,存连接符号表**/
{
wchar_t fname[12];
int yuan;
} fhb[100];
int fhblen,step;
wchar_t dfsstr[2000];
wchar_t tmps[2000];
int bynum;//逻辑变元数
int dopostexp() /**处理后缀表达式的信息,为求值做准备**/
{
int fg,bynum=0,i,j,k;
wchar_t bian[MAX][10];
for(i=0; i<postlen; i++)
{
fg=0;
if((postexp[i].name[0]>=L'a'&&postexp[i].name[0]<=L'z')||(postexp[i].name[0]>=L'A'&&postexp[i].name[0]<=L'Z'))
{
for(k=0; k<newfnum; k++)
{
if(!wcscmp(newf[k].name,postexp[i].name))
{
postexp[i].no=-1;
postexp[i].nof=newf[k].yuan;
fg=1;
break;
}
}
for(j=0; j<i; j++)
{
if(!wcscmp(postexp[i].name,postexp[j].name))
{
postexp[i].no=postexp[j].no;
fg=1;
break;
}
}
if(!fg)
{
postexp[i].no=bynum++;
}
}
else
{
postexp[i].no=-2;//连接符和变元的no区分
}
}
return bynum;
}
int checkexit(wchar_t str[])/**求完全集时,判断新生成的公式是否与已生成公式等价**/
{
//if(!wcscmp(str,L"f(q,q,q)"))printf("1\n");
int i,j,k,bynum,sum,row;
wchar_t tmpe[MAX]=L"";
for(j=0; j<gsblen; j++)
{
//if(!wcscmp(gsb[j],L"f(p,p,p)"))printf("2\n");
//if(!wcscmp(gsb[j].gs,str))continue;
wcscat(tmpe,gsb[j].gs);
wcscat(tmpe,L"~");
wcscat(tmpe,str);
//wprintf();
trans(tmpe);
bynum=dopostexp();
memset(zzb,0,sizeof(zzb));
creatzzb(bynum);
row=(int)pow(2.0,bynum);
sum=0;
for(i=0; i<row; i++)
{
zzb[i][bynum]=compvalue(i);
sum+=zzb[i][bynum];
}
if(sum==row)
{
/**for(i=0; i<row; i++)
{
for(k=0;k<bynum+1;k++)
printf("%d ",zzb[i][k]);
printf("\n");
}
printf("\n");
wprintf(L"%d %ls\n",bynum,tmpe);
wprintf(L"后缀式:\n");
for(i=0; i<postlen; i++)
wprintf(L"%ls ",postexp[i].name);
printf("\n");**/
return 1;//等价公式永真
}
memset(tmpe,L'\0',sizeof(tmpe));
}
return 0;
}
int lastgsblen;//上次遍历的公式表长
int fin;
int growexp()/**求完全集时,对每个连接符生成公式**/
{
//fin=0;
int i,j,k,t,tmpt;
gsblen=0;
for(i=0; i<30; i++)
{
gsb[i].hide=0;
memset(gsb[i].gs,L'\0',sizeof(gsb[i].gs));
}
wcscpy(gsb[gsblen++].gs,L"p");
wcscpy(gsb[gsblen++].gs,L"q");
for(i=0; i<fhblen; i++)
{
if(fhb[i].yuan==0)
{
//hidelen++;
wcscpy(gsb[gsblen++].gs,fhb[i].fname);
//gsb[gsblen++].hide=1;
}
}
step=0;
lastgsblen=-1;
while(step<300)
{
for(i=0; i<fhblen; i++)
{
//fin++;
if(fhb[i].yuan==0)continue;
tmpt=gsblen;
wcsset(tmps,L'\0',sizeof(tmps));
wcscat(tmps,fhb[i].fname);
wcscat(tmps,L"(");
for(j=0; j<fhb[i].yuan-1; j++)
wcscat(tmps,L",");
wcscat(tmps,L")");
wcscpy(dfsstr,tmps);
dfs(tmpt,fhb[i].yuan,0);
step++;
if(gsblen>=16){/*wprintf(L"有%d个连接符即完全\n",fin);*/
return 1;}
}
if(lastgsblen==gsblen)return 0;/**两轮遍历所有连接符没有生成新公式,则连接符集合不完全**/
else lastgsblen=gsblen;
}
return 0;
}
int arr[200];
void dfs(int n,int m,int t)/**用向量法,枚举向量,将已求出的公式填入连接符生成新公式**/
{
if(gsblen>=16)return ;
if(t==m)
{
int j;
for(j=0; j<m; j++)
{
//printf("1");
inserstr(dfsstr,j+1,gsb[arr[j]].gs);
//printf("2");
wcscpy(dfsstr,newexp);
//wprintf(L"%ls ",newexp);
//printf("%d ",arr[j]);
}
//printf("\n");
//wprintf(L"%ls ",newexp);
if(checkexit(newexp)==0)
{
//printf("3");
wcscpy(gsb[gsblen++].gs,newexp);
//wprintf(L"%ls\n",newexp);
}
wcscpy(dfsstr,tmps);
return ;
}
int i;
for(i=0; i<n; i++)
{
arr[t]=i;
dfs(n,m,t+1);
if(gsblen>=16)return ;
}
}
void delkg()/**输入预处理,删除多余空格**/
{
wchar_t tmp[MAX];
int i,tol=0,len=wcslen(buf);
for(i=0; i<len; i++)
{
if(buf[i]==L' ')
{
while(buf[i]==L' ')
{
i++;
}
}
tmp[tol++]=buf[i];
}
tmp[tol]=L'\0';
wcscpy(buf,tmp);
}
void Hilbert(wchar_t op[],FILE *file2)/**一个集成处理的函数**/
{
wchar_t tmp[MAX]=L"";
wcscpy(tmp,op);
int i,j;
for(j=0; j<6; j++)
{
strrpc(op,str1[j],str2[j]);
}
trans(op);
bynum=dopostexp();
memset(zzb,0,sizeof(zzb));
creatzzb(bynum);
int row=(int)pow(2.0,bynum),col=bynum+1;
int sum=0;
for(i=0; i<row; i++)
{
zzb[i][bynum]=compvalue(i);
sum+=zzb[i][bynum];
}
if(sum==row)
{
fwprintf(file2,L"%ls\n",tmp);
}
}
int vis[30],Cantor[30];
int ni[22],fni[22];
//int clu[15][15][15][15][15];
int clu2[15][15],clu3[15][15][15],clu4[15][15][15][15],clu5[15][15][15][15][15];
int clu6[15][15][15][15][15][15];
int main()
{
int i,j,k,len,opera;
int cas=-1;
wchar_t rule[40][1024];
setlocale(LC_ALL, "");
char cxf[1024];
wchar_t buf2[1024],tmp[1024];
FILE *file = _wfopen(L"test.txt", L"rb");
if (file == NULL)
{
fprintf(stderr, "Source file open error.\n");
return -1;
}
FILE *file2 = _wfopen(L"output.txt", L"w, ccs=UNICODE");
if(file2==NULL)
{
fprintf(stderr, "Source file open error.\n");
return -1;
}
wprintf(L"1.求真值\n2.求完全集\n3.求二元及以内所有逻辑连接词集合的最小完全集\n请输入数字表示您要执行的功能:\n");
scanf("%d",&opera);
if(opera==1)
{
wprintf(L"正在读取文件test.txt...\n");
fgetws(buf,1024,file);//先读第一行
if(buf[1]!=L'%'&&buf[1]!=L'\r') //是公式
{
if(cas==-1)
{
delkg();
len=wcslen(buf);
//wcstombs(cxf, buf, len);
//fputws(cxf+1,file2);
fputws(buf+1,file2);
//fwprintf(file2,L"%ls\n",buf);
wcscpy(buf2,buf+1);
cas++;
//fprintf(file2,"<br/>");
}
}
while(fgetws(buf, 1024, file) != NULL)
{
if(buf[0]==L'\r'||buf[0]==L'%')continue;
else
{
len=wcslen(buf);
//wcstombs(cxf, buf, len);
}
if(cas==-1)//公式
{
delkg();
//fputws(cxf,file2);
fputws(buf,file2);
wcscpy(buf2,buf);
cas++;
}
else
{
//fputws(cxf,file2);
fputws(buf,file2);
if(buf[0]==L'#')
{
if(((buf[1]>=L'a'&&buf[1]<=L'z')||(buf[1]>=L'A'&&buf[1]<=L'Z')))
{
wcscpy(rule[cas],buf+1);
}
else continue;
}
else wcscpy(rule[cas],buf);
cas++;
}
//fprintf(file2,"<br/>");
}
wprintf(L"文件test.txt读取完毕.\n");
wcscpy(tmp,buf2);
wcscpy(buf2,buf);
wcscpy(buf,tmp);
wprintf(L"公式:\n");
len=wcslen(buf)-2;
for(i=0; i<len; i++)
wprintf(L"%lc",buf[i]);
printf("\n");
wprintf(L"额外规则:\n");
for(i=0; i<cas; i++)
{
wprintf(L"%ls",rule[i]);/*****/
}
int j1,j2,j3,flag;
wchar_t yuan[3],zzbf[MAX];
for(i=0; i<cas; i++)
{
//wcstombs(rules[i], rule[i], 1024);
int leng=wcslen(rule[i]);
j1=0,j2=0,j3=0,flag=0;
for(k=0; k<leng; k++)
{
if(rule[i][k]==L'%')break;
if(rule[i][k]==L' ')
{
flag++;
while(rule[i][k]==L' ')
{
k++;
}
}
if(rule[i][k]!=L' ')
{
if(flag==0)
newf[i].name[j1++]=rule[i][k];
else if(flag==1)
yuan[j2++]=rule[i][k];
else if(flag==2)
zzbf[j3++]=rule[i][k];
}
}
newf[i].name[j1]=L'\0';
/*****新定义的连接符加入表******/
wcscpy(lpri[prinum].ch,newf[i].name);
wcscpy(rpri[prinum].ch,newf[i].name);
lpri[prinum].pri=lst;
rpri[prinum].pri=rst;
prinum++;
lst+=2;
rst+=2;
/***********/
yuan[j2]=L'\0';
newf[i].yuan=_wtoi(yuan);
for(j=0; j<(int)pow(2.0,newf[i].yuan); j++)
{
newf[i].zzbf[j]=zzbf[j]-L'0';
}
}
newfnum=cas;
/*for(i=0;i<cas;i++){
wprintf(L"%ls\n",newf[i].name);
printf("%d\n",newf[i].yuan);
for(j=0;j<(int)pow(2.0,newf[i].yuan);j++)
printf("%d ",newf[i].zzbf[j]);
printf("\n");
}*/
int loc=find_error(buf);
if(loc==-1)
{
wchar_t name[10]=L"";
judge(buf,name,0);
if(errflag==1)
{
wprintf(L"出现逻辑连接符 %ls 元数错误或命名错误!\n",errstr);
}
else
{
size_t ret;
for(i=0; i<6; i++)
{
strrpc(buf,str1[i],str2[i]);
}
//find_error(buf);
if(trans(buf)) //中缀转后缀
{
wprintf(L"后缀式:\n");
for(i=0; i<postlen; i++)
wprintf(L"%ls ",postexp[i].name);
printf("\n");
bynum=dopostexp();
creatzzb(bynum);
int row=(int)pow(2.0,bynum),col=bynum+1;
int sum=0;
for(i=0; i<row; i++)
{
zzb[i][bynum]=compvalue(i);
sum+=zzb[i][bynum];
}
ret=wcstombs(strr, buf, 1024);
strr[strlen(strr)-1]='\0';/*****/
wprintf(L"符号替换后的公式:\n");
printf("%s\n",strr);
if(sum==0)wprintf(L"这是永假式\n");
else if(sum==row)wprintf(L"这是永真式\n");
else
{
wprintf(L"这是可满足式,成真赋值是:\n");
int hsh[100]= {0};
for(i=0; i<postlen; i++)
if(postexp[i].no>-1&&hsh[postexp[i].no]==0)
{
hsh[postexp[i].no]=1;
wprintf(L"%5ls ",postexp[i].name);
}
wprintf(L" 真值\n");
for(i=0; i<row; i++)
{
if(zzb[i][col-1]==1)
{
for(j=0; j<col; j++)
{
printf("%5d ",zzb[i][j]);
}
printf("\n");
}
}
}
}///
}
}
else
{
wprintf(L"命题公式错误,错误信息见output.txt\n");
char buaa[MAX][10];
wchar_t to100[10]=L"";
for(i=0; i<len; i++)
{
to100[0]=buf[i];
to100[1]=L'\0';
wcstombs(buaa[i], to100, 1024);
wcscpy(to100,L"");
}
//fprintf(file2,"<br/>");
fwprintf(file2,L"ERROR IN 下标%d:\n",loc);
for(i=0; i<len; i++)
{
if(i==loc)
{
//fprintf(file2,"<font color='red'>");fprintf(file2,"%s",buaa[i]);
fwprintf(file2,L"?");
//fprintf(file2,"</font>");
}
else fwprintf(file2,L"%lc",buf[i]);//fprintf(file2,"%s",buaa[i]);
}
}
//fprintf(file2,"</body>");
//fprintf(file2,"</html>");
}
else if(opera==2)
{
FILE *file3 = _wfopen(L"output.txt", L"w, ccs=UNICODE");
if (file3 == NULL)
{
fprintf(stderr, "Source file open error.\n");
return -1;
}
cas=0;
wprintf(L"正在读取文件test.txt...\n");
fgetws(buf,1024,file);//先读第一行
if(buf[1]!=L'%'&&buf[1]!=L'\r') //不是空行
{
if(cas==0)
{
//len=wcslen(buf+1);
//wcstombs(cxf, buf, len);
//fputws(cxf+1,file3);
if(buf[1]==L'#')
{
if(((buf[2]>=L'a'&&buf[2]<=L'z')||(buf[2]>=L'A'&&buf[2]<=L'Z')))
{
wcscpy(rule[cas++],buf+2);
}
}
}
}
while(fgetws(buf, 1024, file) != NULL)
{
if(buf[0]==L'\r'||buf[0]==L'%')continue;
else
{
//len=wcslen(buf);
//wcstombs(cxf, buf, len);
//fputws(cxf,file3);
if(buf[0]==L'#')
{
if(((buf[1]>=L'a'&&buf[1]<=L'z')||(buf[1]>=L'A'&&buf[1]<=L'Z')))
{
wcscpy(rule[cas],buf+1);
}
else continue;
}
else wcscpy(rule[cas],buf);
cas++;
}
}
wprintf(L"文件test.txt读取完毕.\n");
int j1,j2,j3,flag;
wchar_t yuan[3],zzbf[MAX];
for(i=0; i<cas; i++)
{
//wcstombs(rules[i], rule[i], 1024);
int leng=wcslen(rule[i]);
j1=0,j2=0,j3=0,flag=0;
for(k=0; k<leng; k++)
{
if(rule[i][k]==L'%')break;
if(rule[i][k]==L' ')
{
flag++;
while(rule[i][k]==L' ')
{
k++;
}
}
if(rule[i][k]!=L' ')
{
if(flag==0)
newf[i].name[j1++]=rule[i][k];
else if(flag==1)
yuan[j2++]=rule[i][k];
else if(flag==2)
zzbf[j3++]=rule[i][k];
}
}
newf[i].name[j1]=L'\0';
/*****新定义的连接符加入表******/
wcscpy(lpri[prinum].ch,newf[i].name);
wcscpy(rpri[prinum].ch,newf[i].name);
lpri[prinum].pri=lst;
rpri[prinum].pri=rst;
prinum++;
lst+=2;
rst+=2;
/***********/
yuan[j2]=L'\0';
newf[i].yuan=_wtoi(yuan);
wcscpy(fhb[fhblen].fname,newf[i].name);
//if(newf[i].yuan==0)fhb[fhblen].zhi=zzbf[0]-L'0';
fhb[fhblen++].yuan=newf[i].yuan;
for(j=0; j<(int)pow(2.0,newf[i].yuan); j++)
{
newf[i].zzbf[j]=zzbf[j]-L'0';
}
}
/*for(i=0;i<cas;i++){
wprintf(L"%ls\n",newf[i].name);
printf("%d\n",newf[i].yuan);
for(j=0;j<(int)pow(2.0,newf[i].yuan);j++)
printf("%d ",newf[i].zzbf[j]);
printf("\n");
}*/
newfnum=cas;
int fff=growexp();
wprintf(L"全部%d个公式:\n",gsblen);
for(i=0; i<gsblen; i++)
wprintf(L"%ls\n",gsb[i].gs);
if(fff==1)
{
wprintf(L"此逻辑连接词集合是完全集\n");
wprintf(L"其中,与最小完全集匹配的公式见output.txt\n");
wchar_t op1[MAX],op2[MAX],op3[MAX];
for(i=0; i<gsblen; i++)
{
wcscat(op1,L"p→q↔");
wcscat(op1,gsb[i].gs);
wcscat(op3,L"¬p↔");
wcscat(op3,gsb[i].gs);
Hilbert(op1,file3);
Hilbert(op3,file3);
wcsset(op1,L'\0',sizeof(op1));
wcsset(op3,L'\0',sizeof(op3));
}
//
}
else
{
wprintf(L"此逻辑连接词集合不是完全集\n");
}
fclose(file3);
}
else /***************/
{
FILE *file4 = _wfopen(L"wqj.txt", L"rb");
if (file4 == NULL)
{
fprintf(stderr, "Source file open error.\n");
return -1;
}
FILE *file5 = _wfopen(L"output.txt", L"w, ccs=UNICODE");
if (file5 == NULL)
{
fprintf(stderr, "Source file open error.\n");
return -1;
}
cas=0;
fgetws(buf,1024,file4);//先读第一行
if(buf[1]!=L'%'&&buf[1]!=L'\r') //不是空行
{
if(cas==0)
{
fputws(buf+1,file5);
if(buf[1]==L'#')
{
if(((buf[2]>=L'a'&&buf[2]<=L'z')||(buf[2]>=L'A'&&buf[2]<=L'Z')))
{
wcscpy(rule[cas++],buf+2);
}
}
}
}
while(fgetws(buf, 1024, file4) != NULL)
{
if(buf[0]==L'\r'||buf[0]==L'%')continue;
else
{
fputws(buf,file5);
if(buf[0]==L'#')
{
if(((buf[1]>=L'a'&&buf[1]<=L'z')||(buf[1]>=L'A'&&buf[1]<=L'Z')))
{
wcscpy(rule[cas],buf+1);
}
else continue;
}
else wcscpy(rule[cas],buf);
cas++;
}
}
int j1,j2,j3,flag;
wchar_t yuan[3],zzbf[MAX];
for(i=0; i<cas; i++)
{
//wcstombs(rules[i], rule[i], 1024);
int leng=wcslen(rule[i]);
j1=0,j2=0,j3=0,flag=0;
for(k=0; k<leng; k++)
{
if(rule[i][k]==L'%')break;
if(rule[i][k]==L' ')
{
flag++;
while(rule[i][k]==L' ')
{
k++;
}
}
if(rule[i][k]!=L' ')
{
if(flag==0)
newf[i].name[j1++]=rule[i][k];
else if(flag==1)
yuan[j2++]=rule[i][k];
else if(flag==2)
zzbf[j3++]=rule[i][k];
}
}
newf[i].name[j1]=L'\0';
/*****新定义的连接符加入表******/
wcscpy(lpri[prinum].ch,newf[i].name);
wcscpy(rpri[prinum].ch,newf[i].name);
lpri[prinum].pri=lst;
rpri[prinum].pri=rst;
prinum++;
lst+=2;
rst+=2;
/***********/
yuan[j2]=L'\0';
newf[i].yuan=_wtoi(yuan);
//wcscpy(fhb[fhblen].fname,newf[i].name);
//fhb[fhblen++].yuan=newf[i].yuan;
for(j=0; j<(int)pow(2.0,newf[i].yuan); j++)
{
newf[i].zzbf[j]=zzbf[j]-L'0';
}
}
newfnum=cas;
fwprintf(file5,L"\n自己构成完全集的有:\n");
int mou=0;
for(i=0; i<newfnum; i++) //求单个构成完全集的字符
{
wcscpy(fhb[0].fname,newf[i].name);
fhb[0].yuan=newf[i].yuan;
gsblen=0;
fhblen=1;
if(growexp())
{
fwprintf(file5,L"%ls %d ",newf[i].name,newf[i].yuan);
for(j=0; j<(int)pow(2.0,newf[i].yuan); j++)
fwprintf(file5,L"%d",newf[i].zzbf[j]);
fwprintf(file5,L"\n\n");
//wprintf(L"全部%d个公式:\n",gsblen);
}
else
{
wcscpy(tnewf[mou].name,newf[i].name);
tnewf[mou].yuan=newf[i].yuan;
for(j=0; j<(int)pow(2.0,newf[i].yuan); j++)
tnewf[mou].zzbf[j]=newf[i].zzbf[j];
mou++;
}
fhblen=0;
gsblen=0;
}
wprintf(L"剩余不完全:%d\n",mou);
//memset(vis,0,sizeof(vis));
//Riemann(mou,2,0);
for(i=0; i<mou; i++)
{
for(k=i+1; k<mou; k++)
{
int u;
fhblen=0;
wcscpy(fhb[fhblen].fname,tnewf[i].name);
fhb[fhblen++].yuan=tnewf[i].yuan;
wcscpy(fhb[fhblen].fname,tnewf[k].name);
fhb[fhblen++].yuan=tnewf[k].yuan;
if(growexp())
{
int tt;
Cantor[0]=i;
Cantor[1]=k;
for(u=0; u<2; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[2][ni[2]][u].name,tnewf[Cantor[u]].name);
nfunc[2][ni[2]][u].yuan=tnewf[Cantor[u]].yuan;
for(j=0; j<tt; j++)
nfunc[2][ni[2]][u].zzbf[j]=tnewf[Cantor[u]].zzbf[j];
}
ni[2]++;clu2[i][k]++;
//clu[i+1][k+1][0][0][0]++;
}
else
{
int tt;
Cantor[0]=i;
Cantor[1]=k;
for(u=0; u<2; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[2][fni[2]][u].name,tnewf[Cantor[u]].name);
ffunc[2][fni[2]][u].yuan=tnewf[Cantor[u]].yuan;
for(j=0; j<tt; j++)
ffunc[2][fni[2]][u].zzbf[j]=tnewf[Cantor[u]].zzbf[j];
ffunc[2][fni[2]][u].no=Cantor[u];
}
fni[2]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[2]);
int nop[15];
int fy=2,flagx;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[j][nop[k]]||clu2[nop[k]][j]){flagx=1;break;}
}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=3;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
clu3[Cantor[0]][Cantor[1]][Cantor[2]]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[3]);
fy=3;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=4;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
clu4[Cantor[0]][Cantor[1]][Cantor[2]][Cantor[3]]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[4]);
fy=4;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[0]][nop[3]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(clu3[nop[1]][nop[3]][j]||clu3[nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[0]][nop[1]][nop[2]][j]||clu4[nop[0]][nop[1]][nop[3]][j]||clu4[nop[0]][nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[1]][nop[2]][nop[3]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=5;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
clu5[Cantor[0]][Cantor[1]][Cantor[2]][Cantor[3]][Cantor[4]]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[5]);
fy=5;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[0]][nop[3]][j]|| clu3[nop[0]][nop[4]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(clu3[nop[1]][nop[3]][j]|| clu3[nop[1]][nop[4]][j]||clu3[nop[2]][nop[3]][j]||clu3[nop[2]][nop[4]][j]){flagx=1;}
if(clu4[nop[0]][nop[1]][nop[2]][j]||clu4[nop[0]][nop[1]][nop[3]][j]||clu4[nop[0]][nop[1]][nop[4]][j]||clu4[nop[0]][nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[0]][nop[2]][nop[4]][j]||clu4[nop[0]][nop[3]][nop[4]][j]||clu4[nop[1]][nop[2]][nop[3]][j]||clu4[nop[1]][nop[2]][nop[4]][j]||clu4[nop[1]][nop[3]][nop[4]][j]||clu4[nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[1]][nop[2]][nop[3]][j]||clu5[nop[0]][nop[1]][nop[2]][nop[4]][j]||clu5[nop[0]][nop[1]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[2]][nop[3]][nop[4]][j]||clu5[nop[1]][nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=6;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
clu6[Cantor[0]][Cantor[1]][Cantor[2]][Cantor[3]][Cantor[4]][Cantor[5]]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[6]);
fy=6;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[0]][nop[3]][j]|| clu3[nop[0]][nop[4]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(clu3[nop[1]][nop[3]][j]|| clu3[nop[1]][nop[4]][j]||clu3[nop[2]][nop[3]][j]||clu3[nop[2]][nop[4]][j]){flagx=1;}
if(clu4[nop[0]][nop[1]][nop[2]][j]||clu4[nop[0]][nop[1]][nop[3]][j]||clu4[nop[0]][nop[1]][nop[4]][j]||clu4[nop[0]][nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[0]][nop[2]][nop[4]][j]||clu4[nop[0]][nop[3]][nop[4]][j]||clu4[nop[1]][nop[2]][nop[3]][j]||clu4[nop[1]][nop[2]][nop[4]][j]||clu4[nop[1]][nop[3]][nop[4]][j]||clu4[nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[1]][nop[2]][nop[3]][j]||clu5[nop[0]][nop[1]][nop[2]][nop[4]][j]||clu5[nop[0]][nop[1]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[2]][nop[3]][nop[4]][j]||clu5[nop[1]][nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=7;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[7]);
fy=7;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[0]][nop[3]][j]|| clu3[nop[0]][nop[4]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(clu3[nop[1]][nop[3]][j]|| clu3[nop[1]][nop[4]][j]||clu3[nop[2]][nop[3]][j]||clu3[nop[2]][nop[4]][j]){flagx=1;}
if(clu4[nop[0]][nop[1]][nop[2]][j]||clu4[nop[0]][nop[1]][nop[3]][j]||clu4[nop[0]][nop[1]][nop[4]][j]||clu4[nop[0]][nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[0]][nop[2]][nop[4]][j]||clu4[nop[0]][nop[3]][nop[4]][j]||clu4[nop[1]][nop[2]][nop[3]][j]||clu4[nop[1]][nop[2]][nop[4]][j]||clu4[nop[1]][nop[3]][nop[4]][j]||clu4[nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[1]][nop[2]][nop[3]][j]||clu5[nop[0]][nop[1]][nop[2]][nop[4]][j]||clu5[nop[0]][nop[1]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[2]][nop[3]][nop[4]][j]||clu5[nop[1]][nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=8;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[8]);
fy=8;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[0]][nop[3]][j]|| clu3[nop[0]][nop[4]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(clu3[nop[1]][nop[3]][j]|| clu3[nop[1]][nop[4]][j]||clu3[nop[2]][nop[3]][j]||clu3[nop[2]][nop[4]][j]){flagx=1;}
if(clu4[nop[0]][nop[1]][nop[2]][j]||clu4[nop[0]][nop[1]][nop[3]][j]||clu4[nop[0]][nop[1]][nop[4]][j]||clu4[nop[0]][nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[0]][nop[2]][nop[4]][j]||clu4[nop[0]][nop[3]][nop[4]][j]||clu4[nop[1]][nop[2]][nop[3]][j]||clu4[nop[1]][nop[2]][nop[4]][j]||clu4[nop[1]][nop[3]][nop[4]][j]||clu4[nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[1]][nop[2]][nop[3]][j]||clu5[nop[0]][nop[1]][nop[2]][nop[4]][j]||clu5[nop[0]][nop[1]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[2]][nop[3]][nop[4]][j]||clu5[nop[1]][nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=9;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[9]);
fy=9;
for(i=0;i<fni[fy];i++){
for(j=0;j<mou;j++){
flagx=0;
for(k=0;k<fy;k++){
nop[k]=ffunc[fy][i][k].no;
if(nop[k]>=j){flagx=1;break;}
if(clu2[nop[k]][j]){flagx=1;break;}
}
if(clu3[nop[0]][nop[1]][j]||clu3[nop[0]][nop[2]][j]||clu3[nop[0]][nop[3]][j]|| clu3[nop[0]][nop[4]][j]||clu3[nop[1]][nop[2]][j]){flagx=1;}
if(clu3[nop[1]][nop[3]][j]|| clu3[nop[1]][nop[4]][j]||clu3[nop[2]][nop[3]][j]||clu3[nop[2]][nop[4]][j]){flagx=1;}
if(clu4[nop[0]][nop[1]][nop[2]][j]||clu4[nop[0]][nop[1]][nop[3]][j]||clu4[nop[0]][nop[1]][nop[4]][j]||clu4[nop[0]][nop[2]][nop[3]][j]){flagx=1;}
if(clu4[nop[0]][nop[2]][nop[4]][j]||clu4[nop[0]][nop[3]][nop[4]][j]||clu4[nop[1]][nop[2]][nop[3]][j]||clu4[nop[1]][nop[2]][nop[4]][j]||clu4[nop[1]][nop[3]][nop[4]][j]||clu4[nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[1]][nop[2]][nop[3]][j]||clu5[nop[0]][nop[1]][nop[2]][nop[4]][j]||clu5[nop[0]][nop[1]][nop[3]][nop[4]][j]){flagx=1;}
if(clu5[nop[0]][nop[2]][nop[3]][nop[4]][j]||clu5[nop[1]][nop[2]][nop[3]][nop[4]][j]){flagx=1;}
if(flagx)continue;
int u;
fhblen=0;
for(k=0;k<fy;k++){
wcscpy(fhb[fhblen].fname,ffunc[fy][i][k].name);
fhb[fhblen++].yuan=ffunc[fy][i][k].yuan;
}
wcscpy(fhb[fhblen].fname,tnewf[j].name);
fhb[fhblen++].yuan=tnewf[j].yuan;
int yy=10;
int tt,v;
for(v=0;v<fy;v++){
Cantor[v]=ffunc[fy][i][v].no;
}
Cantor[fy]=j;
if(growexp())
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(nfunc[yy][ni[yy]][u].name,tnewf[Cantor[u]].name);
nfunc[yy][ni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
nfunc[yy][ni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
}
ni[yy]++;//wprintf(L"\n");
//clu[i+1][k+1][0][0][0]++;
}
else
{
for(u=0; u<yy; u++)
{
//wprintf(L"%ls\n",tnewf[Cantor[u]].name);
tt=(int)pow(2.0,tnewf[Cantor[u]].yuan);
wcscpy(ffunc[yy][fni[yy]][u].name,tnewf[Cantor[u]].name);
ffunc[yy][fni[yy]][u].yuan=tnewf[Cantor[u]].yuan;
int jj;
for(jj=0; jj<tt; jj++)
ffunc[yy][fni[yy]][u].zzbf[jj]=tnewf[Cantor[u]].zzbf[jj];
ffunc[yy][fni[yy]][u].no=Cantor[u];
}
fni[yy]++;
}
}
}
wprintf(L"剩余不完全:%d\n",fni[10]);
int lp;
for(i=2; i<=9; i++)
{
fwprintf(file5,L"\n%d个连接符构成最小完全集的有:\n",i);
for(lp=0; lp<ni[i]; lp++)
{
for(j=0; j<i; j++)
{
fwprintf(file5,L"%ls %d ",nfunc[i][lp][j].name,nfunc[i][lp][j].yuan);
for(k=0; k<(int)pow(2.0,nfunc[i][lp][j].yuan); k++)
fwprintf(file5,L"%d",ffunc[i][lp][j].zzbf[k]);
fwprintf(file5,L"\n");
}
fwprintf(file5,L"\n");
}
}
fwprintf(file5,L"\n总而言之,任意不超过二元的连接符集合只要是完全的,它的最小完全集规模最大为3.\n");
for(i=4; i<=9; i++)
{
fwprintf(file5,L"\n%d个连接符构成最大不完全集的有:\n",i);
for(lp=0; lp<fni[i]; lp++)
{
for(j=0; j<i; j++)
{
fwprintf(file5,L"%ls %d ",ffunc[i][lp][j].name,ffunc[i][lp][j].yuan);
for(k=0; k<(int)pow(2.0,ffunc[i][lp][j].yuan); k++)
fwprintf(file5,L"%d",ffunc[i][lp][j].zzbf[k]);
fwprintf(file5,L"\n");
}
fwprintf(file5,L"\n");
}
}
fclose(file4);
fclose(file5);
}
fclose(file);
fclose(file2);
system("pause");
return 0;
}
测试样例
(p1⊕r3)∧(q1⊕p3)∧(r1⊕p2)∧¬(p1∧q1)∧¬(p1∧r1)∧¬(q1∧r1)∧¬(p3∧r3)∧¬(p1∧p2)∧¬(p1∧p3)∧¬(p2∧p3)∧¬(r1∧r3)
% 仅取011001成立
(p)⊕(q↔r)
%10010110
f((p),g(q, r))
#f 2 0110
g 2 1001
%10010110 不完全
(0∧0∨0∨0→0)⊕0↔0
% 永假
((q ⊕ r) ⊕s)↔(q ⊕ (r ⊕s))
% 永真
f(p, f(q, r))↔f(f(p,q),r)
#f 2 1001
% 永真,不完全
F(0,1,F(0,0,ff(0)))→0
#F 3 00000011
ff 1 01
% 永真,不完全
F(p, q, F(p, p, ff(p)))→p
#F 3 00000011
ff 1 01
% 永真,不完全
F(p, q, F(p, p, g(q,f(p))))→p
#F 3 00000011
f 1 01
g 2 0011
% 永真,不完全
F(p, q, F(p, p, g(q,f(p))))→p
#F 3 10000011
f 1 10
g 2 1100
% 0111,完全
#f 2 0110
g 1 10
% 不完全
p→q↔f(f(q,f(q,p,p),p),p,p)
#f 3 10010010
% 永真,完全
¬p↔f(p,p,p)
#f 3 10010010
% 永真,完全
#f 2 0110
g 2 0111
h 2 0001
% 不完全
#f 2 0001
g 2 1001
h 2 0110
% 完全
#f 2 0111
g 2 1001
h 1 00
% 完全
#f 2 0111
g 2 0001
h 2 1101
i 2 1001
% 不完全
p→q↔f(f(q,q,p),f(p,p,p),p)
#f 3 11000010
% 永真,完全
¬p↔f(p,p,p)
#f 3 11000010
% 永真,完全
#f 2 0111
g 2 0001
h 2 1101
k 2 1001
% 不完全:p q f(q,p) g(q,p) h(p,p) h(q,p) h(p,q) k(q,p)
p→q↔g(h(q,p),q)
#f 2 0110
g 2 0111
h 2 1001
% 永真,完全
¬p↔f(h(p,p),p)
#f 2 0110
g 2 0111
h 2 1001
% 永真,完全
#f 2 0110
% 不完全:p q f(p,p) f(q,p)
p→q↔f(h(),f(p,q))
#f 2 0010
h 0 1
% 永真,不完全
¬p↔f(h(),p)
#f 2 0010
h 0 1
% 永真,不完全