大连民族大学软件工程离散数学课程设计.docx

上传人:b****1 文档编号:346268 上传时间:2022-10-09 格式:DOCX 页数:21 大小:725.98KB
下载 相关 举报
大连民族大学软件工程离散数学课程设计.docx_第1页
第1页 / 共21页
大连民族大学软件工程离散数学课程设计.docx_第2页
第2页 / 共21页
大连民族大学软件工程离散数学课程设计.docx_第3页
第3页 / 共21页
大连民族大学软件工程离散数学课程设计.docx_第4页
第4页 / 共21页
大连民族大学软件工程离散数学课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

大连民族大学软件工程离散数学课程设计.docx

《大连民族大学软件工程离散数学课程设计.docx》由会员分享,可在线阅读,更多相关《大连民族大学软件工程离散数学课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

大连民族大学软件工程离散数学课程设计.docx

大连民族大学软件工程离散数学课程设计

大连民族学院

计算机科学与工程学院实验报告

 

实验题目:

1.二元关系

2.代数系统

课程名称:

离散数学

实验类型:

□演示性□验证性□操作性□设计性综合性

 

专业:

软件工程班级:

132班学生姓名:

黄正勤学号:

2013082204

实验日期:

2014年11月22日—12月15日

实验地点:

金石滩校区机房

实验学时:

16学时实验成绩:

指导教师:

焉德军姜楠

二元关系

(一)

 

1.实验题目

对给定表示有穷集上关系的矩阵,确定这个关系是否是自反的或反自反的;对称的或反对称的;是否传递的。

2.实验原理

从给定的关系矩阵来断判关系R是否为自反是很容易的。

若flay(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若flay(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若flay(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。

而对于对称性,只需要判断矩阵所有的flay[i][j]与其对应的flay[j][i]是否都相等;若全部相等,则为对称;否则反之。

对于传递性,则需要利用线性代数的方法求出R的关系矩阵的平方矩阵,只需验证所有的flag[i][j](R的关系矩阵的平方矩阵)等于1的地方,在flay[i][j](R的关系矩阵)等于1,则具有传递性;否则反之。

 

3.实验的步骤及实验记录

011

(1)先输入一个整数,表示矩阵的阶数。

接着输入矩阵,这里以输入矩阵001

000

例,在根据矩阵左上到右下的flay[i][i]的值是否为1判断矩阵是否自反或反自反,判断矩阵是否自反或反自反的代码如下:

for(i=0;i

{

for(j=0;j

{

if(i==j)

{

if(flay[i][j]==1)

count_1++;

elseif(flay[i][j]==0)

count_2++;

}

}

if(count_1==a)

cout<<"自反"<

elseif(count_2==a)

cout<<"反自反"<

输入矩阵后输出的实验结果如下:

(2)判断对称的或反对称只需要flay[i][j]是否与flay[j][i]相等;若全部相等,则为可对称;否则反之。

代码如下:

for(i=0;i

{

for(j=0;j

{

if(flay[i][j]==flay[j][i])

count_1++;

else

{

count_2=1;

break;

}

}

if(count_1==a*a)

cout<<"对称性"<

elseif(count_2==1)

{

cout<<"反对称"<

break;

}

}

运行结果如下:

(3)而对于判别是否具有传递性,则相对前面两个性质来说比较复杂,关键是求出原矩阵flay的平方矩阵flag,这里通过线性代数的方法求出flay矩阵的平方矩阵flag,求平方矩阵的方法是:

第一个矩阵flay[i][j]等于flay[i][j]乘以第二个矩阵的第j列之总和;j++完后再i++,以后便可求出平方矩阵。

然后在比较在平方矩阵flag[i][j]为1的位置,在原矩阵flay[i][j]中是否都为1;若flag矩阵中所有的为1的地方,在flay中都为1,则具有传递性;否则反之;最后输出该平方矩阵。

代码如下所示:

intk;

for(i=0;i

{

for(j=0;j

{

flag[i][j]=0;

for(k=0;k

flag[i][j]=flag[i][j]+flay[i][k]*flay[k][j];

}

if(flag[i][j]==1)

count_2++;

}

for(i=0;i

{

for(j=0;j

{

if(flag[i][j]==1&&flay[i][j]==1)

count_3++;

elseif(flag[i][j]==1&&flay[i][j]==0)

{

count_1=1;

break;

}

}

if(count_1==1)

break;

}

if(count_2==count_3&&count_2!

=0&&count_3!

=0)

cout<<"传递性"<

else

cout<<"非传递性"<

cout<<"该矩阵的平方为:

"<

for(i=0;i

{

for(k=0;k

cout<

cout<<"\b"<

}

运行结果如下:

以上便是对自反或反自反,对称或反对称,是否传递等性质的判断过程,代码及运行代码的结果。

4.实验总结

此题为验证性题目,验证性题目主要是通过其原理以及相关的概念来证明。

通过此题对验证性题目的分析有很大的提高。

 

(二)

1.实验题目

判断一个二元关系是否为等价关系,如果是,求其商集。

2.实验原理

要判断一个二元关系是否是等价关系,则要判断这个关系是否具有自反性,对称性和传递性;假如这三个条件都同时符合,则该二元关系具有等价关系。

这里以为A={1,2,3,4,5,6,7},R={<1,4>,<1,7>,<4,1>,<4,7>,<7,1>,<7,4>,<2,5>,<5,2>,<3,6>,<6,3>}UIa为例。

自反性的判别与上题一样,都是判别flay[i][i]是否都等于1;若flay[i][i]全部等于1,则具有自反性;否则反之。

对于对称性与上题也一样,就是判断所有的flay[i][j]与flay[j][i]是否全部相等;若全部相等,则具有对称性;否则反之。

传递性的判断,则需要利用线性代数的方法求出R的关系矩阵的平方矩阵,只需验证所有的flag[i][j](R的关系矩阵的平方矩阵)等于1的地方,在flay[i][j](R的关系矩阵)等于1,则具有传递性;否则反之。

3.实验步骤及实验记录

(1)先输入一个整数,表示矩阵的阶数;接着输出初始空矩阵。

然后一组一组的输入R在A上的关系,输入00时结束;接着输出关系矩阵,判别与输入的关系是否一致。

代码如下所示:

voidInput()

{

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

flay[i][j]=0;

}

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

cout<

cout<

}

R();

}

voidR()

{

cout<<"请输入两个位置有关系的数值,输入“00”结束R的输入:

"<

cin>>a>>b;

if(a!

=0&&b!

=0)

{

flay[a][b]=1;

R();

}

}

voidOutput()

{

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

cout<

cout<

}

}

代码运行结果如下所示:

 

(2)在根据矩阵左上到右下flay[i][i]的值是否为1判断矩阵是否是自反或反自反,判断矩阵是否自反或反自反的代码如下:

intcount=0;

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

{

if(i==j)

{

if(flay[i][j]==1)

count_1++;

elseif(flay[i][j]==0)

count_2++;

}

}

}

if(count_1==n)

{

cout<<"自反性"<

syb_3=1;

}

else

cout<<"反自反性"<

代码运行结果如下所示:

(3)判断对称的或反对称只需要flay[i][j]是否与flay[j][i]相等;若全部相等,则为可对称;否则反之。

代码如下:

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

{

if(flay[i][j]==flay[j][i])

count_1++;

else

{

count_2=1;

break;

}

}

if(count_2==1)

{

break;

}

}

if(count_2==1)

{

cout<<"反称性"<

}

else

{

cout<<"对称性"<

syb_1=1;

}

代码运行结果如下所示:

(4)而对于判别是否具有传递性,则相对前面两个性质来说比较复杂,关键是求出原矩阵flay的平方矩阵flag,这里通过线性代数的方法求出flay矩阵的平方矩阵flag,求平方矩阵的方法是:

第一个矩阵flay[i][j]等于flay[i][j]乘以第二个矩阵的第j列之总和;j++完后再i++,以后便可求出平方矩阵。

然后在比较在平方矩阵flag[i][j]为1的位置,在原矩阵flay[i][j]中是否都为1;若flag矩阵中所有的为1的地方,在flay中都为1,则具有传递性;否则反之;最后输出该平方矩阵。

代码如下所示:

intk;

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

{

flag[i][j]=0;

for(k=1;k<=n;k++)

flag[i][j]=flag[i][j]+flay[i][k]*flay[k][j];

if(flag[i][j]!

=0)

coun

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1