1、广东工业大学 计算机科学与技术 张法光离散数学 C 语言上机题 Anyview可视化编程作业系统二元关系章节编程题EX016.01 试设计一算法,实现集合的卡氏积运算。实现下列函数:/* 进行两个集合的卡氏积运算* param pA: 要进行卡氏积运算的集合* param pB: 要进行卡氏积运算的集合* return: 将 pA 和 pB 进行卡氏积运算后得到的集合*/ pCartersianSet CartesianProduct(pOriginalSet pA, pOriginalSet pB) pCartersianSet pC=createNullCartersianSet(); /
2、空卡for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA) / 空卡 序偶插入 建立序偶 条件语句 for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB)OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pB);return pC; 026.02
3、 试设计一算法,给定集合 A、集合 B 和集合 C,判断集合 C 是否为 A 到 B 的一个二元关系。实现下列函数:/* 给定集合 A、集合 B 和集合 C,判断集合 C 是否为 A 到 B 的一个二元关系。* param pA: 集合 A* param pB: 集合 B* param pC: 集合 C* return: 如果集合 C 是 A 到 B 的一个二元关系,则返回 true,否则返回 false。*/ boolean isBinaryRelation(pOriginalSet pA, pOriginalSet pB, pCartersianSet pC)pCartersianSet
4、pD=createNullCartersianSet();for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA) / 空卡 序偶插入 建立序偶 条件语句 for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB)OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSe
5、tElem(pB);for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC)if(isInCartersianSet(pD,getCurrentCartersianSetElem(pC);/满足条件,执行空语句,继续循环else return false;return true;036.03 试设计一算法,求集合 A 上的恒等关系。实现下列函数:/* 给定集合 A,求集合 A 上的恒等关系。* param pSet: 原始集合* return: 集合 A 上的恒等关系。*/ pCartersia
6、nSet IdentityRelation(pOriginalSet pA) pCartersianSet pB=createNullCartersianSet();for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA) / 空卡 序偶插入 建立序偶 条件语句for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA)if(getCurrentOriginalSetElem(pA)=getCurrentOriginalSetE
7、lem(pA)/The same elementsOrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA);return pB;046.04 试设计一算法,求两个卡氏积集合的复合运算。实现下列函数:/* 给定两个集合,求该两个集合的复合运算。* param pA: 卡氏积集合* param pB: 卡氏积集合* return: pA 与 pB 的复合运算结果。*/ pCartersianSet CompositeOpe
8、ration(pCartersianSet pA, pCartersianSet pB) pCartersianSet pC=createNullCartersianSet();for(resetCartersianSet(pA);!isEndOfCartersianSet(pA); nextCartersianSetPos(pA)for(resetCartersianSet(pB);!isEndOfCartersianSet(pB); nextCartersianSetPos(pB) if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple
9、(getCurrentCartersianSetElem(pA),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB)/获取 A 卡氏积中序偶的第二元 /获取第二元OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pB) );retu
10、rn pC; 056.05 试设计一算法,求一个关系的逆运算。实现下列函数:/* 求一个关系的逆运算。* param pA: 卡氏积集合* return: pA 的逆运算结果。*/ pCartersianSet InverseOperation(pCartersianSet pA) pCartersianSet pB=createNullCartersianSet();for(resetCartersianSet(pA);!isEndOfCartersianSet(pA); nextCartersianSetPos(pA)OrderedCoupleInsertToCartersianSet(p
11、B,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA) );return pB;066.06 试设计一算法,对某集合 A 上的一个二元关系,求该关系的幂运算。实现下列函数:/* * 求一个关系的幂运算。 * param pA: 原始集合* param pBinaryRelationR: pA 上的关系 R* param n: 幂运算的次数,且 n = 0* retur
12、n: pBinaryRelationSet 的 n 次幂运算结果。*/ pCartersianSet CompositeOperation(pCartersianSet pA, pCartersianSet pB) pCartersianSet pC=createNullCartersianSet();for(resetCartersianSet(pA);!isEndOfCartersianSet(pA); nextCartersianSetPos(pA)for(resetCartersianSet(pB);!isEndOfCartersianSet(pB); nextCartersianSe
13、tPos(pB) if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB)/获取 A 卡氏积中序偶的第二元 /获取第二元OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA),getS
14、econdElemOfOrderedCouple(getCurrentCartersianSetElem(pB) );return pC; pCartersianSet PowOperation(pOriginalSet pA,pCartersianSet pBinaryRelationR, int n)pCartersianSet pC=createNullCartersianSet();pC=copyCartersianSet(pBinaryRelationR);if(n=0) for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOri
15、ginalSetPos(pA) for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA)OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA);return pC;if(n=1)return pBinaryRelationR;for(int i=1;i插入 pD 即可 其中 pD 为 R 的复制函数值易错点:因为无需给出 A。所以循
16、环利用 pBinaryRelationR 即可。双重循环出错。pCartersianSet SymmetricClosure(pCartersianSet pBinaryRelationR) pCartersianSet pD=copyCartersianSet(pBinaryRelationR);for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersianSetPos(pBinaryRelationR)pOrderedCouple xuou=createOrder
17、edCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR); / 定义xuou 为序偶if(!isInCartersianSet(pBinaryRelationR,xuou) / 判断序偶是否在 pROrderedCoupleInsertToCartersianSet(pD,xuou); / 插入序偶 return pD;146.14 试设计
18、一算法,对某集合 A 上的一个二元关系 R,求 R 的传递闭包。实现下列函数:/* 判断一个关系 R 的传递闭包 * param pA: 原始集合* param pBinaryRelationR: 卡氏积集合,该集合是一个 pA 上的二元关系* return: pBinaryRelationR 的传递闭包*/ pCartersianSet TransitiveClosure(pOriginalSet pA, pCartersianSet pBinaryRelationR)pCartersianSet pB=copyCartersianSet(pBinaryRelationR);pCarters
19、ianSet pD=copyCartersianSet(pBinaryRelationR);if(!isNullCartersianSet(pBinaryRelationR) /非空/假定:R 为 ; pD 为 for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersianSetPos(pBinaryRelationR)if(!isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersia
20、nSetElem(pBinaryRelationR),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)/R 中序偶第二元不等于第一元 即 y!=x; 排除两元相等的情况for(resetCartersianSet(pD);!isEndOfCartersianSet(pD);nextCartersianSetPos(pD) if(isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pD),get
21、SecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)/ R 中序偶的第二元相等和 pD 中序偶第一元相等 即 R 为 ; pD 为 中 Ry=pDy ;*/OrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR),getSecondElemOfOrderedCouple(getCurrentCarter
22、sianSetElem(pD);/ 把符合条件的插入到 pB ;return pB; 156.15 实现 Warshall 算法,求某关系的传递闭包。实现下列函数:/* 对某集合 A 上的一个二元关系,求该关系的传递闭包。该关系使用矩阵表示。* param pM:二元关系矩阵 * return: pM 的传递闭包的关系矩阵*/ pMatrix Warshall(pMatrix pM)int i,j,a,b;int n=getDim(pM);/维数pMatrixBase p;p=outToBuffer(pM);/首元素if(n=1)/非一维for(i=0;i?R ,?R , ?R 均属于 R r
23、eturn true;else if(i!=1|j!=1) /或不属于 R return true;elsereturn false; boolean isEquivalentRelation(pOriginalSet pA, pCartersianSet pBinaryRelationR)if(isNullCartersianSet(pBinaryRelationR) if(!isNullCartersianSet(pBinaryRelationR)if(IsReflexivity(pA,pBinaryRelationR)=truereturn false;二7.02 试设计一算法,对某集合
24、 A 上的一个二元关系 R,求商集 A/R。实现下列函数:/* 对某集合 A 上的一个二元关系 R,判断 R 是否为等价关系 * param pSetA:原始集合* param pBinaryRelationR: 卡氏积集合,该集合是一个 pA 上的二元关系* return: 商集 A/R。商集中的每一个元素都是等价类集合。是 pCompoundSet 复合集合类型;其元素是原始集合,即等价类集合是 pOriginalSet 类型。 * 注意:在求解过程中,请勿对 pSetA 和 pBinaryRelationR 进行任何的加工型操作。* 即请勿修改该集合的结构,包括增加或删除集合中的元素,或
25、者对* pSetA 和 pBinaryRelationR 进行赋值操作。*/ pCompoundSet QuotientSet(pOriginalSet pSetA, pCartersianSet pBinaryRelationR)pOriginalSet pA=createNullOriginalSet();pCompoundSet pB=createNullCompoundSet();if(!isNullCartersianSet(pBinaryRelationR)for(resetOriginalSet(pSetA);!isEndOfOriginalSet(pSetA);nextOrig
26、inalSetPos(pSetA)pA=createNullOriginalSet();for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersianSetPos(pBinaryRelationR)if(isEqualOriginalSetElem(getCurrentOriginalSetElem(pSetA),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)/条件插入
27、elemInsertToOriginalSet(pA,getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR);if(!isNullOriginalSet(pA)originalSetInsertToCompoundSet(pB,pA);return pB;7.02 试设计一算法,对某集合 A 上的一个二元关系 R,求商集 A/R。实现下列函数:/* 对某集合 A 上的一个二元关系 R,判断 R 是否为等价关系 * param pSetA:原始集合* param pBinaryRelationR: 卡氏
28、积集合,该集合是一个 pA 上的二元关系* return: 商集 A/R。商集中的每一个元素都是等价类集合。是 pCompoundSet 复合集合类型;其元素是原始集合,即等价类集合是 pOriginalSet 类型。 * 注意:在求解过程中,请勿对 pSetA 和 pBinaryRelationR 进行任何的加工型操作。* 即请勿修改该集合的结构,包括增加或删除集合中的元素,或者对* pSetA 和 pBinaryRelationR 进行赋值操作。*/ 三7.03 试设计一算法,求某集合 A 上的模 n 同余关系。实现下列函数:/* 对某集合 A 上的一个二元关系 R,判断 R 是否为等价关
29、系 * param pSet:原始集合* param n: 模* return: 集合 A 上的模 n 同余关系 * 注意:在求解过程中,请勿对 pSetA 和 pBinaryRelationR 进行任何的加工型操作。* 即请勿修改该集合的结构,包括增加或删除集合中的元素。*/ pCartersianSet CongruenceRelation(pOriginalSet pSet, int n)pOriginalSet A=copyOriginalSet(pSet);pOriginalSet B=copyOriginalSet(pSet);pCartersianSet pC=createNul
30、lCartersianSet();pOrderedCouple xuou;if(!isNullCartersianSet(pSet)for(resetOriginalSet(B);!isEndOfOriginalSet(B);nextOriginalSetPos(B)for(resetOriginalSet(A);!isEndOfOriginalSet(A);nextOriginalSetPos(A)if(originalSetElemToInt(getCurrentOriginalSetElem(B)-originalSetElemToInt(getCurrentOriginalSetEle
31、m(A)%n=0)if(!isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(B),getCurrentOriginalSetElem(A)xuou=createOrderedCouple(getCurrentOriginalSetElem(B),getCurrentOriginalSetElem(A);OrderedCoupleInsertToCartersianSet(pC,xuou);return pC;四7.04 试设计一算法,对某集合 A 上的一个二元关系 R,判断 R 是否为偏序关系。实现下列函数:/
32、* 对某集合 A 上的一个二元关系 R,判断 R 是否为偏序关系* param pA: 原始集合* param pBinaryRelationR: 卡氏积集合,该集合是一个 pA 上的二元关系* return: 如果 R 是 A 上的偏序关系,则返回 true;否则返回 false*/ / R 为自反,反对称和传递的 则 R 为偏序关系 调用三者函数boolean IsReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR) pCartersianSet pC=createNullCartersianSet();/获取 IAfo
33、r(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA) for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA)OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalSetElem(pA); for(resetCartersianSet(pC);!isEndOfCarte
34、rsianSet(pC); nextCartersianSetPos(pC)if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC);/满足条件,执行空语句,继续循环else return false;return true;Symmetry_Type DetermineSymmetry(pCartersianSet pBinaryRelationR)int a,b,c; a=b=c=0;if(!isNullCartersianSet(pBinaryRelationR)for(resetCartersianSet
35、(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersianSetPos(pBinaryRelationR)if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelatio
36、nR)if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(get
37、CurrentCartersianSetElem(pBinaryRelationR),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)c+;if(c=0if(a=0if(a=0else return NOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;if(isNullCartersianSet(pBinaryRelationR)return SYMMETRY_AND_ANTI_SYMMETRY;boolean IsTransitive(pOriginalSet pA, pCar
38、tersianSet pBinaryRelationR)pOriginalSetElem First1,Second1;pOriginalSetElem First2,Second2;pCartersianSet pB=copyCartersianSet(pBinaryRelationR);pCartersianSet pC=copyCartersianSet(pBinaryRelationR);if(!isNullCartersianSet(pBinaryRelationR)for(resetCartersianSet(pC);!isEndOfCartersianSet(pC);nextCa
39、rtersianSetPos(pC)First1=getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pC);Second1=getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pC);for(resetCartersianSet(pB);!isEndOfCartersianSet(pB);nextCartersianSetPos(pB)First2=getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB);Se
40、cond2=getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pB);if(isEqualOriginalSetElem(First2,Second1)if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(First1,Second2)return false;else return true;return true;boolean isPartialOrderRelation(pOriginalSet pA, pCartersianSet pBinaryRelationR)if(isNullCartersianSet(pBinaryRelationR)if(!isNullCartersianSet(pBinaryRelationR)if(IsReflexivity(pA,pBinaryRelationR)=truereturn false;