离散数学实验安排及题目
离散数学上机实验指导

离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至xfs@。
实验11实验内容(1)求任意一个命题公式的真值表。
(2)利用真值表求任意一个命题公式的主范式。
(3)利用真值表进行逻辑推理。
注:(2)和(3)可在(1)的基础上完成。
2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。
例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。
本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。
目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。
3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。
真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。
n个命题变元的每组赋值的生成算法可基于这种思想。
含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。
为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、&、|、-、+来表示。
算符之间的优先关系如表1-32所示:为实现算符优先算法,另一个称作OPND,用以寄存操作数或运算结果。
算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。
实验21实验内容(1)求任意两个集合的交集、并集、差集。
(2)求任意一个集合的幂集。
离散数学实验三

实验报告(2014 / 2015 学年第一学期)课程名称离散数学实验名称偏序关系中盖住关系的求取及格论中有补格的判定实验时间2014 年11 月28 日指导单位南京邮电大学指导教师罗卫兰学生姓名沈一州班级学号B12040920学院(系) 计算机软件学院专业NIIT(软嵌)实验报告实验名称偏序关系中盖住关系的求取及格论中有补格的判定指导教师罗卫兰实验类型 Windows+VC 实验学时 4 实验时间 11.28 一、实验目的和要求内容:编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格。
cout<<"因为"<<a[i]<<"∨("<<a[j]<<"∧"<<a[k]<<")!=("<<a[i]<<"∨"<<a[j]<<")∧("<<a[i]<<"∨"<<a[k]<<"),所以这不是一个布尔格。
\n";//验证a∨(b∧c)==(a∨b) ∧ (a∨c)break;}}if(flag)break;}if(flag)break;}if(!flag)cout<<"因为所有成员都满足分配性,所以这是一个分配格。
\n";四、运行结果:首先是输入界面:然后输入24:然后询问是否再次输入:这次输入99:特殊情况,若输入0或者负数:此时会一直提示输入错误直到输入成功。
若输入1:若输入非Y,则退出程序:实验报告五、实验小结这次题目要求是根据整除关系建立偏序关系,集合由一个正整数的因子所构成,所以该偏序集中的最大下界为1,最小上界为该正整数,所以该偏序集是一个格。
离散数学实验报告

大连民族学院计算机科学与工程学院实验报告实验题目:判断关系的性质课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:班级:学生姓名:学号:实验日期:年月日实验地点:实验学时:实验成绩:指导教师签字:年月日实验报告正文部分(具体要求详见实验报告格式要求)实验报告格式[实验题目] 判断关系的性质[实验目的] 使学生掌握利用计算机语言实现判断关系性质的基本方法。
[实验环境] Microsoft Visual C++6.0[实验原理]实验内容与要求:对给定表示有穷集上关系的矩阵,确定这个关系是否是自反的或反自反的;对称的或反对称的;是否传递的。
通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。
图示:程序源代码:#include<stdio.h>#define N 4main(){int i,j,k;int f,e,z;int M[N][N];printf("判断R是否为自反关系、对称关系、是否可传递?\n"); printf("请输入一个4*4的矩阵。
\n");for(i=0;i<N;i++) /*输入一个4*4的矩阵*/for(j=0;j<N;j++)scanf("%d",&M[i][j]);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",M[i][j]);printf("\n");}for(i=0;i<N;i++){if(M[i][i]==1)//判断自反性{if(i==N-1)e=0;else;}else if(M[i][i]==0)//判断反自反性 {if(i==N-1)e=1;else;}else{e=2;break;}}for(i=0;i<N;i++){for(j=0;j<N;j++)if(M[i][j]!=M[j][i])//判断对称性{ f=1;break;}}for(i=0;i<N;i++){for(j=0;j<N;j++)if(M[i][j]==1)//判断反对称性{if(M[j][i]==0){if(i==(N-1)&&j==N-1) f=0;elsebreak;}}}if(f!=0&&f!=1){f=2;}for(i=0;i<N;i++)//判断可传递性for(j=0;j<N;j++)if(M[i][j]==1)continue;elsefor(k=0;k<N;k++)if(M[i][k]*M[k][i]==0) continue;elsez=0; if(e==0)printf("关系R是自反关系\n");else if(e==1)printf("关系R是反自反关系\n");else if(e==2)printf("关系R是反自反关系\n");if(f==0)printf("关系R是反对称关系\n");else if(f==1)printf("关系R不是对称关系\n");else if(f==2)printf("关系R是对称关系\n");if(z==0)printf("关系R是不可传递关系\n"); elseprintf("关系R是可传递关系\n");}[实验步骤]和[实验记录] 程序运行截图:i、程序启动截图:ii、程序输入截图:ii、程序运行结果截图:实验总结:实验简洁高效地判断二元关系的性质。
离散数学上机实验报告

一、实验内容
从键盘输入二元关系用沃尔算法求出它的传递闭包,并输出。
二、实验步骤
熟悉沃尔算法,然后将其用程序编写出来,任意输入二元关系,观察程序运行结果,
用另一种算法算出结果,与其比较,调试程序。
三、实验代码
#include<stdio.h>
int main()
{
int n,i,j,k,a[10][10];
printf("﹁q=0\n");
printf("p∧q=1\n");
printf("p∨q=1\n");
printf("p→q=1\n");
printf("p<->q=1\n");
}
continue;
}
if('n'==t)
break;
}
return 0;
}
四、实验体会
求真值运算中,应注意各种连接词的试用方法,以及其在不同情况下的真值。
printf("\n");
}
return 0;
}
四、实验体会
熟悉并使用沃尔算法,关系矩阵中只有0和1,所以用沃尔算法求得的数若大于1,应该返回1,其余不变。
实验四、三种闭包运算
一、实验内容
从键盘输入一个二元关系,求它的自反闭包,对称闭包,传递闭包,并输出。
二、实验步骤
编写程序,从键盘输入一个二元关系,当求传递闭包时,试与沃尔算法的传递闭包做比较,观察程序运行结果,调试程序。
char t;
while(t)
{
printf("是否运算程序(y/n):\n");
离散数学集合的运算实验报告

大连民族学院计算机科学与工程学院实验报告实验题目:集合的运算课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:网络工程班级:网络111班学生姓名:张山学号:2011083123实验日期:2013年12月22日实验地点:I区实验机房实验学时:8小时实验成绩:指导教师签字:年月日老师评语:1实验题目:集合的运算实验原理:1、实验内容与要求:实验内容:本实验求两个集合间的运算,给定两个集合A、B,求集合A与集合B之间的交集、并集、差集、对称差集和笛卡尔乘积。
实验要求:对于给定的集合A、B。
用C++/C语言设计一个程序(本实验采用C++),该程序能够完成两个集合间的各种运算,可根据需要选择输出某种运算结果,也可一次输出所有运算结果。
2、实验算法:实验算法分为如下几步:(1)、设计整体框架该程序采取操作、打印分离(求解和输出分开)的思想。
即先设计函数求解各部分运算并将相应结果传入数组(所求集合)中,然后根据需要打印运算结果。
(2)、建立一个集合类(Gather)类体包括的数组a、b、c、d、e、f、g分别存储集合A、B以及所求各种运算的集合。
接口(实现操作的函数)包括构造函数,菜单显示函数,求解操作函数,打印各种运算结果等函数。
(3)、设计类体中的接口构造函数:对对象进行初始化,建立集合A与集合B。
菜单显示函数:设计提示选项,给使用者操作提示。
操作函数:该函数是程序的主题部分,完成对集合的所有运算的求解过程,并将结果弹入(存入)对应数组(集合)中,用于打印。
具体操作如下:21*求交集:根据集合中交集的定义,将数组a、b中元素挨个比较,把共同元素选出来,并存入数组c(交集集合)中,即求得集合A、B的交集。
2*求并集:根据集合中并集的定义,先将数组a中元素依次存入数组g(并集集合)中,存储集合A中某元素前,先将其与已存入g中的元素依次比较,若相同则存入下一个元素,否则直接存入g中,直到所有A中元素存储完毕。
离散数学实验报告.doc

计算机科学与工程学院实验报告实验题目:判断关系R的性质课程名称:离散数学实验类型:□演示性□验证性专业: 班级:学生姓名:学号:实验日期:2011年12年19日实验地点:实验学时:实验成绩:指导教师签字:2011年12月25日实验题目:判断关系R的性质实验原理:1.自反与反自反性质从给定的关系矩阵来断判关系R是否为自反是很容易的。
若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。
本算法可以作为判等价关系算法的子程序给出。
2.对称与反对称性质若M(R的关系矩阵)为对称矩阵,则R是对称关系;若M为反对称矩阵,则R是反对称关系。
判断对称性,对于i=2,3,….,n;j=1,2,……,i-1,若存在m ij=m ji,则R是对称的;3.传递性质一个关系R的可传递性定义告诉我们,若关系R是可传递的,则必有:m ik=1∧m kj=1⇒ m ij=1。
这个式子也可改写成为: m ij=0⇒ m ik=0∨m kj=0。
我们可以根据后一个公式来完成判断可传递性这一功能的。
可传递性也是等价关系的必要条件,所以,本算法也可以作为判等价关系算法的子程序给出。
实验要求:写出类c的算法并编写一个程序判断给定集合上的关系是否为自反的。
写出类c的算法并编写一个程序判断给定集合上的关系是否为对称的。
写出类c的算法并编写一个程序判断给定集合上的关系是否为传递的。
实验流程图:NY实验中用到的函数:input(); //输入矩阵函数judge(); //判断输入矩阵是否正确函数 analagmatic(); //判断自反关系函数 symmetric(); //判断对称关系函数 transmit(); // 判断传递关系函数 开始输入n 阶矩阵M 输入矩阵各元素的值 判断出矩阵的自反性、对称性、传递性。
离散数学(集合的运算)实验报告

大连民族学院计算机科学与工程学院实验报告实验题目:集合的运算课程名称:离散数学实验类型:□演示性□验证性□操作性□设计性□综合性专业:网络工程班级:网络111班学生姓名:张山学号:2011083123实验日期:2013年12月22日实验地点:I区实验机房实验学时:8小时实验成绩:指导教师签字:年月日老师评语:实验题目:集合的运算实验原理:1、实验内容与要求:实验内容:本实验求两个集合间的运算,给定两个集合A、B,求集合A与集合B之间的交集、并集、差集、对称差集和笛卡尔乘积。
实验要求:对于给定的集合A、B。
用C++/C语言设计一个程序(本实验采用C++),该程序能够完成两个集合间的各种运算,可根据需要选择输出某种运算结果,也可一次输出所有运算结果。
2、实验算法:实验算法分为如下几步:(1)、设计整体框架该程序采取操作、打印分离(求解和输出分开)的思想。
即先设计函数求解各部分运算并将相应结果传入数组(所求集合)中,然后根据需要打印运算结果。
(2)、建立一个集合类(Gather)类体包括的数组a、b、c、d、e、f、g分别存储集合A、B以及所求各种运算的集合。
接口(实现操作的函数)包括构造函数,菜单显示函数,求解操作函数,打印各种运算结果等函数。
(3)、设计类体中的接口构造函数:对对象进行初始化,建立集合A与集合B。
菜单显示函数:设计提示选项,给使用者操作提示。
操作函数:该函数是程序的主题部分,完成对集合的所有运算的求解过程,并将结果弹入(存入)对应数组(集合)中,用于打印。
具体操作如下:1*求交集:根据集合中交集的定义,将数组a、b中元素挨个比较,把共同元素选出来,并存入数组c(交集集合)中,即求得集合A、B的交集。
2*求并集:根据集合中并集的定义,先将数组a中元素依次存入数组g(并集集合)中,存储集合A中某元素前,先将其与已存入g中的元素依次比较,若相同则存入下一个元素,否则直接存入g中,直到所有A中元素存储完毕。
离散数学试验报告

离散数学实验报告姓名:学号:班级:实验地点:实验时间:Word文档1实验目的和要求运用最小生成树思想和求最小生成树程序解决实际问题。
实际问题描述如下:八口海上油井相互间距离如下表,其中1号井离海岸最近,为5km。
问从海岸经1 号井铺设油管把各井连接起来,怎样连油管长度最短(为便于检修,油管只准在油井处分叉)?「到 2 3 4 5 6 7 81 1.3 2.1 0.9 0.7 1.8 2.0 1.820.9 1.8 1.2 2.8 2.3 1.13 2.6 1.7 2.5 1.9 1.040.7 1.6 1.5 0.950.9 1.1 0.860.6 1.070.52实验环境和工具实验环境:Windows 7旗舰版工具:Dev-C++ 5.8.33实验过程3.1算法流程1Word i=0;j=0;惠档exnum=8;结束3.2程序核心代码〃油管铺设问题Prim 算法实现#include <iostream> #include<iomanip> using namespace std; #define MAXV 10#define INF 32767 //INF 表示8 typedef int InfoType; typedef struct{int no; InfoType info; } VertexType;typedef struct{〃图的定义float edges[MAXV][MAXV]; 〃邻接矩阵 int vexnum;//顶点数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph;//图的邻接矩阵类型〃顶点编号 //顶点其他信息 〃顶点类型Word文档/*输出邻接矩阵g*/void DispMat(MGraph g){int i,j;for (i=0;i<g.vexnum;i + +){for (j=0;j<g.vexnum;j + +)if (g.edges[i][j] = = INF)cout<<setw⑹<<“8";elsecout<<setw(6)<<g.edges[i][j];cout<<endl;))void prim(MGraph g,int v){ //从顶点V0 出发,按Prim 算法构造G的最小生成树//输出最小生成树的每条边及其权值float Vlength[MAXV];int i, j, k;int cloest[MAXV];float min;float sum = 0.0;Word文档for(i=0;i<g.vexnum;i ++){Vlength[i]=g.edges[v][i];cloest[i]=v;)for(i = 1;i<g.vexnum;i + +){min = INF; //min为其中最大的一条边二MAXVfor(j=0;j<g.vexnum;j + +){〃找n-1 条边if(Vlength[j]!=0&&Vlength[j]<min){min=Vlength[j];k=j;))cout<<" 连接油<”<<cloest[k] + 1<<”,”<<k+1<<">"<<“ 长度为:"<<min<<endl;sum + = min;Vlength[k]=0;Vlength[cloest[k]]=0;for(j=0;j<g.vexnum;j + +){ 〃选择当前代价最小的边if(g.edges[k][j]!=0&&g.edges[k][j]<Vlength[j]){Vlength[j]=g.edges[k][j];cloest[j]=k;Word文档)cout<<"管道总长度为:"<<sum<<endl;)int main()(int i,j,u=3;MGraph g;float A[MAXV][10];g.vexnum=8;for (i=0;i<g.vexnum;i + +)for (j=0;j<g.vexnum;j + +)A[i][j] = INF;A[0][1] = 1.3; A[0][2]=2.1; A[0][3]=0.9;A[0][4]=0.7; A[0][5] = 1.8; A[0][6]=2.0;A[0][7] = 1.8; A[1][2]=0.9; A[1][3] = 1.8;A[1][4] = 1.2; A[1][5]=2.8; A[1][6]=2.3;A[1][7] = 1.1; A[2][3]=2.6; A[2][4] = 1.7;A[2][5]=2.5; A[2][6] = 1.9; A[2][7] = 1.0;A[3][4]=0.7; A[3][5] = 1.6; A[3][6] = 1.5;A[3][7]=0.9; A[4][5]=0.9; A[4][6] = 1.1;Word文档A[4][7]=0.8; A[5][6]=0.6; A[5][7] = 1.0;A[6][7]=0.5;for (i=0;i<g.vexnum;i + +)for (j=0;j<g.vexnum;j + +)A[j][i]=A[i][j];for (i=0;i<g.vexnum;i + +) /*建立图的邻接矩阵*/ for (j=0;j<g.vexnum;j + +)g.edges[i][j]=A[i][j];cout<<endl;cout<<”各油井间距离:\n";DispMat(g);cout<<endl;cout<<"最优铺设方案:\n";prim(g,0);cout<<endl;return 0;)3.3运行结果Word文档exited after O.06836 seconds 3.4 运行结果分析程序实现了输出需要铺设管道的油井编号,并给出了每条管道长度以及总长度,基 本实现了题目要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散数学
电子科技大学
计算机科学与工程学院
信息与软件工程学院
2013年9月22日星期日
1
电子科技大学离散数学课程组——国家精品课程
离散数学实验安排(顾小丰)
时间:第十五周六( 6月2日) 9:00~12:00 第十六周六(6月9日) 14:30~17:30 地点:信息与软件工程学院三楼实验中心 要求: 1. 使用C语言编写计算机程序完成题目; 2. 题目: 验证性实验:1-3必做 设计性实验:1必做 2和3题任选一个做 3. 完成后撰写实验报告(6月25日前交给辅导员)
5
电子科技大学离散数学课程组——国家精品课程
设计性实验1—穿衣问题(关系)
如图是一个人穿衣服时的顺序要求。比如,必须 要先穿衬衫(shirt)才能穿毛衣(sweater)。编写 程序给出按照什么样的顺序穿衣服才是合适的。
6
电子科技大学离散数学课程组——国家精品课程
设计性实验2 —分油问题(数理逻辑)
2
电子科技大学离散数学课程组——国家精品课程
验证性实验1—逻辑学家会议问题(数理逻辑)
有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些 奇怪,因为他们有很多要求,已知: 1.A,B两人至少有1人参加会议。 2.A,E,F3人中有2人参加会议。 3.B和C两人决定,要么两人都去,要么两人都不去。 4.A,D两人中只1人参加会议。 5.C,D两人中也只要1人参加会议。 6.如果D不去,那么E也决定不去。那么最后究竟有哪几 个人参加了会议呢? 参考思路:列出前提条件对应的公式,并求出对应的主 范式,从而确定那些人参加会议。
两个小孩去打油,一人带了一个一斤的空瓶,另 一个带了一个七两和一个三两的空瓶。原计划各 打一斤油,可是由于所带的钱不够,只好合打了 一斤油,在回家的路上,二人想平分这一斤油, 可是又没有其它工具。现只用这三个瓶子(一斤 、七两、三两)精确地分出两个半斤油来。
7
电子科技大学离散数学课程组——国家精品课程
b 2 6 8 1 1 c 3 1 7 2 d 7 6 4 9 9 2
a
i
j
k
1
e 4
h
g
1
f
4
电子科技大学离散数学课程组——国家精品课程
验证性实验3-运算律与特殊元(代数系统)
给定一个集合A和该集合上的一个二元运算*, 编写程序(集合和运算具有普遍性),验证该 运算是否满足结合律、交换律、幂等律、消去 律,并计算幺元、零元、幂等元、可消去元、 逆元。
3
电子科技大学离散数学课程组——国家精品课程
验证性实验2—海底管道问题(图论)
某石油公司在海湾拥有几个石油钻井平台,每个平台 开采出的石油需要运往海岸上的炼油厂。要在平台与 炼油厂之间建造一个石油运输网络。问管道如何设计 ,才能使给出了经过勘测之后可能的管道铺设 走向和建设费用。
设计性实验3 - 洒水车路线问题(图论)
一辆洒水车从所在的市政办公点出发,需要在所 有负责的街道上洒水,并最后回到原点。问洒水 车如何设计路线才能使得走的路程最短。 归结为数学问题:设给出了一个连通的无向图, 它的每条边都有非负的长度,求G的一条经过每 条边至少一次并且总度最小的回路。
8