2014年广工离散数学Anyview参考答案_第1页
2014年广工离散数学Anyview参考答案_第2页
2014年广工离散数学Anyview参考答案_第3页
2014年广工离散数学Anyview参考答案_第4页
2014年广工离散数学Anyview参考答案_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

广东工业大学离散数学Anyview习题答案——更新于2014年12月作者Seasand20141.00①试设计一算法,判断元素与集合之间的关系。实现下列函数:/***判断元素与集合之间的关系。元素和集合之间的关系只有两种。*@paramelem:元素*@parampA:集合*@return:如果elem∈pA,则返回TRUE,否则返回FALSE*/BooleanIsInSet(SetElemelem,pSetpA){//Addyourcodehere}//1.00BooleanIsInSet(SetElemelem,pSetpA){//AddyourcodehereSetElem*a=outToBuffer(pA);for(;*a!='\n';a++){if(elem==*a){returntrue;}}returnfalse;}1.01③试设计一算法,实现集合的并运算。实现下列函数:/***进行两个集合的并运算*@parampA:要进行并运算的集合*@parampB:要进行并运算的集合*@return:将pA和pB进行并运算后得到的集合*/pSetSetUnion(pSetpA,pSetpB){//Addyourcodehere}//1.01pSetSetUnion(pSetpA,pSetpB){SetElem*a=outToBuffer(pA);SetElem*b=outToBuffer(pB);pSetpC=createNullSet();inti=0;for(;*b!='\n';b++){directInsertSetElem(pC,*b);}for(a=outToBuffer(pA);*a!='\n';a++){if(isInSet(pB,*a)!=true){directInsertSetElem(pC,*a);}}returnpC;}1.02②试设计一算法,实现集合的交运算。实现下列函数:/***进行两个集合的交运算*@parampA:要进行交运算的集合*@parampB:要进行交运算的集合*@return:将pA和pB进行交运算后得到的集合*/pSetSetIntersection(pSetpA,pSetpB){//Addyourcodehere}//1.02pSetSetIntersection(pSetpA,pSetpB){SetElem*a=outToBuffer(pA);SetElem*b=outToBuffer(pB);pSetpC=createNullSet();for(;*b!='\n';b++){if(isInSet(pA,*b)==true){directInsertSetElem(pC,*b);}}returnpC;}1.03②试设计一算法,实现集合的差运算。实现下列函数:/***进行两个集合的差运算*@parampA:要进行差运算的集合,相当于A-B中的A*@parampB:要进行差运算的集合,相当于A-B中的B*@return:将pA和pB进行差运算后得到的集合*/pSetSetSubtraction(pSetpA,pSetpB){//Addyourcodehere}//1.03pSetSetSubtraction(pSetpA,pSetpB){SetElem*a=outToBuffer(pA);SetElem*b=outToBuffer(pB);pSetpC=createNullSet();for(;*a!='\n';a++){if(isInSet(pB,*a)==true)continue;directInsertSetElem(pC,*a);}returnpC;}1.04②试设计一算法,实现集合的求补集运算。实现下列函数:/***进行集合的求补集运算。*@parampA:要进行求补集运算的集合*@parampI:全集*@return:返回pA相对于pI的补集。注意:有可能存在pA不是PI的子集的情况,*在这种情况下pA的补集不存在,应当返回NULL*/pSetSetComplement(pSetpA,pSetpI){//Addyourcodehere}//1.04pSetSetComplement(pSetpA,pSetpI){SetElem*a=outToBuffer(pA);SetElem*i=outToBuffer(pI);pSetpC=createNullSet();intb=0,k=0;for(;*i!='\n';i++){if(isInSet(pA,*i)==true){b++;continue;}directInsertSetElem(pC,*i);}for(;*a!='\n';a++){if(isInSet(pI,*a)==true){continue;}k++;directInsertSetElem(pC,*i);}if((b==0&&isNullSet(pA)!=true)||(b!=0&&k!=0))returnNULL;if(isNullSet(pA)==true&&isNullSet(pI)!=true)returnpI;elsereturnpC;}1.05②试设计一算法,实现集合的对称差运算。实现下列函数:/***进行集合的对称差运算。*@parampA:需要进行对称差运算的集合*@parampB:需要进行对称差运算的集合*@return:返回pA与pB进行对称差运算后得到的集合。*/pSetSetSysmmetricDifference(pSetpA,pSetpB){//Addyourcodehere}//1.05pSetSetSysmmetricDifference(pSetpA,pSetpB){//AddyourcodeherepSetpS;pS=createNullSet();SetElem*pAElems;SetElem*pBElems;pAElems=outToBuffer(pA);pBElems=outToBuffer(pB);while(*pAElems!='\n'){if(!isInSet(pB,*pAElems)){directInsertSetElem(pS,*pAElems);}pAElems++;}while(*pBElems!='\n'){if(!isInSet(pA,*pBElems)){directInsertSetElem(pS,*pBElems);}pBElems++;}returnpS;}1.06③试设计一算法,判断两个集合之间的包含关系。实现下列函数:/***判断两个集合之间的包含关系。规定集合之间的包含关系为:*真包含,被真包含于,相等。*@parampA:需要进行包含关系判断的集合*@parampB:需要进行包含关系判断的集合*@return:如果pA真包含pB,返回REALINCLUDING;*如果pA被真包含于pB,返回REALINCLUDED;*如果pA等于pB,返回EQUAL;*对于其它情况,返回NOT_INCLUSIVE。*/SetRelationshipStatusSetRelationship(pSetpA,pSetpB){//Addyourcodehere}//1.06SetRelationshipStatusSetRelationship(pSetpA,pSetpB){//AddyourcodeherepSetpS;pS=createNullSet();SetElem*pAElems;SetElem*pBElems;pAElems=outToBuffer(pA);pBElems=outToBuffer(pB);pS=pB;if(isNullSet(pA)&&!isNullSet(pB))returnREALINCLUDED;if(!isNullSet(pA)&&isNullSet(pB))returnREALINCLUDING;if(isNullSet(pA)&&isNullSet(pB))returnEQUAL;if(!isNullSet(pA)&&!isNullSet(pB)){while(*pAElems!='\n'){if(isInSet(pS,*pAElems))pAElems++;else{while(*pBElems!='\n'){if(isInSet(pA,*pBElems))pBElems++;elsereturnNOT_INCLUSIVE;if(*pBElems=='\n')returnREALINCLUDING;}}}if(*pAElems=='\n'){while(*pBElems!='\n')if(isInSet(pA,*pBElems))pBElems++;elsereturnREALINCLUDED;if(*pBElems=='\n')returnEQUAL;}}}1.07⑤试设计一个非递归算法,实现集合的求幂集运算。实现下列函数:/***求一个集合的幂集。*@parampA:需要进行幂集的集合*@return:返回pA的幂集*/pSetFamilyPowerSet(pSetpA){//Addyourcodehere}//1.07pSetmiji(pSetpB,pSetpC){SetElem*pBElems;SetElem*pCElems;pSetpS;pS=createNullSet();pBElems=outToBuffer(pB);pCElems=outToBuffer(pC);while(*pBElems!='\n'){directInsertSetElem(pS,*pBElems);pBElems++;}while(*pCElems!='\n'){if(!isInSet(pB,*pCElems)){directInsertSetElem(pS,*pCElems);}++pCElems;}returnpS;}pFamilyOfSetPowerSet(pSetpA){//Addyourcodehereinti;pSetpI=createNullSet();pFamilyOfSetpF=createNullFamilyOfSet();SetElem*pBElems=outToBuffer(pA);insertToFamilyOfSet(pF,pI);if(isNullSet(pA)==FALSE)while(*pBElems!='\n'){pSetpK=createNullSet();directInsertSetElem(pK,*pBElems);pSet*pS=outFamilyOfSetToBuffer(pF);for(i=0;*(pS+i)!=NULL;i++)insertToFamilyOfSet(pF,miji(pK,*(pS+i)));pBElems++;}returnpF;}1.08④试设计一个递归算法,实现集合的求幂集运算。实现下列函数:/***求一个集合的幂集。*@parampA:需要进行幂集的集合*@return:返回pA的幂集*/pFamilyOfSetPowerSet(pSetpA){//Addyourcodehere}//1.08pSetmiji(pSetpB,pSetpC){SetElem*pBElems;SetElem*pCElems;pSetpS;pS=createNullSet();pBElems=outToBuffer(pB);pCElems=outToBuffer(pC);while(*pBElems!='\n'){directInsertSetElem(pS,*pBElems);pBElems++;}while(*pCElems!='\n'){if(!isInSet(pB,*pCElems)){directInsertSetElem(pS,*pCElems);}++pCElems;}returnpS;}pFamilyOfSetPowerSet(pSetpA){//Addyourcodehereinti;pSetpI=createNullSet();pFamilyOfSetpF=createNullFamilyOfSet();SetElem*pBElems=outToBuffer(pA);insertToFamilyOfSet(pF,pI);if(isNullSet(pA)==FALSE)while(*pBElems!='\n'){pSetpK=createNullSet();directInsertSetElem(pK,*pBElems);pSet*pS=outFamilyOfSetToBuffer(pF);for(i=0;*(pS+i)!=NULL;i++)insertToFamilyOfSet(pF,miji(pK,*(pS+i)));pBElems++;}returnpF;}3.01⑤试设计一个非递归算法,验证一个表达式是不是命题公式(statementformula)。实现下列函数:/***判断一个表达式是不是命题公式。*@parampFormula:要进行判断的表达式。该表达式的最后一个元素为“#”,而且规定*'#'仅用于指示该表达式的结尾,并不属于表达式的一部分。*@return:如果pFormula是命题公式,返回TRUE;否则返回FALSE。*/BooleanIsStatementFormula(pStatementFormulapFormula){//Addyourcodehere}BooleanIsStatementFormula(pStatementFormulapFormula){//AddyourcodehereStatementFormulaSymblespreS,currS,nextS;intleftNum=0,rightNum=0;preS=getCurrentSymbleType(pFormula);switch(preS){caseException:returnfalse;caseConjunction:caseDisjunction:caseImplication:caseEquivalence:caseLeftParenthesis:leftNum++;break;caseRightParenthesis:caseEndOfFormula:returntrue;}nextPos(pFormula);currS=getCurrentSymbleType(pFormula);switch(currS){caseLeftParenthesis:leftNum++;break;caseRightParenthesis:rightNum++;break;casePropositionalVariable:if(preS==PropositionalVariable)returnfalse;}while(nextS!=EndOfFormula){nextPos(pFormula);nextS=getCurrentSymbleType(pFormula);if(nextS==LeftParenthesis)leftNum++;if(nextS==RightParenthesis)rightNum++;if(preS==Exception||currS==Exception||nextS==Exception)returnfalse;if(currS==PropositionalVariable)if(nextS==PropositionalVariable||preS==PropositionalVariable)returnfalse;if(currS==Conjunction||currS==Disjunction||currS==Implication||currS==Equivalence)if((preS!=PropositionalVariable&&preS!=RightParenthesis)||(nextS!=PropositionalVariable&&nextS!=LeftParenthesis&&nextS!=Negation))returnfalse;if(nextS==Negation)if(currS==PropositionalVariable||currS==RightParenthesis)returnfalse;preS=currS;currS=nextS;}if(leftNum!=rightNum)returnfalse;returntrue;}3.02⑤试设计一个递归算法,验证一个表达式是不是命题公式(statementformula)。实现下列函数:/***判断一个表达式是不是命题公式。*@parampFormula:要进行判断的表达式。该表达式的最后一个元素为“#”,而且规定*'#'仅用于指示该表达式的结尾,并不属于表达式的一部分。*@return:如果pFormula是命题公式,返回TRUE;否则返回FALSE。*/BooleanIsStatementFormula(pStatementFormulapFormula){//Addyourcodehere}BooleanFunction(intleftNum,intrightNum,StatementFormulaSymblespreS,StatementFormulaSymblescurrS,StatementFormulaSymblesnextS,pStatementFormulapFormula){nextPos(pFormula);//解释同上题所示nextS=getCurrentSymbleType(pFormula);if(nextS==LeftParenthesis)leftNum++;if(nextS==RightParenthesis)rightNum++;if(preS==Exception||currS==Exception||nextS==Exception)returnfalse;if(currS==PropositionalVariable)if(nextS==PropositionalVariable||preS==PropositionalVariable)returnfalse;if(currS==Conjunction||currS==Disjunction||currS==Implication||currS==Equivalence)if((preS!=PropositionalVariable&&preS!=RightParenthesis)||(nextS!=PropositionalVariable&&nextS!=LeftParenthesis&&nextS!=Negation))returnfalse;if(nextS==Negation)if(currS==PropositionalVariable||currS==RightParenthesis)returnfalse;preS=currS;currS=nextS;if(nextS!=EndOfFormula){returnFunction(leftNum,rightNum,preS,currS,nextS,pFormula);}if(leftNum!=rightNum)returnfalse;returntrue;}BooleanIsStatementFormula(pStatementFormulapFormula){//AddyourcodehereStatementFormulaSymblespreS,currS,nextS;/intleftNum=0,rightNum=0;preS=getCurrentSymbleType(pFormula);switch(preS){caseException:returnfalse;//若取得了公式外的字符,则不是合法的命题公式caseConjunction:returnfalse;caseDisjunction:returnfalse;caseImplication:returnfalse;caseEquivalence:returnfalse;caseLeftParenthesis:leftNum++;break;//若为左括号,则leftNum的值自增一caseRightParenthesis:returnfalse;caseEndOfFormula:returntrue;//若命题公式只有结束符号‘#’,则为合法的命题公式}nextPos(pFormula);//指示器指向下一个字符currS=getCurrentSymbleType(pFormula);switch(currS){caseLeftParenthesis:leftNum++;break;//若为左括号,则leftNum的值自增一caseRightParenthesis:rightNum++;break;//若为有括号,则RightNum的值自增一casePropositionalVariable:if(preS==PropositionalVariable)//当currS为命题变元时,若preS也为命题变元returnfalse;}returnFunction(leftNum,rightNum,preS,currS,nextS,pFormula);//返回值的真假,同时调用函数Function}6.01③试设计一算法,实现集合的卡氏积运算。实现下列函数:/***进行两个集合的卡氏积运算*@parampA:要进行卡氏积运算的集合*@parampB:要进行卡氏积运算的集合*@return:将pA和pB进行卡氏积运算后得到的集合*/pCartersianSetCartesianProduct(pOriginalSetpA,pOriginalSetpB){//Addyourcodehere}CH06EX01pCartersianSetCartesianProduct(pOriginalSetpA,pOriginalSetpB){pOriginalSetElempX=NULL;pOriginalSetElempY=NULL;pOrderedCouplepOrder=NULL;pCartersianSetpCarter=createNullCartersianSet();//创建空的卡氏积集合if(!isNullOriginalSet(pA)&&!isNullOriginalSet(pB)){//判断集合是否为空resetOriginalSet(pA);//使A集合指针指向第一个元素while(!isEndOfOriginalSet(pA)){pX=getCurrentOriginalSetElem(pA);//取得A集合当前指针指向的元素resetOriginalSet(pB);//使B集合指针指向第一个元素while(!isEndOfOriginalSet(pB)){pY=getCurrentOriginalSetElem(pB);//取得B集合当前指针指向的元素pOrder=createOrderedCouple(pX,pY);//构造序偶对OrderedCoupleInsertToCartersianSet(pCarter,pOrder);//将序偶插入到卡氏积集合nextOriginalSetPos(pB);//指针后移}nextOriginalSetPos(pA);//指针后移}}returnpCarter;}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){//Addyourcodehere}CH06EX02booleanisBinaryRelation(pOriginalSetpA,pOriginalSetpB,pCartersianSetpC){pOriginalSetElempX=NULL;pOriginalSetElempY=NULL;pOrderedCouplepZ=NULL;pOrderedCouplepOrder=NULL;pCartersianSetpCarter=createNullCartersianSet();//创建空的卡氏积集合booleanb=true;if(!isNullOriginalSet(pA)&&!isNullOriginalSet(pB)){//判断集合是否为空resetOriginalSet(pA);//使A集合指针指向第一个元素while(!isEndOfOriginalSet(pA)){pX=getCurrentOriginalSetElem(pA);//取得A集合当前指针指向的元素resetOriginalSet(pB);//使B集合指针指向第一个元素while(!isEndOfOriginalSet(pB)){pY=getCurrentOriginalSetElem(pB);//取得B集合当前指针指向的元素pOrder=createOrderedCouple(pX,pY);//构造序偶对OrderedCoupleInsertToCartersianSet(pCarter,pOrder);//将序偶插入到卡氏积集合nextOriginalSetPos(pB);//指针后移}nextOriginalSetPos(pA);//指针后移}}resetCartersianSet(pC);//使C集合指针指向第一个元素while(!isNullCartersianSet(pC)&&!isEndOfCartersianSet(pC)){pZ=getCurrentCartersianSetElem(pC);//取得C集合当前指针指向的元素b=isInCartersianSet(pCarter,pZ);//判断序偶是否在pCArter集合中if(b==false)break;nextCartersianSetPos(pC);//指针后移}returnb;}6.03②试设计一算法,求集合A上的恒等关系。实现下列函数:/***给定集合A,求集合A上的恒等关系。*@parampSet:原始集合*@return:集合A上的恒等关系。*/pCartersianSetIdentityRelation(pOriginalSetpSet){//Addyourcodehere}CH06EX03pCartersianSetIdentityRelation(pOriginalSetpSet){pOriginalSetElempX=NULL;pOrderedCouplepOrder=NULL;pCartersianSetpCarter=createNullCartersianSet();//创建空的卡氏积集合if(!isNullOriginalSet(pSet)){//判断集合是否为空resetOriginalSet(pSet);//使集合指针指向第一个元素while(!isEndOfOriginalSet(pSet)){pX=getCurrentOriginalSetElem(pSet);//取得集合当前指针指向的元素pOrder=createOrderedCouple(pX,pX);//构造序偶对OrderedCoupleInsertToCartersianSet(pCarter,pOrder);//将序偶插入到卡氏积集合nextOriginalSetPos(pSet);//指针后移}}returnpCarter;}6.04③试设计一算法,求两个卡氏积集合的复合运算。实现下列函数:/***给定两个集合,求该两个集合的复合运算。*@parampA:卡氏积集合*@parampB:卡氏积集合*@return:pA与pB的复合运算结果。*/pCartersianSetCompositeOperation(pCartersianSetpA,pCartersianSetpB){//Addyourcodehere}CH06EX04pCartersianSetCompositeOperation(pCartersianSetpA,pCartersianSetpB){pOriginalSetElempX;pOriginalSetElempY;pOriginalSetElempXX;pOriginalSetElempYY;pOrderedCouplepOrderA=NULL;pOrderedCouplepOrderB=NULL;pOrderedCouplepOrder=NULL;pCartersianSetpCarter=createNullCartersianSet();//创建空的卡氏积集合if(!isNullCartersianSet(pA)&&!isNullCartersianSet(pB)){resetCartersianSet(pA);//使A集合指针指向第一个元素while(!isEndOfCartersianSet(pA)){pOrderA=getCurrentCartersianSetElem(pA);//取得A集合当前指针指向的元素resetCartersianSet(pB);//使B集合指针指向第一个元素while(!isEndOfCartersianSet(pB)){pOrderB=getCurrentCartersianSetElem(pB);//取得B集合当前指针指向的元素pX=getFirstElemOfOrderedCouple(pOrderA);//取得A序偶的第一元pY=getSecondElemOfOrderedCouple(pOrderA);//取得A序偶的第二元pXX=getFirstElemOfOrderedCouple(pOrderB);//取得B序偶的第一元pYY=getSecondElemOfOrderedCouple(pOrderB);//取得B序偶的第二元if(pY==pXX){pOrder=createOrderedCouple(pX,pYY);//构造序偶对OrderedCoupleInsertToCartersianSet(pCarter,pOrder);//将序偶插入到卡氏积集合}nextCartersianSetPos(pB);//指针后移}nextCartersianSetPos(pA);//指针后移}}returnpCarter;}6.05②试设计一算法,求一个关系的逆运算。实现下列函数:/***求一个关系的逆运算。*@parampA:卡氏积集合*@return:pA的逆运算结果。*/pCartersianSetInverseOperation(pCartersianSetpA){//Addyourcodehere}CH06EX05pCartersianSetInverseOperation(pCartersianSetpA){pOriginalSetElempX;pOriginalSetElempY;pOrderedCouplepOrderA=NULL;pOrderedCouplepOrder=NULL;pCartersianSetpCarter=createNullCartersianSet();//创建空的卡氏积集合if(!isNullCartersianSet(pA)){resetCartersianSet(pA);//使A集合指针指向第一个元素while(!isEndOfCartersianSet(pA)){pOrderA=getCurrentCartersianSetElem(pA);//取得A集合当前指针指向的元素pX=getFirstElemOfOrderedCouple(pOrderA);//取得A序偶的第一元pY=getSecondElemOfOrderedCouple(pOrderA);//取得A序偶的第二元pOrder=createOrderedCouple(pY,pX);//构造序偶对OrderedCoupleInsertToCartersianSet(pCarter,pOrder);//将序偶插入到卡氏积集合nextCartersianSetPos(pA);//指针后移}}returnpCarter;}6.06④试设计一算法,对某集合A上的一个二元关系,求该关系的幂运算。实现下列函数:/***求一个关系的幂运算。*@parampA:原始集合*@parampBinaryRelationR:pA上的关系R*@paramn:幂运算的次数,且n>=0*@return:pBinaryRelationSet的n次幂运算结果。*/pCartersianSetPowOperation(pOriginalSetpA,pCartersianSetpBinaryRelationR,intn){//Addyourcodehere}CH06EX06pCartersianSetCompositeOperation(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<n;i++){pC=CompositeOperation(pC,pBinaryRelationR);}returnpC;}6.07②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性。实现下列函数:/***判断一个关系是否具有自反性。*@parampA:原始集合*@parampBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系*@return:如果pBinaryRelationSet具有自反性;则返回true,否则返回false。*/booleanIsReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR){//Addyourcodehere}CH06EX07booleanIsReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR){pOriginalSetElempX=NULL;pOrderedCouplepOrder=NULL;booleanb=false;if(!isNullOriginalSet(pA)){//判断集合是否为空resetOriginalSet(pA);//使集合指针指向第一个元素while(!isEndOfOriginalSet(pA)){pX=getCurrentOriginalSetElem(pA);//取得集合当前指针指向的元素pOrder=createOrderedCouple(pX,pX);//构造序偶对b=isInCartersianSet(pBinaryRelationR,pOrder);if(b==false){break;}nextOriginalSetPos(pA);//指针后移}}else{returntrue;}returnb;}6.08②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有反自反性。实现下列函数:/***判断一个关系是否具有反自反性。*@parampA:原始集合*@parampBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系*@return:如果pBinaryRelationSet具有反自反性;则返回true,否则返回false。*/booleanIsAntiReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR){//Addyourcodehere}CH06EX08booleanIsAntiReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR){pOriginalSetElempX=NULL;pOrderedCouplepOrder=NULL;booleanb=true;if(!isNullOriginalSet(pA)){//判断集合是否为空resetOriginalSet(pA);//使集合指针指向第一个元素while(!isEndOfOriginalSet(pA)){pX=getCurrentOriginalSetElem(pA);//取得集合当前指针指向的元素pOrder=createOrderedCouple(pX,pX);//构造序偶对b=isInCartersianSet(pBinaryRelationR,pOrder);if(b==true){break;}nextOriginalSetPos(pA);//指针后移}}else{returntrue;}return!b;}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;*/Reflexivity_TypeDetermineReflexivity0609(pOriginalSetpA,pCartersianSetpBinaryRelationR){//Addyourcodehere}CH06EX09Reflexivity_TypeDetermineReflexivity(pOriginalSetpA,pCartersianSetpBinaryRelationR){pOriginalSetElempX=NULL;pOrderedCouplepOrder=NULL;booleanb;inti=0,j=0;if(!isNullOriginalSet(pA)){//判断集合是否为空resetOriginalSet(pA);//使集合指针指向第一个元素while(!isEndOfOriginalSet(pA)){i++;pX=getCurrentOriginalSetElem(pA);//取得集合当前指针指向的元素pOrder=createOrderedCouple(pX,pX);//构造序偶对b=isInCartersianSet(pBinaryRelationR,pOrder);if(b==true){j++;}nextOriginalSetPos(pA);//指针后移}}else{returnREFLEXIVITY_AND_ANTI_REFLEXIVITY;}if(i==j){returnREFLEXIVITY;}elseif(j==0){returnANTI_REFLEXIVITY;}else{returnNOT_REFLEXIVITY_AND_NOT_ANTI_REFLEXIVITY;}returnREFLEXIVITY_AND_ANTI_REFLEXIVITY;}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){//Addyourcodehere}CH06EX10Symmetry_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(pBinaryRelationR)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))&&!isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)))){a++;}if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))&&isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)))){b++;}if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))){c++;}}{if(c==0&&a!=0)returnSYMMETRY;if(a==0&&c==0)returnSYMMETRY_AND_ANTI_SYMMETRY;if(a==0&&c!=0)returnANTI_SYMMETRY;elsereturnNOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;}}if(isNullCartersianSet(pBinaryRelationR))returnSYMMETRY_AND_ANTI_SYMMETRY;}6.11④试设计一算法,对某集合A上的一个二元关系R,判断R是否具有传递性。实现下列函数:/***判断一个关系是否具有传递性。*@parampA:原始集合*@parampBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系*@return:如果pBinaryRelationR具有传递性,则返回true,否则返回false*/booleanIsTransitive(pOriginalSetpA,pCartersianSetpBinaryRelationR){//Addyourcodehere}booleanIsTransitive(pOriginalSetpA,pCartersianSetpBinaryRelationR){pOriginalSetElemFirst1,Second1;pOriginalSetElemFirst2,Second2;pCartersianSetpB=copyCartersianSet(pBinaryRelationR);pCartersianSetpC=copyCartersianSet(pBinaryRelationR);if(!isNullCartersianSet(pBinaryRelationR)){for(resetCartersianSet(pC);!isEndOfCartersianSet(pC);nextCartersianSetPos(pC)){First1=getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pC));Second1=getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pC));for(resetCartersianSet(pB);!isEndOfCartersianSet(pB);nextCartersianSetPos(pB)){First2=getFirstElemOfOrderedC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论