离散数学实验一——关系

一、预习内容:

1、自反性:从给定的关系矩阵来断判关系R是否为自反是很容易的。若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。本算法可以作为判等价关系算法的子程序给出。
2、对称性:从给定的关系矩阵来判断关系R是否为对称是很容易的。若M(R的关系矩阵)为对称矩阵,则R是对称关系;若M为反对称矩阵,则R是反对称关系。因为R为对称的是等价关系的必要条件,所以,本算法可以作为判等价关系算法的子程序给出。
3、传递性:从给定的关系矩阵来断判关系R是否为传递是很容易的。若M(R的关系矩阵)为传递矩阵,则R是传递关系;若M为非传递矩阵,则R是非传递关系;本算法可以作为判等价关系算法的子程序给出。

二、实验目的与要求(及主要实验仪器、设备):

1.通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;
2. 通过实验提高学生编写实验报告、总结实验结果的能力;
3. 使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
实验环境:软件:vc++6.0 ,硬件:电脑

三、实验原理(方法与与原理分析):

1 自反性定义
(1)若, 则称R在A上是自反的。
(2)若,则称R在A上是反自反的。
2 对称性定义
设R为A上的二元关系,
(1)若,则称R为A上的对称关系
(2) 若,则称R为A上的反对称关系
3 传递性定义
设R为A上的二元关系,若 ,则称R为A上的传递关系

四、实验步骤(程序代码与实验过程):

#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define M 100
char get_element(char p)//输入结点序列函数
{
printf(“输入集合的元素(不能有空格):”);
gets§;
fflush(stdin);
return p;
}
int get_position(char ch,char point){
int i;
for(i=0;
(point+i);i++)
if(
(point+i)ch)
return i;
return 0;
}
void get_relation(int (a)[M],char p)
{
int k1,k2;
char ch1,ch2;
printf("输入关系的各个序偶(以<
,
>时结束):\n");
while(1)
{
printf("<");
ch1=getche();
printf(",");
ch2=getche();
printf(">\n");
if(ch1’
’)break;
k1=get_position(ch1,p);
k2=get_position(ch2,p);
a[k1][k2]=1;
}
}
void output_relat_array(int (*a)[M],int arry_w)//输出关系矩阵
{
int i,j;
for(i=0;i<arry_w;i++)
{
for(j=0;j<arry_w;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
void output_relate(int (*a)[M],int arry_w,char *p)
//关系矩阵中如果有元素为1,则根据该序号去结点序列中查找其相应结点
{
int i,j;
int count=0;

printf("{");
for(i=0;i<arry_w;i++)for(j=0;j<arry_w;j++)if(a[i][j]==1){ printf("<%c,%c>,",*(p+i),*(p+j));count++;}
printf("\b}");
printf("\n");

}

int ZF(int (*a)[M],int n)
{
int flag1 = 1;
for(int i = 0; i <n; i++)
//只要有一个对角元素为0就不具有自反性
{
if(!a[i][i])
{
flag1 = 0;
break;
}
}
return flag1;
}
int FZF(int (*a)[M],int n) //反自反
{
int flag2 = 1;
for(int i = 0; i < n; i++)
{
//只要有一个对角元素为1就不具有反自反性
if(a[i][i])
{
flag2 = 0;
break;
}
}
return flag2;
}

int DC(int (*a)[M],int n) //对称
{
int flag3 = 1;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{ //矩阵中对称元素都相等则具有对称性
if(a[i][j] != a[j][i])
flag3 = 0;
break;
}
return flag3;
}
int FDC(int (*a)[M],int n) //反对称
{
int flag4 = 1;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
//矩阵中对称元素中有相等的1则不具有反对称性
if(a[i][j] && a[i][j] == a[j][i] && i != j)
{
flag4 = 0;
break;
}
return flag4;
}
int CD(int (*a)[M],int n) //传递
{
int flag5 = 1;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
//判断是否满足传递关系
if(a[i][j] && a[j][k] && !a[i][k])
{
flag5 = 0;
break;
}
return flag5;
}
int main()
{
int a[M][M]={0};
char point[M];
int stlen;
char *p;
p=get_element(point);//输入结点p取得其起始位置
stlen=strlen(point);
get_relation(a,p);//根据输入的关系的序偶构建关系矩阵a
output_relate(a,stlen,p);
printf("\n关系矩阵为:\n");
output_relat_array(a,stlen);
cout<<“该关系具有的性质:”<<endl;
if(ZF(a,stlen))
{
cout<<“自反性”<<endl;
}

if(FZF(a,stlen)){cout<<"反自反性"<<endl;}
if(DC(a,stlen))
{cout<<"对称性"<<endl;
}
if(FDC(a,stlen))
{cout<<"反对称性"<<endl;
}
if(CD(a,stlen))
{cout<<"传递性"<<endl;
}
return 0;

}

五、实验结果(数据分析与结论):

六、问题讨论:

问:自反,反自反,对称,反对称,传递都有什么特点?
答:1.自反,就是如果集合A中的每个元素x,都有xRx,也就是说,这些关系里,a = b的个数应该是A.size()个。
2.反自反,就是集合中的每个元素都没有xRx,也就是说,再没有一个是a,b相同的。
3.对称,就是如果有关系<a, b>,一定有关系<b, a>(a ≠ b)
4.反对称,就是如果有关系<a, b>,就一定没有关系<b,a>(a ≠ b)
5.传递,就是如果有关系<a, b>, <b, c>,那么一定有<a, c>

离散数学实验一——关系相关推荐

  1. 离散数学实验题目-关系

    离散数学实验报告 计算机科学与技术系 目录 第一章 实验概述 3 1.1 实验目的 3 1.2 实验内容 3 1.3 实验环境 3 第二章 实验原理和实现过程 4 2.1 实验原理 4 2.2 实验过 ...

  2. 离散实验偏序关系满足实验报告C语言,离散数学实验三:偏序关系中盖住关系的求取及格论中有补格的判定...

    离散数学实验报告 我希望我能骄傲的走下去!大家每天都要开心向上哦! 题目:输入n,求1~n 中的满足整除关系的因子.再根据盖住关系的原理求盖住关系.最后判断是否为有补格.任意输入一个整数作为n 值. ...

  3. 离散数学实验三则(关系元算,集合运算与操作,最短路)

    前言 前段时间才做了离散实验的实验报告,为防止在本地遗失,所以上传到CSDN上一份,欢迎大家一起学习 实验1 关系元算 实验报告内容 一.实验目的 熟悉掌握命题逻辑中的联结词.真值表.主范式等,进一步 ...

  4. 离散数学实验题目-图

    离散数学实验报告 计算机科学与技术系 目录 第一章 实验概述 3 1.1 实验目的 3 1.2 实验内容 3 1.3 实验环境 3 第二章 实验原理和实现过程 4 2.1 实验原理 4 2.2 实验过 ...

  5. 离散数学实验3 平面图判定及对偶图的求解 C++

    离散数学实验报告3 文章目录 离散数学实验报告3 一.实验题目 二.实验目的 三.实验要求 需求分析: 输入形式与输入范围 概要设计: 使用的数据结构与算法: 程序流程: 详细代码 调试分析 调试过程 ...

  6. 离散数学实验报告 实验3 欧拉路的确定

    离散数学实验报告 实验3 欧拉路的确定 一.实验目的 理解欧拉图的概念,掌握欧拉通/回路的判定方法. 二.实验内容 输入一个无向简单图的邻接矩阵,判定该图是否含有欧拉通/回路.若有,请给出一条欧拉通/ ...

  7. 离散实验偏序关系满足实验报告C语言,离散数学实验三

    <离散数学实验三>由会员分享,可在线阅读,更多相关<离散数学实验三(6页珍藏版)>请在人人文库网上搜索. 1.实 验 报 告(2014 / 2015 学年 第 一 学期)课程名 ...

  8. 离散数学范式c语言实验报告,离散数学实验报告-利用真值表法求主析取范式及主合取范式的实现...

    1.实 验 报 告( / 学年 第 一 学期)课程名称离散数学实验名称利用真值表法求主析取范式及主合取范式的实现实验时间年月日指导单位指导教师学生姓名班级学号学院(系)专 业 实 验 报 告实验名称利 ...

  9. 离散数学实验题目-集合

    离散数学实验报告 计算机科学与技术系 目录 第一章 实验概述 3 1.1 实验目的 3 1.2 实验内容 3 1.3 实验环境 3 第二章 实验原理和实现过程 4 2.1 实验原理 4 2.2 实验过 ...

最新文章

  1. 使用Python和OpenCV实现超快速,简单的伽玛校正功能
  2. jira4.4.5下载与汉化
  3. 嵌入式C语言查表法的项目应用
  4. idea传入HttpServletRequest时显示cannot resolve symbol的问题
  5. startActivityForResult用法详解
  6. JS (intermediate value).Format is not a function问题解决
  7. android 背景切换动画效果代码,在Android应用中以模糊效果设置背景图片
  8. 推荐专栏丨《DBA的奋斗路》
  9. promise 为什么出现
  10. Java基础篇:如何使用continue语句
  11. PageStateLayout
  12. centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解...
  13. 层次聚类 簇数_聚类(一):K-means、层次、DBSCAN、均值漂移、K-Means 与 KNN
  14. 调用mysql1045解决_MySQL 1045错误的解决方法
  15. 程序员应该写文档吗?
  16. Linux应用程序目录规范——XDG
  17. lazyLoad-懒加载
  18. YOLOv2-yolo9000-batter,faster,stronger 论文精读解析
  19. 超级实用案例,Python 提取 PDF 指定内容生成新PDF
  20. Mui picker 的 Bug

热门文章

  1. nivicat破解包安装以及问题解决。MySQL安装版本Navicat连接报错2509解决方案
  2. MVC验证04-自定义验证规则、日期范围验证
  3. named-checkzone命令--Linux命令应用大词典729个命令解读
  4. 预计每天全世界上传的短视频超过4亿条
  5. linux 设置u盘为只读模式,U盘如何设置为只读模式
  6. php 环信easyui_php集成环信IM即时通讯系统(大致流程方法)
  7. FPGA实现IIC协议(一)----初识IIC总线
  8. irc 开源软件_前4个开源IRC客户端
  9. 08.vue.js实战笔记(计算属性、v-bind及class和style的绑定、内置指令、方法与事件)
  10. 深度学习入门之如何制作npz、npy文件