离散数学C语言上机题.docx
《离散数学C语言上机题.docx》由会员分享,可在线阅读,更多相关《离散数学C语言上机题.docx(28页珍藏版)》请在冰豆网上搜索。
离散数学C语言上机题
广东工业大学计算机科学与技术张法光
离散数学C语言上机题
Anyview
可视化编程作业系统
二元关系章节编程题
EX
01
6.01③试设计一算法,
实现集合的卡氏积运算。
实现下列函数:
/**
*进行两个集合的卡氏积运算
*@parampA:
要进行卡氏积运算的集合
*@parampB:
要进行卡氏积运算的集合
*@return:
将pA和pB进行卡氏积运算后得到的集合
*/
pCartersianSetCartesianProduct(pOriginalSetpA,pOriginalSetpB)
{
pCartersianSetpC=createNullCartersianSet();//空卡
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{//空卡←序偶插入←建立序偶←条件语句
for(resetOriginalSet(pB);!
isEndOfOriginalSet(pB);nextOriginalSetPos(pB))
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g
etCurrentOriginalSetElem(pB)));
}
returnpC;
}
02
6.02②试设计一算法,
给定集合A、集合B和集合C,判断集合C是否为A到B的一个二元关系。
实现下列函数:
/**
*给定集合A、集合B和集合C,判断集合C是否为A到B的一个二元关系。
*@parampA:
集合A
*@parampB:
集合B
*@parampC:
集合C
*@return:
如果集合C是A到B的一个二元关系,则返回true,否则返回false。
*/
booleanisBinaryRelation(pOriginalSetpA,pOriginalSetpB,pCartersianSetpC)
{
pCartersianSetpD=createNullCartersianSet();
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{//空卡←序偶插入←建立序偶←条件语句
for(resetOriginalSet(pB);!
isEndOfOriginalSet(pB);nextOriginalSetPos(pB))
OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pB)));
}
for(resetCartersianSet(pC);!
isEndOfCartersianSet(pC);nextCartersianSetPos(pC))
{
if(isInCartersianSet(pD,getCurrentCartersianSetElem(pC)))
;//满足条件,执行空语句,继续循环
elsereturnfalse;
}
returntrue;
}
03
6.03②试设计一算法,求集合A上的恒等关系。
实现下列函数:
/**
*给定集合A,求集合A上的恒等关系。
*@parampSet:
原始集合
*@return:
集合A上的恒等关系。
*/
pCartersianSetIdentityRelation(pOriginalSetpA)
{pCartersianSetpB=createNullCartersianSet();
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{//空卡←序偶插入←建立序偶←条件语句
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
if(getCurrentOriginalSetElem(pA)==getCurrentOriginalSetElem(pA))//Thesameelements
OrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA)));
}
returnpB;
}
04
6.04③试设计一算法,求两个卡氏积集合的复合运算。
实现下列函数:
/**
*给定两个集合,求该两个集合的复合运算。
*@parampA:
卡氏积集合
*@parampB:
卡氏积集合
*@return:
pA与pB的复合运算结果。
*/
pCartersianSetCompositeOperation(pCartersianSetpA,pCartersianSetpB)
{pCartersianSetpC=createNullCartersianSet();
for(resetCartersianSet(pA);!
isEndOfCartersianSet(pA);nextCartersianSetPos(pA))
{
for(resetCartersianSet(pB);!
isEndOfCartersianSet(pB);nextCartersianSetPos(pB))
if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB))))
//获取A卡氏积中序偶的第二元//获取第二元
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pB))));
}
returnpC;
}
05
6.05②试设计一算法,求一个关系的逆运算。
实现下列函数:
/**
*求一个关系的逆运算。
*@parampA:
卡氏积集合
*@return:
pA的逆运算结果。
*/
pCartersianSetInverseOperation(pCartersianSetpA)
{pCartersianSetpB=createNullCartersianSet();
for(resetCartersianSet(pA);!
isEndOfCartersianSet(pA);nextCartersianSetPos(pA))
{OrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA))));
}
returnpB;
}
06
6.06④试设计一算法,对某集合A上的一个二元关系,求该关系的幂运算。
实现下列函数:
/**
*求一个关系的幂运算。
*@parampA:
原始集合
*@parampBinaryRelationR:
pA上的关系R
*@paramn:
幂运算的次数,且n>=0
*@return:
pBinaryRelationSet的n次幂运算结果。
*/
pCartersianSetCompositeOperation(pCartersianSetpA,pCartersianSetpB)
{pCartersianSetpC=createNullCartersianSet();
for(resetCartersianSet(pA);!
isEndOfCartersianSet(pA);nextCartersianSetPos(pA))
{
for(resetCartersianSet(pB);!
isEndOfCartersianSet(pB);nextCartersianSetPos(pB))
if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB))))
//获取A卡氏积中序偶的第二元//获取第二元
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pB))));
}
returnpC;
}
pCartersianSetPowOperation(pOriginalSetpA,
pCartersianSetpBinaryRelationR,
intn)
{
pCartersianSetpC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
if(n==0)
{
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA)));
}
returnpC;
}
if(n==1)
{returnpBinaryRelationR;}
for(inti=1;i{pC=CompositeOperation(pC,pBinaryRelationR);}
returnpC;
}
07
6.02②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性。
实现下列函数:
/**
*判断一个关系是否具有自反性。
*@parampA:
原始集合
*@parampBinaryRelationR:
卡氏积集合,该集合是一个pA上的二元关系
*@return:
如果pBinaryRelationSet具有自反性;则返回true,否则返回false。
*/
booleanIsReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR)
{pCartersianSetpC=createNullCartersianSet();
//获取IA
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA)));
}
for(resetCartersianSet(pC);!
isEndOfCartersianSet(pC);nextCartersianSetPos(pC))
{
if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))
;//满足条件,执行空语句,继续循环
elsereturnfalse;
}
returntrue;
}
08
6.08②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有反自反性。
实现下列函数:
/**
*判断一个关系是否具有反自反性。
*@parampA:
原始集合
*@parampBinaryRelationR:
卡氏积集合,该集合是一个pA上的二元关系
*@return:
如果pBinaryRelationSet具有反自反性;则返回true,否则返回false。
*/
booleanIsAntiReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR)
{pCartersianSetpC=createNullCartersianSet();
//获取IA
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA)));
}
for(resetCartersianSet(pC);!
isEndOfCartersianSet(pC);nextCartersianSetPos(pC))
{
if(!
isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))
;//满足条件,执行空语句,继续循环
elsereturnfalse;
}
returntrue;
}
09
6.09③试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性或者反自反性。
在实际运算中,A无需给出。
实现下列函数:
/**
*判断一个关系是否具有自反性或者反自反性。
对一个关系R是否具有自反性或者反自反性,
*有四种可能:
是自反的;是反自反的;既是自反的也是反自反的、
*既不是自反的也不是反自反的。
*@parampA:
原始集合
*@parampBinaryRelationR:
卡氏积集合,该集合是一个pA上的二元关系
*@return:
返回一个Reflexivity_Type枚举类型值。
*如果pBinaryRelationSet具有自反性,则返回REFLEXIVITY;
*如果pBinaryRelationSet具有反自反性,则返回ANTI_REFLEXIVITY;
*如果pBinaryRelationSet既具有自反性,也具有反自反性,则返回
*REFLEXIVITY_AND_ANTI_REFLEXIVITY;
*如果pBinaryRelationSet既不具有自反性,也不具有反自反性,则返回
*NOT_REFLEXIVITY_AND_NOT_ANTI_REFLEXIVITY;
*/
//自反函数
booleanIsReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR)
{pCartersianSetpC=createNullCartersianSet();
//获取IA
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA)));
}
for(resetCartersianSet(pC);!
isEndOfCartersianSet(pC);nextCartersianSetPos(pC))
{
if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))
;//满足条件,执行空语句,继续循环
elsereturnfalse;
}
returntrue;
}
//反自反函数
booleanIsAntiReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR)
{pCartersianSetpC=createNullCartersianSet();
//获取IA
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetOriginalSet(pA);!
isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA)));
}
for(resetCartersianSet(pC);!
isEndOfCartersianSet(pC);nextCartersianSetPos(pC))
{
if(!
isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))
;//满足条件,执行空语句,继续循环
elsereturnfalse;
}
returntrue;
}
Reflexivity_TypeDetermineReflexivity(pOriginalSetpA,
pCartersianSetpBinaryRelationR)
{
if(IsReflexivity(pA,pBinaryRelationR)&&IsAntiReflexivity(pA,pBinaryRelationR))
returnREFLEXIVITY_AND_ANTI_REFLEXIVITY;
elseif(!
IsReflexivity(pA,pBinaryRelationR)&&!
IsAntiReflexivity(pA,pBinaryRelationR))
returnNOT_REFLEXIVITY_AND_NOT_ANTI_REFLEXIVITY;
elseif(IsReflexivity(pA,pBinaryRelationR))
returnREFLEXIVITY;
else
returnANTI_REFLEXIVITY;
}
10
6.10④试设计一算法,对某集合A上的一个二元关系R,判断R是否具有对称性或者反对称性。
实现下列函数:
/**
*判断一个关系是否具有对称性或者反对称性。
对一个关系R是否具有对称性或者反对称性,
*有四种可能:
是对称的;是反对称的;;既是对称的也是反对称的;既不是对称的也不是
*反对称的。
*@parampBinaryRelationR:
卡氏积集合,该集合是一个pA上的二元关系
*@return:
返回一个Symmetry_Type枚举类型值。
*如果pBinaryRelationSet具有对称性,则返回SYMMETRY;
*如果pBinaryRelationSet具有反对称性,则返回ANTI_SYMMETRY;
*如果pBinaryRelationSet既具有对称性,也具有对称性,则返回
*SYMMETRY_AND_ANTI_SYMMETRY;
*如果pBinaryRelationSet既不具有对称性,也不具有反对称性,则返回
*NOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;
*/
Symmetry_TypeDetermineSymmetry(pCartersianSetpBinaryRelationR)
{inta,b,c;a=b=c=0;
if(!
isNullCartersianSet(pBinaryRelationR))
{
for(resetCartersianSet(pBinaryRelationR);!
isEndOfCartersianSet(pBinaryRelationR);nextCartersianSetPos(pBinaryRelationR))
{
if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelatio