偏序关系中盖住关系的求取及格论中有补格的判定

更新时间:2023-10-03 08:41:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《离散数学》实验报告

(2015/ 2016 学年 第 一 学期)

题 目:偏序关系中盖住关系的求取及格论中有补格的判定

专 业 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机学院计算机科学与技术系 日 期 2015年12月15日

评分项 遵守机房规章制度 优秀 良好 中等 差 评上机时的表现 学习态度 算法思想准备情况 程序设计能力 解决问题能力 课题功能实现情况 算法设计合理性 算法效能评价 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 分细则简短评语评分等级备注 教师签名: 年 月 日 评分等级有五种:优秀、良好、中等、及格、不及格

偏序关系中盖住关系的求取及格论中有补格的判定

一、 实验内容和要求

内容:

编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格。

要求:

对任意给定正整数,利用整除关系求所有由其因子构成的集合所构成的格,判断其是否为有补格。

二、实验目的

编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格。

三、实验任务

1、求出输入数的所有因子。 2、求出整除关系“≤”的偏序集。 3、求出盖住关系 COV A。 4、判断是否有补格。 5、判断是否为布尔格。

四、实验内容

#include using namespace std;

bool Find(int a, int b,int n) //判断两个元素是否互补 { int temp; if (a < b) { temp = a; a = b; b = temp; } int dividend=a, divider=b, remainder=0,min,max; remainder = dividend%divider; while (remainder) { dividend = divider; divider = remainder;

}

remainder = dividend%divider;

min = a*b / divider; //求得最小公倍数 max = divider; //求得最大公约数 if (min == n&&max == 1) return true; else return false; }

void main() { int n,i,k,t,count=0,j=0;

cout << \输入正整数:\ //输入任意整数 cin >> n;

int a[100]; //存储带输入整数的所有因子 bool b[100]; //存储对应因子是否有补元 for (i = 0; i < 100; i++)

b[i] = false; //初始化 for (i = 1; i <=n;i++) if (n%i == 0) { a[j++] = i; }

count = j; //将所有因子个数赋给count cout <

for (i = 0; i < count; i++) //输出所有因子 { if(i

for(i=0;i

} }

cout<<\ cout<<\ }

for (i = 0; i < count; i++) //判断两个元素是否互补 for (j = i; j < count; j++) { if (Find(a[i], a[j], n)) { b[i] = true; b[j] = true;

}

}

break; //如果a[i]找到第一个与之互补的元素就跳出循环 for(i=0;i1) { } } } }

cout<<\

t=0; //标记是否符合盖住关系 for(k=i+1;k

if((a[k]%a[i]==0)&&(a[j]%a[k]==0)) {t++;} }

if(t==0)

{cout<<\

int flag = 1; //标记所有由其因子构成的集合所构成的格是否是有补格 for (i = 0; i < count; i++) if (!b[i]) flag = 0;

if (flag) { cout << \是有补格\ cout << \是布尔格\ } else { cout << \不是有补格\ cout << \不是布尔格\}

}

五、测试数据及其结果分析

输入数字为36时:

输入数字为12时:

输入数字为15时:

六、调试过程中的问题

判断盖住关系时出现如图错误:

调试后发现时一句代码的执行顺序错误(加黑下划线为错误处):

for(i=0;i

for(j=i;j

if(a[j]%a[i]==0) {

if((j-i)==1) {

cout<<\ }

}

if((j-i)>1) {

t=0;

for(k=i+1;k

if((a[k]%a[i]==0)&&(a[j]%a[k]==0)) {t++;} if(t==0)

{cout<<\ } } } } }

cout<<\

修改之后:

for(i=0;i

for(j=i;j

if(a[j]%a[i]==0) {

if((j-i)==1) {

cout<<\ }

if((j-i)>1) {

t=0;

for(k=i+1;k

if((a[k]%a[i]==0)&&(a[j]%a[k]==0)) {t++;} }

if(t==0)

{cout<<\ } } } }

cout<<\ }

正确执行之后为:

七、程序设计总结

1.掌握了与离散数学理论相关的编程实现思想和方法,重点掌握了偏序关系中盖住关系的求取及格论中有补格的判定。

2.通过求任意两个元素的最大公约数和最小公倍数与1和输入的正整数比较,简化是否是有补格的判断。

3.因为整除关系求所有由其因子构成的集合所构成的格满足分配性,所以如果是分配格那么它就是布尔格。

4.明确了有补格和布尔格的定义,以及两者之间的关系。

本文来源:https://www.bwwdw.com/article/98od.html

Top