当前位置:文档之家› 离散anyview上机【Juxdun】

离散anyview上机【Juxdun】

离散anyview上机【Juxdun】
离散anyview上机【Juxdun】

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)));

}

相关主题
文本预览
相关文档 最新文档