1.00①试设计一算法,
判断元素与集合之间的关系。
Boolean IsInSet(SetElem elem, pSet pA){ //Add your code here
SetElem *pAElems;
pAElems = outToBuffer(pA);
for(;*pAElems != '\n';)
{
if(elem == *pAElems)
return 1;
else
pAElems++;
}
return 0;
}
1.01③试设计一算法,
实现集合的并运算。
pSet SetUnion(pSet pA, pSet pB) {
pSet pS;
pS = pA;
SetElem *pBElems;
pBElems = outToBuffer(pB);
while(*pBElems != '\n')
{if(!isInSet(pA,*pBElems))
{ directInsertSetElem(pS,*pBElems);
}
++pBElems;
}
return pS;
}
1.02②试设计一算法,
实现集合的交运算。
pSet SetIntersection(pSet pA, pSet pB){ pSet pS;
pS = createNullSet();
SetElem *pBElems;
pBElems = outToBuffer(pB);
while(*pBElems != '\n')
{if(isInSet(pA,*pBElems))
{ directInsertSetElem(pS,*pBElems);
}
++pBElems;
}
return pS;
}
1.03②试设计一算法,
实现集合的差运算。
pSet SetSubtraction(pSet pA, pSet pB){ pSet pS;
pS = createNullSet();
SetElem *pAElems;
pAElems = outToBuffer(pA);
while(*pAElems != '\n')
{if(!isInSet(pB,*pAElems))
{ directInsertSetElem(pS,*pAElems);
}
++pAElems;
}
return pS;
}
1.04②试设计一算法,
实现集合的求补集运算。
pSet SetComplement(pSet pA, pSet pI){ pSet pS;
pS = createNullSet();
SetElem *pAElems;
SetElem *pIElems;
pAElems = outToBuffer(pA);
pIElems = outToBuffer(pI);
while(*pAElems!='\n')
{if(!isInSet(pI,*pAElems)) { return NULL;break; }
pAElems++;
}
while(*pIElems != '\n')
{if(!isInSet(pA,*pIElems))
{
directInsertSetElem(pS,*pIElems);
}
++pIElems;
}
return pS;
}
1.05②试设计一算法,
实现集合的对称差运算。
pSet SetSysmmetricDifference(pSet pA, pSet pB){ //Add your code here
pSet pS;
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++;
}
return pS;
}
1.06③试设计一算法,
判断两个集合之间的包含关系。
SetRelationshipStatus SetRelationship(pSet pA, pSet pB) { //Add your code here
pSet pS;
pS = createNullSet();
SetElem *pAElems;
SetElem *pBElems;
pAElems = outToBuffer(pA);
pBElems = outToBuffer(pB);
pS = pB;
if(isNullSet(pA) && !isNullSet(pB))
return REALINCLUDED;
if(!isNullSet(pA) && isNullSet(pB))
return REALINCLUDING;
if(isNullSet(pA) && isNullSet(pB))
return EQUAL;
if(!isNullSet(pA) && !isNullSet(pB))
{ while(*pAElems != '\n')
{
if(isInSet(pS,*pAElems))
pAElems++;
else
{
while(*pBElems != '\n')
{
if(isInSet(pA,*pBElems))
pBElems++;
else
return NOT_INCLUSIVE;
if(*pBElems == '\n')
return REALINCLUDING;
}
}
}
if(*pAElems == '\n')
{ while(*pBElems != '\n')
if(isInSet(pA,*pBElems))
pBElems++;
else
return REALINCLUDED;
if(*pBElems == '\n')
return EQUAL;
}
}
}
1.07⑤试设计一个非递归算法,
实现集合的求幂集运算。
pSet MiJi(pSet pB,pSet pC)
{
SetElem *pBElems;
SetElem *pCElems;
pSet pS;
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;
}
return pS;
}
pFamilyOfSet PowerSet(pSet pA){
//Add your code here
int i;
pSet pI=createNullSet();
pFamilyOfSet pF=createNullFamilyOfSet();
SetElem *pBElems=outToBuffer(pA); insertToFamilyOfSet(pF,pI);
if(isNullSet(pA)==FALSE)
while(*pBElems!='\n')
{
pSet pK=createNullSet();
directInsertSetElem(pK,*pBElems);
pSet *pS=outFamilyOfSetToBuffer(pF);
for(i=0;*(pS+i)!=NULL;i++)
insertToFamilyOfSet(pF,MiJi(pK,*(pS+i)));
pBElems++;
}
return pF;
}
1.08④试设计一个递归算法,
实现集合的求幂集运算。
void function(long l, SetElem *pAElems,pFamilyOfSet pFamSetA,pSet pB) {
SetElem *a=pAElems;
long i=l;
pB=createNullSet();
while(*a!='\n')
{
if(i%2==1)
directInsertSetElem(pB,*a);
a++;
i>>=1;
}
insertToFamilyOfSet(pFamSetA,pB);
l--;
if(l>=0)
function(l,pAElems,pFamSetA,pB);
}
pFamilyOfSet PowerSet(pSet pA){
//Add your code here
pFamilyOfSet pFamSetA=createNullFamilyOfSet();
long i;
long l=1;
SetElem *pAElems=outToBuffer(pA);
pSet pB=createNullSet();
for(i=0;*(pAElems+i)!='\n';)
i++;
l<<=i;
function(l,pAElems,pFamSetA,pB);
return pFamSetA;
}
3.01⑤试设计一个非递归算法,
验证一个表达式是不是命题公式(statement formula)。
Boolean IsStatementFormula(pStatementFormula pFormula){ //Add your code here
StatementFormulaSymbles preS,currS,nextS;
int leftNum = 0,rightNum = 0;
preS = getCurrentSymbleType(pFormula);
switch(preS){
case Exception:return false;
case Conjunction:
case Disjunction:
case Implication:
case Equivalence:
case LeftParenthesis:leftNum++;break;
case RightParenthesis:
case EndOfFormula:return true;
}
nextPos(pFormula);
currS = getCurrentSymbleType(pFormula);
switch(currS){
case LeftParenthesis:leftNum++;break;
case RightParenthesis:rightNum++;break;
case PropositionalVariable:
if(preS == PropositionalVariable)
return false;
}
while (nextS != EndOfFormula){
nextPos(pFormula);
nextS = getCurrentSymbleType(pFormula);
if(nextS == LeftParenthesis)
leftNum++;
if(nextS == RightParenthesis)
rightNum++;
if(preS == Exception||currS == Exception||nextS == Exception)
return false;
if(currS == PropositionalVariable)
if(nextS == PropositionalVariable||preS == PropositionalVariable)
return false;
if(currS == Conjunction||currS == Disjunction||currS == Implication||currS == Equivalence)
if((preS != PropositionalVariable && preS != RightParenthesis) || (nextS != PropositionalVariable && nextS != LeftParenthesis && nextS != Negation))
return false;
if(nextS == Negation)
if(currS == PropositionalVariable||currS == RightParenthesis)
return false;
preS = currS;
currS = nextS;
}
if(leftNum != rightNum)
return false;
return true;
}
3.02⑤试设计一个递归算法,
验证一个表达式是不是命题公式(statement formula)。
Boolean Function(int leftNum,int rightNum,StatementFormulaSymbles preS,StatementFormulaSymbles currS,StatementFormulaSymbles nextS,pStatementFormula pFormula)
{ nextPos(pFormula);
nextS = getCurrentSymbleType(pFormula);
if(nextS == LeftParenthesis)
leftNum++;
if(nextS == RightParenthesis)
rightNum++;
if(preS == Exception||currS == Exception||nextS == Exception)
return false;
if(currS == PropositionalVariable)
if(nextS == PropositionalVariable||preS == PropositionalVariable)
return false;
if(currS == Conjunction||currS == Disjunction||currS == Implication||currS == Equivalence)
if((preS != PropositionalVariable && preS != RightParenthesis) || (nextS != PropositionalVariable && nextS != LeftParenthesis && nextS != Negation))
return false;
if(nextS == Negation)
if(currS == PropositionalVariable||currS == RightParenthesis) return false;
preS = currS;
currS = nextS;
if(nextS != EndOfFormula)
{
return Function(leftNum,rightNum,preS,currS,nextS,pFormula);
}
if(leftNum != rightNum)
return false;
return true;
}
Boolean IsStatementFormula(pStatementFormula pFormula){ //Add your code here
StatementFormulaSymbles preS,currS,nextS;
int leftNum = 0,rightNum = 0;
preS = getCurrentSymbleType(pFormula);
switch(preS){
case Exception:return false;
case Conjunction:
case Disjunction:
case Implication:
case Equivalence:
case LeftParenthesis:leftNum++;break;
case RightParenthesis:
case EndOfFormula:return true;
}
nextPos(pFormula);
currS = getCurrentSymbleType(pFormula);
switch(currS){
case LeftParenthesis:leftNum++;break;
case RightParenthesis:rightNum++;break;
case PropositionalVariable:
if(preS == PropositionalVariable)
return false;
}
return Function(leftNum,rightNum,preS,currS,nextS,pFormula);
}
6.01③试设计一算法,
实现集合的卡氏积运算。
pCartersianSet CartesianProduct(pOriginalSet pA, pOriginalSet pB)
{
pCartersianSet pC=createNullCartersianSet();
for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB)) OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pB)));
}
return pC;
}
6.02②试设计一算法,
给定集合A、集合B和集合C,判断集合C是否为A到B的一个二元关系。
boolean isBinaryRelation(pOriginalSet pA, pOriginalSet pB, pCartersianSet pC)
{
pCartersianSet pD=createNullCartersianSet();
for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB)) OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pB)));
}
for(getCurrentCartersianSetElem(pC);!isEndOfCartersianSet(pC);nextCartersianSetPos(pC))
{
while(!isEndOfCartersianSet(pD))
{ if(getCurrentCartersianSetElem(pD)==getCurrentCartersianSetElem(pC)) nextCartersianSetPos(pD);
else
return false;
}
}
if(isEndOfCartersianSet(pC))
return true;
6.03②试设计一算法,求集合A上的恒等关系。
pCartersianSet IdentityRelation(pOriginalSet pSet)
{
pCartersianSet pC=createNullCartersianSet();
for(resetOriginalSet(pSet);!isEndOfOriginalSet(pSet);nextOriginalSetPos(pSet)) {
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pSet), getCurrentOriginalSetElem(pSet)));
}
return pC;
}
6.04③试设计一算法,求两个卡氏积集合的复合运算。
pCartersianSet CompositeOperation(pCartersianSet pA, pCartersianSet pB)
{
pCartersianSet pC=createNullCartersianSet();
for(resetCartersianSet(pA);!isEndOfCartersianSet(pA);nextCartersianSetPos(pA))
{ for(resetCartersianSet(pB);!isEndOfCartersianSet(pB);nextCartersianSetPos(pB)) {
if(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA))==getFirstElemOfOrderedC ouple(getCurrentCartersianSetElem(pB)));
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(get CurrentCartersianSetElem(pA)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(p B))));
}
}
return pC;
}
6.05②试设计一算法,求一个关系的逆运算。
pCartersianSet InverseOperation(pCartersianSet pA)
{
pCartersianSet pC=createNullCartersianSet();
for(resetCartersianSet(pA);!isEndOfCartersianSet(pA);nextCartersianSetPos(pA)) {
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getSecondElemOfOrderedCouple( getCurrentCartersianSetElem(pA)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(p A))));
}
return pC;
}
6.06④试设计一算法,对某集合A上的一个二元关系,求该关系的幂运算。
pCartersianSet PowOperation(pOriginalSet pA,
pCartersianSet pBinaryRelationR,
int n)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
if(n==0)
{ for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pA)));
}
}
if(n==1)
return pC;
pCartersianSet pD=createNullCartersianSet();
int i;
for(i=2;i<=n;i++)
{ pD=copyCartersianSet(pC);
pC=compositeOperation(pD,pBinaryRelationR);
}
return pC;
}
6.07②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性。
boolean IsReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
if(isNullOriginalSet(pA))
return true;
else
{for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);)
{if(isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalS etElem(pA))))
nextOriginalSetPos(pA);
else
break;}
}
if(isEndOfOriginalSet(pA))
return true;
else
return false;
}
6.08②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有反自反性。
boolean IsAntiReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
if(isNullOriginalSet(pA))
return true;
else
{for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);)
{if(!isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginal SetElem(pA))))
nextOriginalSetPos(pA);
else
break;}
}
if(isEndOfOriginalSet(pA))
return true;
else
return false;
}
6.09③试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性或者反自反性。
在实际运算中,A无需给出。
Reflexivity_Type DetermineReflexivity(pOriginalSet pA,
pCartersianSet pBinaryRelationR)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
if(isNullOriginalSet(pA))
return REFLEXIVITY_AND_ANTI_REFLEXIVITY;
else
{for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);)
{if(isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalS etElem(pA))))
nextOriginalSetPos(pA);
else
break;}
}
if(isEndOfOriginalSet(pA))
return REFLEXIVITY;
else
{
for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);)
{
if(!isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalS etElem(pA))))
nextOriginalSetPos(pA);
else
break;}
}
if(isEndOfOriginalSet(pA))
return ANTI_REFLEXIVITY;
else
return NOT_REFLEXIVITY_AND_NOT_ANTI_REFLEXIVITY;
}
6.10④试设计一算法,对某集合A上的一个二元关系R,判断R是否具有对称性或者反对称性。
boolean IsSymmetry(pCartersianSet pA){
if(!isNullCartersianSet(pA)){
for(resetCartersianSet(pA);!isEndOfCartersianSet(pA);nextCartersianSetPos(pA)){ pOrderedCouple pCouple = createOrderedCouple(
getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA)), getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA)));
if(!isInCartersianSet(pA,pCouple)){
return false;
}
}
}
return true;
}
boolean IsAntiSymmetry(pCartersianSet pA){
if(!isNullCartersianSet(pA)){
for(resetCartersianSet(pA);!isEndOfCartersianSet(pA);nextCartersianSetPos(pA)){ pOriginalSetElem pFirstElem = getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pA)); pOriginalSetElem pSecondElem = getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA));
if(!isEqualOriginalSetElem(pFirstElem,pSecondElem)){
pOrderedCouple pCouple = createOrderedCouple(pSecondElem,pFirstElem);
if(isInCartersianSet(pA,pCouple)){
return false;
}
}
}
}
return true;
}
Symmetry_Type DetermineSymmetry(pCartersianSet pBinaryRelationR)
{
if(IsSymmetry(pBinaryRelationR)){
if(IsAntiSymmetry(pBinaryRelationR)){
return SYMMETRY_AND_ANTI_SYMMETRY;
} else {
return SYMMETRY;
}
} else {
if(IsAntiSymmetry(pBinaryRelationR)){
return ANTI_SYMMETRY;
} else {
return NOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;
}
}
}
6.11④试设计一算法,对某集合A上的一个二元关系R,判断R是否具有传递性。
boolean IsTransitive(pOriginalSet pA, pCartersianSet pBinaryRelationR)
{
pCartersianSet pR = createNullCartersianSet();
if(!isNullCartersianSet(pBinaryRelationR)){
for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersian SetPos(pBinaryRelationR)){
OrderedCoupleInsertToCartersianSet(pR,getCurrentCartersianSetElem(pBinaryRelationR));
}
for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersian SetPos(pBinaryRelationR)){
pOrderedCouple pC1 = getCurrentCartersianSetElem(pBinaryRelationR);
for(resetCartersianSet(pR);!isEndOfCartersianSet(pR);nextCartersianSetPos(pR)){ pOrderedCouple pC2 = getCurrentCartersianSetElem(pR);
if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple(pC1),getFirstElemOfOrderedCouple(p C2))){
if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getFirstElemOfOrderedCouple(pC1), getSecondElemOfOrderedCouple(pC2))))
return false;
}
}
}
}
return true;
}
6.12③试设计一算法,对某集合A上的一个二元关系R,求R的自反闭包。
pCartersianSet ReflexiveClosure(pOriginalSet pA, pCartersianSet pBinaryRelationR)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
pCartersianSet pD=createNullCartersianSet();
pD=copyCartersianSet(pBinaryRelationR);
if(isNullCartersianSet(pC))
{
for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA)) OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pA)));
}
else
{
for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))
{
for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))
{
if(!isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalS etElem(pA))))
OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pA)));
}
}
}
return pD;
}
6.13③试设计一算法,对某集合A上的一个二元关系R,求R的对称闭包。
在实际计算中,无需给出集合A。
pCartersianSet SymmetricClosure(pCartersianSet pBinaryRelationR)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
pCartersianSet pD=createNullCartersianSet();
pD=copyCartersianSet(pBinaryRelationR);
for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC)) {
if(!isInCartersianSet(pC,createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCarter sianSetElem(pC)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pC))))) OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getSecondElemOfOrderedCouple( getCurrentCartersianSetElem(pC)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(p C))));
}
return pD;
}
6.14⑤试设计一算法,对某集合A上的一个二元关系R,求R的传递闭包。
pCartersianSet TransitiveClosure(pOriginalSet pA, pCartersianSet pBinaryRelationR)
{
pCartersianSet pC=createNullCartersianSet();
pC=copyCartersianSet(pBinaryRelationR);
pCartersianSet pD=createNullCartersianSet();
pD=copyCartersianSet(pBinaryRelationR);
pCartersianSet pN=createNullCartersianSet();
pN=copyCartersianSet(pBinaryRelationR);
for(resetCartersianSet(pC);!isEndOfCartersianSet(pC);nextCartersianSetPos(pC)) {
for(resetCartersianSet(pD);!isEndOfCartersianSet(pD);nextCartersianSetPos(pD))
{
if(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pC))==getFirstElemOfOrderedC ouple(getCurrentCartersianSetElem(pD)))
{
if(!isInCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersia nSetElem(pC)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pD))))) OrderedCoupleInsertToCartersianSet(pN,createOrderedCouple(getFirstElemOfOrderedCouple(get CurrentCartersianSetElem(pC)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(p D))));
}
}
}
return pN;
}
6.15③实现Warshall算法,求某关系的传递闭包。
pMatrix Warshall(pMatrix pM)
{
int n,i,j,k,m;
n=getDim(pM);
pMatrixBase pBase;
pBase=outToBuffer(pM);
for(m=0;m<2;m++)
{
for(i=0;i { for(j=0;j { if(!converToInt(*(pBase+n*i+j))) {for(k=0;k { if(converToInt(*(pBase+n*i+k))) if(converToInt(*(pBase+n*k+j))) putValue(pBase+n*i+j,1); } } } } } pM=createMatrix(pBase,n); return pM; } 7.01③试设计一算法,对某集合A上的一个二元关系R,判断R是否为等价关系。 boolean isEquivalentRelation(pOriginalSet pA, pCartersianSet pBinaryRelationR) { pCartersianSet pC=createNullCartersianSet(); pC=copyCartersianSet(pBinaryRelationR); for(resetOriginalSet(pA);!isEndOfOriginalSet(pA); nextOriginalSetPos(pA)) { if(!isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),getCurrentOriginalS etElem(pA)))) return false; } for(resetCartersianSet(pC);!isEndOfCartersianSet(pC);nextCartersianSetPos(pC)) { for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersian SetPos(pBinaryRelationR)) { if(!isInCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCartersia nSetElem(pC)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)) ))) return false; } } if(isEndOfOriginalSet(pC)) return true; } 7.02⑤试设计一算法,对某集合A上的一个二元关系R,求商集A/R。 pCompoundSet QuotientSet(pOriginalSet pSetA, pCartersianSet pBinaryRelationR) { pOriginalSet pM=createNullCompoundSet(); if(isNullCartersianSet(pBinaryRelationR)) return pM; for(resetOriginalSet(pSetA);!isEndOfOriginalSet(pSetA);nextOriginalSetPos(pSetA)) { pOriginalSet pB=createNullOriginalSet(); for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersian SetPos(pBinaryRelationR) ) { if(isEqualOriginalSetElem(getCurrentOriginalSetElem(pSetA),getFirstElemOfOrderedCouple(getCu rrentCartersianSetElem(pBinaryRelationR)))) elemInsertToOriginalSet(pB,getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBina ryRelationR))); } originalSetInsertToCompoundSet(pM,pB); } return pM; } 7.03⑤试设计一算法,求某集合A上的模n同余关系。 pCartersianSet CongruenceRelation(pOriginalSet pSet, int n) { int i,j; pOriginalSet pA=createNullOriginalSet(); pA=copyOriginalSet(pSet); pCartersianSet pC=createNullCartersianSet(); for(resetOriginalSet(pA);!isEndOfOriginalSet(pA); nextOriginalSetPos(pA)) { for(resetOriginalSet(pSet);!isEndOfOriginalSet(pSet); nextOriginalSetPos(pSet)) { i=originalSetElemToInt(getCurrentOriginalSetElem(pA)); j=originalSetElemToInt(getCurrentOriginalSetElem(pSet)); if((i-j)%n==0) OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pSet))); }