资源描述
实 验 报 告
(2014 / 2015 学年 第 一 学期)
课程名称
离散数学
实验名称
集合上二元关系性质判定的实现
实验时间
2014
年
10
月
22
日
指导单位
计算机科学与技术系
指导教师
罗卫兰
学生姓名
陶飞
班级学号
B13040932
学院(系)
计算机
专 业
软件工程
实 验 报 告
实验名称
集合上二元关系性质判定
指导教师
罗卫兰
实验类型
上机实验
实验学时
4
实验时间
一、 实验目的和要求
能正确判定任意二元关系的自反性、对称性、传递性、反自反性和反对称性。
二、实验环境(实验设备)
VC6.0
三、实验原理及内容
内容:首先输入二元关系中的元素个数,在输入相应二元关系形成的矩阵(只包含0或1),输出所有的二元关系性质。
原理:根据矩阵的图形及某种性质矩阵图的特点判断出是否具有该种性质。
代码:
#include<iostream>
#include<fstream>
using namespace std;
int A[100][100];
int n;
void Input()
{
cout<<"请输入元素个数:";
cin>>n;
cout<<"请输入相应的"<<n<<"阶矩阵(0,1)"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>A[i][j];
}
}
}
void Analagmatic()//判断自反性
{
for(int x=0;x<n&&A[x][x]==1;x++)
{
}
if (x==n)
cout<<"该二元关系具有自反性"<<endl;
else
cout<<"该二元关系不具有自反性"<<endl;
}
void Irreflexive()//判断反自反性
{
for(int x=0;x<n&&A[x][x]==0;x++)
{
}
if(x==n)
cout<<"该二元关系具有反自反性"<<endl;
else
cout<<"该二元关系不具有反自反性"<<endl;
}
void Symmetry()//判断对称性
{
for(int x=0;x<n;x++)
{
for(int y=0;y<n&&A[x][y]==A[y][x];y++);
{
}
if(y!=n)
{ cout<<"该二元关系不具有对称性"<<endl;return;
}
}
cout<<"该二元关系具有对称性"<<endl;
}
void Antisymmetry()//判断反对称性
{
for(int x=0;x<n;x++)
{
for(int y=0;(y<n&&A[x][y]*A[y][x]!=1)||(y<n&&x==y);y++);
{
}
if(y!=n)
{ cout<<"该二元关系不具有反对称性"<<endl;return;
}
}
cout<<"该二元关系具有反对称性"<<endl;
}
void Transitivity()//判断传递性
{
int s=1;
for(int x=0;x<n;x++)
{ int p=0;
for(int y=0;x<y;y++)
{
if(A[x][p]*A[p][y]==1&&A[x][y]!=1) s=0;
}
p++;
}
if(s==0)
cout<<"该二元关系不具有传递性"<<endl;
else
cout<<"该二元关系具有传递性"<<endl;
}
int main()
{
Input();
Analagmatic();
Irreflexive();
Symmetry();
Antisymmetry();
Transitivity();
return 0;
}
四、实验小结(包括问题和解决方法、心得体会、意见与建议等)
二元关系所有的关系性质都可以通过矩阵图形来判断,对于传递性的判断较复杂,开始想了很久未果,最终还是要根据定义去判断,仔细去找仍然有规律可寻。
五、指导教师评语
成 绩
批阅人
日 期
6
展开阅读全文