anyview:离散数学(第一章)
1
#include "allinclude.h"
Boolean IsInSet(SetElem elem, pSet pA)
{ // Add your code here
if(pA==NULL)
{
return false;
}
SetElem*p;
pSet pSetA=pA;
for(p=outToBuffer(pSetA);*p!='\0';p++)
{
if(elem==*p)
{
return true;
}
}
return false;
}
2
#include "allinclude.h"
SetRelationshipStatus SetRelationship(pSet pA, pSet pB)
{ // Add your code here
if(pA==NULL||pB==NULL)
{
return EXCEPTION;//有空集情况
}
int isAIncludedInB = 1;
int isBIncludedInA = 1;
SetElem*a,*b;
// 判断pA是否被真包含于pB
for (a=outToBuffer(pA);*a!='\0';a++)
{
int isIncluded = 0;
for (b=outToBuffer(pB);*b!='\0';b++)
{
if (*a==*b)
{
isIncluded = 1;
break;
}
}
if (!isIncluded)
{
isAIncludedInB = 0;
break;
}
}
// 判断pB是否被真包含于pA
for (b=outToBuffer(pB);*b!='\0';b++)
{
int isIncluded = 0;
for (a=outToBuffer(pA);*a!='\0';a++)
{
if (*b==*a) {
isIncluded = 1;
break;
}
}
if (!isIncluded) {
isBIncludedInA = 0;
break;
}
}
if (isAIncludedInB && isBIncludedInA)//两个如果均为1,则两个相等
{
return EQUAL;
}
else if(isAIncludedInB)
{
return REAL_INCLUDED;
}
else if(isBIncludedInA)
{
return REAL_INCLUDING;
}
else
{
return NOT_INCLUSIVE;
}
}
3
#include "allinclude.h"
pSet SetUnion(pSet pA, pSet pB)
{ // Add your code here
if(pA==NULL&&pB==NULL)
{
return NULL;
}
if(pA==NULL)
{
return pB;
}
if(pB==NULL)
{
return pA;
}
SetElem * a , *b;
for(a=outToBuffer(pA);*a!='\0';a++)
{
int flag=0;
for(b=outToBuffer(pB);*b!='\0';b++)
{
if(*a==*b)
{
flag=1;
break;
}
}
if(flag==0)
{
directInsertSetElem(pB,*a);
}
}
return pB;
}
4
#include "allinclude.h"
pSet SetIntersection(pSet pA, pSet pB)
{ // Add your code here
if(pA==NULL||pB==NULL)
{
return NULL;
}
SetElem * a , *b;
pSet p=createNullSet();
for(a=outToBuffer(pA);*a!='\0';a++)
{
int flag=0;
for(b=outToBuffer(pB);*b!='\0';b++)
{
if(*a==*b)
{
flag=1;
break;
}
}
if(flag==1)
{
directInsertSetElem(p,*a);
}
}
return p;
}
5
#include "allinclude.h"
pSet SetComplement(pSet pA, pSet pI)
{ // Add your code here
pSet bu=createNullSet();//创建空的集合
if(isNullSet(pA)==TRUE)//判断pA是否为空集
{
return pI;
}
if(isNullSet(pI)==TRUE)//判断pI是否为空集
{
return NULL;
}
SetElem *p;
for(p=outToBuffer(pA);*p!='\0';p++)
{
if(isInSet(pI,*p)==FALSE)
{
return NULL;//判断不是子集
}
}
for(p=outToBuffer(pI);*p!='\0';p++)
{
if(FALSE==isInSet(pA,*p))
{
directInsertSetElem(bu,*p);//插入补集元素
}
}
return bu; //返回补集
}
6
#include "allinclude.h"
pSet SetSubtraction(pSet pA, pSet pB)
{ // Add your code here
if(isNullSet(pA)==TRUE)
{
return pA;
}
if(isNullSet(pB)==TRUE)
{
return pA;
}
pSet abu=createNullSet();
pSet bbu=createNullSet();
SetElem *p;
for(p=outToBuffer(pA);*p!='\0';p++)
{
if(isInSet(pB,*p)==FALSE)
{
directInsertSetElem(abu,*p);
}
}
return abu;
}
7
#include "allinclude.h"
pSet SetSysmmetricDifference(pSet pA, pSet pB)
{ // Add your code here
if(isNullSet(pA)==TRUE)
{
return pB;
}
if(isNullSet(pB)==TRUE)
{
return pA;
}
pSet dp=createNullSet();
SetElem *p;
for(p=outToBuffer(pA);*p!='\0';p++)
{
if(isInSet(pB,*p)==FALSE)
{
directInsertSetElem(dp,*p);
}
}
for(p=outToBuffer(pB);*p!='\0';p++)
{
if(isInSet(pA,*p)==FALSE)
{
directInsertSetElem(dp,*p);
}
}
return dp;
}
8
#include "allinclude.h"
pSet myfunction(pSet pB,pSet pC)
{
SetElem *pBElems;
SetElem *pCElems;
pSet pS;
pS=createNullSet();
for(pBElems=outToBuffer(pB);*pBElems!='\0';pBElems++)
{
directInsertSetElem(pS,*pBElems);
}
for(pCElems=outToBuffer(pC);*pCElems!='\0';pCElems++)
{
directInsertSetElem(pS,*pCElems);
}
return pS;
}
pFamilyOfSet PowerSet(pSet pA)
{ // Add your code here
int i;
pSet pI=createNullSet();//创建一个空集
pFamilyOfSet pF=createNullFamilyOfSet();//创建一个空的集族
SetElem *pAElems=outToBuffer(pA);//pA的元素拿出缓冲区
insertToFamilyOfSet(pF,pI);//先将空集插入集族,空集必定为子集之一
if(!isNullSet(pA))//pA不为空集
{
while(*pAElems!='\0')
{
pSet pK=createNullSet();//创建一个空集
directInsertSetElem(pK,*pAElems);//将pA元素插入pK空集
pSet *pS=outFamilyOfSetToBuffer(pF);//从pF中拿出单个元素的集合
for(i=0;*(pS+i)!=NULL;i++)
{
insertToFamilyOfSet(pF,myfunction(pK,*(pS+i)));
}
pAElems++;
}
}
return pF; // This is temporary code. Modify it if necessary.
}
9
#include "allinclude.h"
void myFunction(int k,SetElem *pAElems,pFamilyOfSet pFA,pSet pB)
{
long i=k,j=0;
pB=createNullSet();//创建新的集合
while(*(pAElems+j)!='\0')
{
if(i%2==1)//二进制的最后一位是1
{
directInsertSetElem(pB,*(pAElems+j));
}
j++;
i>>=1;//i二进制右移一位
}
insertToFamilyOfSet(pFA,pB);//把集合加到集族中
k--;//子集个数减1
if(k>0)//剩余子集个数作为终止条件
{
myFunction(k,pAElems,pFA,pB);//递归调用
}
}
pFamilyOfSet PowerSet(pSet pA)
{ // Add your code here
pFamilyOfSet pFA=createNullFamilyOfSet();//创建新的集族
long i=0,k=1;//循环变量
SetElem *pAElems=outToBuffer(pA);//将pA集合的头指针取得
pSet pB=createNullSet();//创建新的空集合
while(*(pAElems+i)!='\0')
{
i++;//计数得出pA集合中的元素个数
}
k=pow(2,i);
myFunction(k,pAElems,pFA,pB);//递归函数调用
return pFA;//返回集族
}
原文地址:https://blog.csdn.net/2302_79085918/article/details/136357290
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!