离散数学实验指导书.docx
- 文档编号:5370454
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:20
- 大小:39.80KB
离散数学实验指导书.docx
《离散数学实验指导书.docx》由会员分享,可在线阅读,更多相关《离散数学实验指导书.docx(20页珍藏版)》请在冰豆网上搜索。
离散数学实验指导书
一.前言
《离散数学》是现代数学的一个重要分支,是计算机科学与技术专业的基础理论课,也是该专业的核心课程和主干课程。
“离散数学”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。
该课程一方面为后继课程如数据结构、编绎原理、操作系统、数据库原理、人工智能和形式语言与自动机等提供必要的理论基础;同时,更为重要的是培养学生的抽象思维能力和逻辑推理能力,为今后的学习和工作打好基础。
无论从计算机学科发展的过去、现在和未来看,《离散数学》都是计算机科学与技术专业不可缺少的重要组成部分。
这门课程有着其它课程不可替代的地位和作用,是一门承前启后的课程。
根据《离散数学》课程本身的理论性较强的特性,设置《离散数学实验》实践环节十分重要。
通过实验实践内容的训练,突出逻辑性思维训练的特征,目的是提高学生学习的兴趣及实际动手的能力。
为了帮助学生更好地学习本课程,理解和掌握所学基本概念和方法,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题.本指导书根据本课程要求编写这本指导书。
以期为同学作实验提供帮助!
二.目录
第一部分实验内容
实验1:
真值表判断
实验2:
集合运算及关系运算
实验3:
求最短路径或平面图的判断(二选取一)
第二部分实验指导
实验1:
真值表判断
实验2:
集合运算及关系运算
实验3:
求最短路径或平面图的判断(二选取一)
第三部分实验报告
三.正文
第一部分实验内容
实验1:
真值表
1.实验目的:
通过试验,了解命题的有关概念,真值表技术,连接词的作用与意义
2.实验类型:
验证型实验
3.实验学时:
2学时
4.实验原理及知识点
掌握命题公式及其类型的概念,熟悉逻辑连接词的运算规则,熟悉命题公式真值表的构成,并可用计算机实现
5.实验环境(硬件环境、软件环境)
1、 试验环境visualC++6.0
2、 操作系统window2000、xp
6.实验内容及步骤
1、编写操作界面
使用MFC提供的DLG类,在面板上添加一个输入文本框作为输入公式的实例输入。
添加两个按钮分别表示在程序面板上显示结果和利用输出文本文件显示并保存结果。
2、按照运算规则编写求真值表函数
在对应按钮的触发事件中添加对应的处理函数
3、测试与修改
7.思考与练习
利用真值表技术和公式的演算方法,如何求得公式对应的主析取范式和主合取范式,如何判断两公式是否相等,是否为永真式、永假式、可满足式?
实验2:
集合运算及关系运算
1.实验目的:
通过试验,了解集合运算有关概念及计算技术,撑握合成关系运算条件与运算特点。
2.实验类型:
验证型实验
3.实验学时:
2学时
4.实验原理及知识点:
交运算:
设A,B是两个集合,则A∩B={x|(x
A)并且(x
B)}
⏹ 并运算:
设A,B是两个集合,则A∪B={x|(x
A)或(x
B)}
⏹ 差运算:
设A,B是两个集合,则A-B={x|(x
A)并且(x
B)}
⏹笛卡儿集合:
设A,B是两个集合,称集合A×B={
A)∧(y
B)}为集合A与B的笛卡儿积
⏹求子集或求幂集
设A有n个元素,则ρ(A)有2n个元素。
证明:
A的所有由k个元素组成的子集个数为从n个元素中取k个元素的组合数:
⏹求关系合成运算:
设R是X到Y的关系,S是Y到Z的关系,则RS称为R和S的复合关系,定义为:
RS={
5.实验环境(硬件环境、软件环境)
1、 试验环境visualC++6.0
2、 操作系统window2000、xp
6.实验内容及步骤
1、编写操作界面
使用MFC提供的DLG类,在面板上添加两个输入文本框作为输入集合A、B的实例输入。
添加四个按钮分别表示求交集,求并集,求差集和求笛卡儿积。
2、按照运算规则编写运算函数
在对应按钮的触发事件中添加对应的处理函数。
3、编译程序,连调发现程序中存在的问题并修改
7、思考与练习
1、在掌握集合运算与关系合成的基础上,思考如何使用集合的运算来证明集合间的包含、相等和真包含的关系?
实验3:
求最短路径或平面图的判断
1.实验目的:
通过求最短路径与对平面图的判断,撑握路与图在计算中处理与表示,同时撑握求最短路径的方法,另理解对平面图有关原理。
2.实验类型:
验证型实验
3.实验学时:
2学时
4.实验原理及知识点:
平面图判断的知识点
1、设G是连通平面图,有v个结点,e条边,r个面,则
v-e+r=2(欧拉公式)
2、设G是有v个结点、e条边的连通简单平面图,且v3,则
e3v-6
3、设G是v个结点、e条边的连通平面图,且G的各面的次数大于等于4,则e2v-4
4推论2给出了各面次数大于等于4的连通平面图应满足的必要条件,所以可用来判断某些图不是平面图
例如,应用推论1可知K3,3不是平面图。
因K3,3是连通平面图,每个面由四条边围成,v=6,2v-4=8,而e=9,不满足推论给出的条件。
最短路径的算法:
设每个点都有一对标号(dj,pj),其中dj是从起源点s到点j的最短路径的长度(从顶点到其本身的最短路径是零路(没有弧的路),其长度等于零);pj则是从s到j的最短路径中j点的前一点。
求解从起源点s到点j的最短路径算法的基本过程如下:
1)初始化。
起源点设置为:
①ds=0,ps为空;②所有其他点:
di=∞,pi=?
;③标记起源点s,记k=s,其他所有点设为未标记的。
2)检验从所有已标记的点k到其直接连接的未标记的点j的距离,并设置:
dj=min[dj,dk+lkj]
式中,lkj是从点k到j的直接连接距离。
3)选取下一个点。
从所有未标记的结点中,选取dj中最小的一个i:
di=min[dj,所有未标记的点j]
点i就被选为最短路径中的一点,并设为已标记的。
4)找到点i的前一点。
从已标记的点中找到直接连接到点i的点j*,作为前一点,设置:
i=j*
5)标记点i。
如果所有点已标记,则算法完全推出,否则,记k=i,转到2)再继续。
5.实验环境(硬件环境、软件环境)
1、 试验环境visualC++6.0
2、 操作系统window2000、xp
6..实验内容及步骤
1、编写操作界面
2、按照求最短路径算法编写求短路径函数;
按照判断平面图的算法原理求平面图算法函数。
3、编译程序,连调发现程序中存在的问题并修改
第二部分实验指导
具体写实验方法,实验步骤及补充的实验知识。
实验1真值表判断实验指导
● 实验所属系列:
离散数学课后实验
● 实验对象:
本科
● 相关课程及专业:
离散数学,计算机专业
●
实验目的
公式是由命题变元、逻辑联结词、括号组成的合法的符号串,而命题变元是一个抽象的概念,若不指定命题变元的真值,则公式没有真值可言。
反之,若对所有的命题变元都指定一定的真值,则公式就变成了一个具有确切真值的命题。
将所有的这些命题变元的可能取值一一列出形成一个表格的形式,这个表格称为该公式的真值表。
利用真值表技术和公式的演算方法,能够求得一公式对应的主析取范式和主合取范式,还能够判断两公式是否相等,是否为永真式、永假式、可满足式。
实验内容与要求
设是命题变元P1、P2、P3、…、Pn是出现在公式G中的所有命题变元,指定P1、P2、P3、…、Pn一组真值,则这组真值称为G的一个解释(Explanation),常记为I。
因此,设G是一个公式,I是G的一个解释,显然,G在I下有真值。
由于每一个公式可能存在着不止一种解释,这种解释的多少与公式中的命题变元的个数有关。
对每一个命题变元都有“真”、“假”两种不同的解释,若有两个命题变元,按组合的方法,应有四种不同的解释。
一般来说,若有n个命题变元,则应有2n个不同的解释。
为了能直观地表示一个公式所有可能的解释与公式在此解释下的结果,可定义:
公式G在其所有可能的解释下所取真值的表,称为G的真值表(Truth)。
本实验要求大家利用C++语言,实现任意输入公式的真值表计算。
一般我们将公式中的命题变元放在真值表的左边,将公式的结果放在真值表的右边。
有时为了清楚起见,也可将求公式的中间结果也依次放在真值表中;或者将求公式的中间结果放在公式的相应的每个联结词的下方。
有时也可将具有相同变元个数的公式之真值结果依次放在同一个真值表中。
显然,对任何一公式都有一真值表。
请注意以下约定:
输入公式要由()确定优先级\n\n
同时为了方便键盘输入做如下规定:
(1)用!
代替非操作
(2)用&&代替∧操作
(3)用||代替∨操作
(4)用<>代替<=>操作
(5)保持操作->不变
要求依据上述运算规则,实现任意给定公式真值表的计算,并显示运算结果。
六、实验器材(设备、元器件):
1、 试验环境visualC++6.0
2、 操作系统window2000、xp
七、实验步骤及操作:
1、编写操作界面
使用MFC提供的DLG类,在面板上添加一个输入文本框作为输入公式的实例输入。
添加两个按钮分别表示在程序面板上显示结果和利用输出文本文件显示并保存结果。
2、按照运算规则编写求真值表函数
在对应按钮的触发事件中添加对应的处理函数。
voidCMyDlg:
:
OnOK()
{
//if(Lock!
=1)
//{
strcpy(ShowList,"");
//}
//this->SetDlgItemText(IDC_EDIT1,ShowList);
this->SetDlgItemText(IDC_RSULT,ShowList);
//TODO:
Addextravalidationhere
CStringm_str;
CStringSavem_str;
char*show;
show=newchar[100];
if(ClenOrNot==1)
{
OnButton1();
//AfxMessageBox("出错!
您未按要求操作,建议阅读帮助信息!
");
}
else
{
this->GetDlgItemText(IDC_EDIT1,m_str);
Savem_str=m_str;
strcpy(show,m_str);
SequCharvc(show);
for(intss=0;ss<40;ss++)
{
if(vc.BaseArry[ss+1]==1)
break;
canshu[as]=vc.BaseArry[ss+1];
as++;
}
intM=GivenCharFuction();
////////////////////////////////////////////////////////////////////////////
intNmberLine=mi(M);
inty=0;
for(intNmberLine_X=0;NmberLine_X {///// NmberLine=NmberLine_X;///// for(inti=10;i>10-M;i--)///// {//// Arry[i]=NmberLine%2;///// NmberLine=NmberLine/2;////// }//// y=f(vc.BaseArry[0]); if(y>1) { AfxMessageBox("错误! 您未按要求操作,请先阅读帮助信息! "); OnButton1(); break; } } if(y<=1) { for(intShowCharWho=M-1;ShowCharWho>=0;ShowCharWho--) { m_str=CharWho[ShowCharWho]; strcat(ShowList,m_str); strcat(ShowList,""); } strcat(ShowList,Savem_str); strcat(ShowList,"\n"); for(NmberLine_X=0;NmberLine_X { NmberLine=NmberLine_X; for(inti=10;i>10-M;i--) { Arry[i]=NmberLine%2; NmberLine=NmberLine/2; } y=f(vc.BaseArry[0]); for(intyx=11-M;yx<=10;yx++) { if(Arry[yx]==0) strcat(ShowList,"0"); else strcat(ShowList,"1"); strcat(ShowList,""); } if(y==0) strcat(ShowList,"0"); else strcat(ShowList,"1"); strcat(ShowList,"\n"); } this->SetDlgItemText(IDC_RSULT,ShowList); //strcpy(ShowList,""); } } /////////////////////////////////////////////////////////////////////////// //CDialog: : OnOK(); 3、编译程序,连调发现程序中存在的问题并修改 八、实验数据及结果分析: 例如: 实验运行结果如下: p∧q∨R<=>! S真值,应输入: ((p&&Q)||R)<>(! S) 运行结果如下: QRSp((p&&Q)||R)<>(! S) 00000 00010 00101 00111 01001 01011 01100 01110 10000 10011 10101 10110 11001 11011 11100 11110 实验开设方式 本实验开设方式为个人实验; 实验思考 1、 利用真值表技术和公式的演算方法,如何求得公式对应的主析取范式和主合取范式,如何判断两公式是否相等,是否为永真式、永假式、可满足式? 实验二集合运算及关系运算 ● 实验所属系列: 离散数学课堂实验 ● 实验对象: 本科 ● 相关课程及专业: 离散数学,计算机专业 ● 实验类型: 课后实验 ● 实验时数(学分): 2学时 1实验目的 集合是一切数学的基础,每一门数学的讨论都离不开集合,为此,我们必须掌握集合的基本定义及运算规律,掌握集合的运算规则对与学习离散数学将有着极大的帮助。 本实验通过编写一个C++程序,让计算机来完成两个集合的交、并、差、笛卡儿积及子集及简单关系运算。 目的是让同学们更加深刻的理解集合的运算规则,特别是集合的笛卡儿积运算是我们接触的一个新的集合运算规则。 2实验内容与要求 集合的运算及关系的运算: ⏹ 交运算: 设A,B是两个集合,则A∩B={x|(x A)并且(x B)} ⏹ 并运算: 设A,B是两个集合,则A∪B={x|(x A)或(x B)} ⏹ 差运算: 设A,B是两个集合,则A-B={x|(x A)并且(x B)} ⏹笛卡儿集合: 设A,B是两个集合,称集合A×B={ A)∧(y B)}为集合A与B的笛卡儿积 ⏹求子集或求幂集 设A有n个元素,则ρ(A)有2n个元素。 证明: A的所有由k个元素组成的子集个数为从n个元素中取k个元素的组合数: ⏹求关系合成运算: 设R是X到Y的关系,S是Y到Z的关系,则RS称为R和S的复合关系,定义为: RS={ 要求依据上述运算规则,实现任意给定两个集合的交、并、差、笛卡儿积运算,求幂集求关系的合成运算并显示运算结果。 3、实验步骤及操作: 1、编写操作界面 使用MFC提供的DLG类,在面板上添加两个输入文本框作为输入集合A、B的实例输入。 添加四个按钮分别表示求交集,求并集,求差集和求笛卡儿积。 2、按照运算规则编写运算函数 在对应按钮的触发事件中添加对应的处理函数 例如求交集: voidCMYcollectionDlg: : Onjiaoji() { //TODO: Addyourcontrolnotificationhandlercodehere CSplitStrSplit1; CSplitStrSplit2; CStringstr1="{"; Split1.SetSplitFlag(","); Split1.SetSequenceAsOne(TRUE); Split2.SetSplitFlag(","); Split2.SetSequenceAsOne(TRUE); CStringm_string1; CStringm_string2; charm_char1[80]; charm_char2[80]; inti; intj; intm=0; intn=0; intk=0; intcounter=1; this->GetDlgItemText(IDC_EDIT1,m_string1); this->GetDlgItemText(IDC_EDIT2,m_string2); strcpy(m_char1,m_string1); strcpy(m_char2,m_string2); Split1.SetData(m_char1); Split2.SetData(m_char2); CStringArrayarray1; CStringArrayarray2; Split1.GetSplitStrArray(array1); Split2.GetSplitStrArray(array2); for(i=0;i<=80;i++) { if(m_char1[i]==',') m++; } for(j=0;j<=80;j++) { if(m_char2[j]==',') n++; } for(i=0;i<=m;i++) { for(j=0;j<=n;j++) { if(! strcmp(array1[i],array2[j])) { str1=str1+array1[i]; str1=str1+","; } } } str1.TrimRight(","); str1=str1+"}"; char*p=newchar[1000]; strcpy(p,"A∩B="); strcat(p,str1); this->SetDlgItemText(IDC_STATICoutput,p); delete[]p; } 3、编译程序,连调发现程序中存在的问题并修改 4、实验数据及结果分析: 要有实验结果与结果分析 例如: 运行结果如下: 集合A={1,2,3,4},集合B={3,4,5,6} 求并: {1,2,3,4}∪{3,4,5,6}={1,2,3,4,5,6} 求交: {1,2,3,4}∩{3,4,5,6}={3,4} 求补: {1,2,3,4}-{3,4,5,6}={1,2} ● 集合A={1,2},集合B={a,b} 求笛卡儿积: A×B={<1,a>,<1,b>,<2,a>,<2,b 5、实验开设方式 本实验开设方式为个人实验;上机2学时; 6、实验思考 1、 在掌握集合运算的基础上,思考如何使用集合的运算来证明集合间的包含、相等和真包含的关系? 实验三求最短路径或平面图的判断 l 实验所属系列: 离散数学课后实验 l 实验对象: 本科 l 相关课程及专业: 离散数学,计算机专业 l 实验类型: 课后实验 l 实验时数(学分): 4学时 实验目的 学习图在计算机中的矩阵表示,并能利用课堂所学知识进行最短路径的计算。 实验内容与要求 题目: 迷宫最短路径 ⒈问题描述 从一个迷宫的入口到出口找出一条最短路经。 用一个二维数组MAZE(1: m,1: n)模拟迷宫,数组元素为0表示该位置可以通过,数组元素为1表示该位置不可以通行。 MAZE(1,1)和MAZE(m,n)分别为迷宫的入口和出口。 ⒉基本要求 (1)输入数据 a.输入迷宫的大小m行和n列,两者为整数 b.由随机数产生0或1,建立迷宫。 (2)输出数据 首先输出模拟迷宫的二维数组,若存在最短路经,则由出口回朔到入口打印这一条路径,如下所示: (m,n),……,(I,j),……,(1,1) 如无通道,则打印: THEREISNOPATH. ⒊实现提示 (1)数据结构 a)为了在程序中判断方便,把迷宫扩展成为MAZE(0: m+1,0: n+1),扩展部分的元素设置为1,相当于在迷宫周围布上一圈不准通过的墙,这样,在迷宫的任一位置(I,j)上都有八个可以移动的方向。 b)用二维数组MOVE(1: 8,1: 2)存放八个方向上的位置量,如 图所示: (I+MOVE[1,1],j+MOVE[1,2]) (I+MOVE[8,1],j+MOVE[8,2])(I+MOVE[1,1],j+MOVE[1,2]) (I+MOVE[7,1],j+MOVE[7,2])(I+MOVE[3,1],j+MOVE[3,2]) (I+MOVE[6,1],j+MOVE[6,2])(I+MOVE[4,1],j+MOVE[4,2])(I+MOVE[5,1],j+MOVE[5,2]) MOVE的设置情况 Ij 1 2 1 -1 0 2 -1 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散数学 实验 指导书