离散数学实验报告2
厦门理工学院离散数学实验2_集合论
《离散数学》实验报告实验序号:2 实验项目:集合论附源程序清单:1.#include<stdio.h>main(){int a[10]={1,2,3,4,5,6,7,8,9};int b[5]={3,1,7,9};int i,j,m=0,p=9,q=4;for(i=0;i<p;i++){if(3==a[i])m++;}if(m!=0)printf("3属于集合A\n");elseprintf("3不属于集合A\n");m=0;for(i = 0;i<p;i++){if(10==a[i])m++;}if(m!=0)printf("10属于集合A\n");elseprintf("10不属于集合A\n");m=0;for(i=0;i<p;i++){for(j=0;j<q;j++){if(a[i]==b[j])m++;}}if(m=4)printf("集合B属于集合A\n");elseprintf("集合B不属于集合A\n");return 0;}2.#include<stdio.h>int main(){int a[80],b[80],c[80],e[80];int m,n,k,l,i,j,p,q,o;l=1;while(l){printf(" ###欢迎使用集合运算软件###\n");printf("#请输入您要输入的A数组内存放的数字的数目:");scanf("%d",&m); //输入一个数组内需要存放的数字的数目printf("#请输入集合A中的元素:");scanf("%d",&a[0]);for(i=1;i<m;i++){scanf("%d",&a[i]);for(j=0;j<i;j++)if(a[i]==a[j]){printf("#您的输入有误!集合中的元素不能相同!\n");printf("#请重新输入:");for(i=0;i<m;i++)scanf("%d",&a[i]);} //判断数组内是否存在重复的数字,若有,能重新输入}printf("#请输入您要输入的B数组内存放的数字的数目:");scanf("%d",&n);printf("#请输入集合B中的元素:");scanf("%d",&b[0]);for(i=1;i<n;i++){scanf("%d",&b[i]);for(j=0;j<i;j++)if(b[i]==b[j]){printf("#您的输入有误!集合中的元素不能相同!\n");printf("#请重新输入:"); //重新输入集合B for(i=0;i<n;i++)scanf("%d",&b[i]);}}p=k;printf("#A数组与B数组的交集为{");for(k=0;k<p;k++)printf("%d ",c[k]);printf("}\n"); //交集的代码k=0;for(q=0;q<p;q++)c[q]=0; //将C数组置空for(i=0;i<m;i++){c[k]=a[i];k++;}for(i=0;i<n;i++)for(j=0;j<k;j++){if(b[i]==c[j]) break;if(j==k-1){c[k]=b[i];k++;}} //并集的代码p=k; //确定C数组当前的数目,便于下一次置空printf("#A数组与B数组的并集为{");for(k=0;k<p;k++)printf("%d ",c[k]);printf("}\n");k=0;for(q=0;q<p;q++)c[q]=0;for(j=0;j<m;j++)for (i=0;i<n;i++){if (a[j]==b[i])break;if(j==n-1){c[k]=a[i];k++;} //差运算的代码}p=k;printf("#A数组与B数组的差运算集为{");for(k=0;k<p;k++)printf("%d ",c[k]);printf("}\n");k=0;for(q=0;q<p;q++)c[q]=0;for (i=0;i<o;i++)for (j=0;j<m;j++){if (e[i]==a[j])break;if (j==m-1){c[k]=e[i];k++;}} //补运算的代码printf("#您是否还想继续计算。
中南大学离散数学实验报告(实验2AC)
“离散数学”实验报告(实验2AC)专业班级学号姓名日期:2011.12.12目录一、实验目的 (3)二、实验内容 (3)三、实验环境 (3)四、实验原理和实现过程(算法描述) (3)A题型 (3)C题型 (4)五、实验数据及结果分析 (7)A题型 (7)B题型 (9)六、源程序清单 (11)A题型 (11)B题型 (12)七、其他收获及体会 (18)离散数学实验报告2AC一、实验目的掌握关系的概念与性质,基本的关系运算,关系的各种闭包的求法。
理解等价类的概念,掌握等价类的求解方法。
二、实验内容1. 求有限集上给定关系的自反、对称和传递闭包。
(有两种求解方法,只做一种为A,两种都做为B)2. 求有限集上等价关系的数目。
(有两种求解方法,只做一种为A,两种都做为B)3. 求解商集,输入集合和等价关系,求相应的商集。
(C)三、实验环境C或C++语言编程环境实现。
四、实验原理和实现过程(算法描述)A题型求有限集上等价关系的数目。
集合上的等价关系与该集合的划分之间存在一一对应关系。
一个等价关系对应一个划分,一个划分也对应一个等价关系。
我们把n个元素的集合划分成k 块的方法数叫第二类Stirling数,表示为S(n,k)。
给定S(n,n) = S(n,1) = 1,有递归关系:S(n,k) = S(n − 1,k − 1) + kS(n − 1,k)集合上所有等价类的个数即为k从1到n,所有S(n,k)之和。
这个问题的算法比较简单,仅需两步就可完成,首先根据上式,定义一个递归函数S(n,k),然后对k从1到n,求取sum=∑S(n,k),sum的值就是给定n元集合上的等价关系数目,最后将其输出即可。
A题型的流程图如下所示:3C题型求解商集,输入集合和等价关系,求相应的商集商集即等价类构成的集合,要求商集,首先需要判断输入的关系是否为等价关系,否则没有商集。
判断输入的关系是否为等价关系的算法如下:离散数学实验报告2AC 5(1)将输入的关系转换为关系矩阵,这里定义了一个函数translate(),转换的方法为:依次查找输入的关系中的二元组的两个元素在集合中的位置,例如<a ,b>,若a 在集合A 中的位置为i ,b 在集合A 中的位置为j ,就令存放关系矩阵的二维数组M[i][j]=1,这样就将输入的关系R 转换为关系矩阵的形式。
中南大学自动化专业离散数学实验报告2
“离散数学”实验报告(实验二AC)专业:自动化班级:学号:姓名:2010年12月20日一、实验目的:掌握关系的概念与性质,基本的关系运算,关系的各种闭包的求法。
理解等价类的概念,掌握等价类的求解方法。
二、实验内容:1. 求有限集上给定关系的自反、对称和传递闭包。
(有两种求解方法,只做一种为A,两种都做为B)2. 求有限集上等价关系的数目。
(有两种求解方法,只做一种为A,两种都做为B)3. 求解商集,输入集合和等价关系,求相应的商集。
(C)三、实验环境:工具:Mcrosoft Visual Studio 2005;程序设计语言:C语言。
四、实验原理和实现过程(算法描述):实验A 求有限集上等价关系的数目。
集合上的等价关系与该集合的划分之间存在一一对应关系。
一个等价关系对应一个划分,一个划分也对应一个等价关系。
我们把n 个元素的集合划分成k块的方法数叫第二类Stirling数,表示为S(n,k)。
给定S(n,n) = S(n,1) = 1,有递归关系:S(n,k) = S(n − 1,k − 1) + kS(n − 1,k)集合上所有等价类的个数即为k从1到n,所有S(n,k)之和。
这个问题的算法比较简单,仅需两步就可完成,首先根据上式,定义一个递归函数S(n,k),然后对k从1到n,求取sum=∑S(n,k),sum的值就是给定n元集合上的等价关系数目,最后将其输出即可。
实验A的流程图如下所示:实验C 求解商集,输入集合和等价关系,求相应的商集商集即等价类构成的集合,要求商集,首先需要判断输入的关系是否为等价关系,否则没有商集。
判断输入的关系是否为等价关系的算法如下:(1)将输入的关系转换为关系矩阵,这里定义了一个函数translate(),转换的方法为:依次查找输入的关系中的二元组的两个元素在集合中的位置,例如<a,b>,若a在集合A中的位置为i,b在集合A中的位置为j,就令存放关系矩阵的二维数组M[i][j]=1,这样就将输入的关系R转换为关系矩阵的形式。
离散实验报告
离散实验报告专业:数学与应用数学班级:091121学号:2009112125姓名:张鼎珩日期:2011.06.23实验内容:实验一真值计算实验二两个集合运算实验三关系闭包计算实验四关系与函数进行试验:实验一真值计算一、实验目的熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。
二、实验内容(1)求任意一个命题公式的真值表:从键盘输入两个命题P 和Q的真值,求它们的合取、析取、蕴含和等价的真值(2)利用真值表求任意一个命题公式的主范式(3)利用真值表进行逻辑推理三实验程序:#include<stdio.h>/*标准输入输出头文件*/#include<stdlib.h>/*该文件包含了的C语言标准库函数的定义*/#include<string.h>/*字符串数组的函数定义的头文件*/#include<conio.h>/*通用输入输出库*/#include<math.h>#define N 50void jisuan();void zhenzhibiao();void panduan(int b[N],int f);int tkh (char sz[N], char ccu[N], int icu[N], int h0);int fkh (char sz[N], char ccu[N], int icu[N], int h0);main(){int a1;start:do{printf(" 1.求P、Q的合取、析取、条件和双条件的真值\n 2.求任意一个命题公式的真值表,并根据真值表求主范式\n 3.退出\n");printf("\n选择功能选项:");fflush(stdin);/*清空输入缓冲区,通常是为了确保不影响后面的数据读取*/scanf("%d",&a1);switch(a1)/*switch语句实现选择功能*/{case 1:system("cls");jisuan();break;/*功能A*/case 2:system("cls");fflush(stdin);zhenzhibiao();break;/*功能BC*/case 3:system("exit");exit(0);/*结束整个程序的运行*/default:system("cls");goto start;/*控制流转移到start处*/}}while(1);}void jisuan()/*功能A*/{char p,q,t,ch;int p1,q1;do{start:fflush(stdin);printf("请输入P和Q的真值(T或F):");scanf("%c,%c",&p,&q);if((p=='F'||p=='f'||p=='T'||p=='t')&&(q=='F'||q=='f'||q=='T'||q=='t')){if(p=='F'||p=='f')/*赋值*/p1=0;elsep1=1;if(q=='F'||q=='f')q1=0;elseq1=1;if(p1|q1)/*计算*/t='T';elset='F';printf("P析取Q为:%c\n",t);if(p1&q1)t='T';elset='F';printf("P和取Q为:%c\n",t);if((!p1)|q1)t='T';elset='F';printf("P条件Q为:%c\n",t);if(p1==q1)t='T';elset='F';printf("P双条件Q为:%c\n",t);}else{printf("请按正确格式输入!\n");goto start;};printf("是否继续输入?Y/N");fflush(stdin);ch=getch();system("cls");}while(ch!='n'&&ch!='N');}void zhenzhibiao()/*功能BC*/{int i1,i2,d=1,icu[N],kh=0,jg,j=0,h0;int bj=0,hq[N],h=0,x=0,xq[N];char sz[N],ccu[N],sz0[N];hq[0]=-1;xq[0]=-1;printf("请输入一个合法的命题公式(可含与或非及括号):\n");gets(sz);strcpy(sz0,sz);for(i1=0;i1<strlen(sz);i1++){if(sz[i1]==')' || sz[i1]=='(')kh++;if(sz[i1]>='a' && sz[i1]<='z' || sz[i1]>='A' && sz[i1]<='Z'){for(i2=0;i2<j;i2++) /*判断并储存变量*/if(ccu[i2]==sz[i1])d=0;if(d==1){ccu[j]=sz[i1];j++;}d=1;}}printf("\n该式子中的变量个数为:%d\n",j);h0=j;printf("\n输出真值表如下:\n \n");for(i1=0;i1<h0;i1++)printf(" %c ",ccu[i1]);printf(" ");puts(sz);printf("\n");for(i1=0;i1<j;i1++) /*先将所有的变量赋值为零*/icu[i1]=0;for(i2=0;i2<j;i2++)printf(" %d ",icu[i2]);jg=tkh(sz,ccu,icu,h0);if(jg==0)hq[h++]=bj;elsexq[x++]=bj;printf(" ------> %d\n",jg);strcpy(sz,sz0);for(i1=0;i1<(int)pow(2,j)-1;i1++){++bj;panduan(icu,0); /*赋值变量*/jg=tkh(sz,ccu,icu,h0);if(jg==0)hq[h++]=bj;elsexq[x++]=bj;strcpy(sz,sz0); /*恢复被修改的数组*/for(i2=0;i2<j;i2++)printf(" %d ",icu[i2]);printf(" ------> %d\n",jg);}if(hq[0]==-1)printf("\n该命题公式不存在主合取范式。
离散数学实验报告()
《离散数学》实验报告专业网络工程班级姓名学号授课教师二 O 一六年十二月目录实验一联结词的运算实验二根据矩阵的乘法求复合关系实验三利用warshall算法求关系的传递闭包实验四图的可达矩阵实现实验一联结词的运算一.实验目的通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习和锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解和记忆命题连接词运算。
二.实验原理(1) 非运算, 符号: ,当P=T时,P为F, 当P=F时,P为T 。
(2) 合取, 符号: ∧ , 当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。
(3) 析取, 符号: ∨ , 当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。
(4) 异或, 符号: ▽ , 当且仅当P和Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。
(5) 蕴涵, 符号: →, 当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。
(6) 等价, 符号: ↔, 当且仅当P,Q的真值不同时,命题P↔Q的真值才为假;否则,P→Q的真值为真。
三.实验内容编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。
四.算法程序#include<stdio.h>void main(){printf("请输入P、Q的真值\n");int a,b;scanf("%d%d",&a,&b);int c,d;if(a==1)c=0;else c=1;if(b==1)d=0;else d=1;printf("非P、Q的结果为%d,%d\n",c,d);int e;if(a==1&&b==1)e=1;else e=0;printf("合取的结果为%d\n",e);int f;if(a==0&&b==0)f=0;else f=1;printf("析取的结果为%d\n",f);int g;if(a==1&&b==0)g=0;else g=1;printf("单条件的结果为%d\n",g);int h;if(a==b)h=1;else h=0;printf("双条件的结果为%d\n",h);}内容格式:新罗马,五号,行间距固定值18磅五.实验结果六.心得体会通过编程,学会了析取、合取、单条件连接词、双条件连接词的用法。
第二次离散实验报告
“离散数学”实验报告(实验1)专业网络工程班级网133学号139074337姓名李阳一.实验目的;本实验课程是计算机专业学生的一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
熟悉掌握集合中的交、并、相对补、对称差、笛卡尔乘积、以及集合间的关系运算等,进一步能用它们来解决实际问题。
二.实验内容;从键盘输入两个集合A和B的元素,求它们的交∩、并∪、相对补-、对称差(+)、笛卡尔乘积×、以及集合间的关系复合运算×三. 实验原理;1.实验原理(1)交:A∩B={x|x∈A∧x∈B}对于集合A和集合B,由即属于A又属于B的所有元素所组成的集合,。
(2)并:A∪B={x|x∈A∨x∈B}若A和B是集合,则A和B并集是有所有A的元素或所有B的元素,而没有其他元素的集合。
(3)相对补:B - A = { x| x∈B,x∉A}A -B = { x| x∈A,x∉B}若 A 和 B 是集合,则 A 在 B 中的相对补集,或叫做 B 和 A 的集合论差,是这样一个集合,其元素属于 B,但不属于 A。
(4)对称差:A(+)B={x|x∈A∪B,x∉A∩B}A(+)B=(A∪B)—(A∩B)A(+)B=(A—B)∪(B—A)集合A与集合B中所有不属于A∩B的元素的集合。
(5)笛卡尔乘积:AxB={<x,y>|x∈A∧y∈B}设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB. (6)求集合间关系的复合运算:RoS=})S∧<{>∈>∈<>∃<x,Ry,zyz|y(x,设R是X到Y的关系,S是Y到Z的关系,则RoS称为R和S的复合关系。
离散数学实验报告(两篇)
引言:离散数学是一门基础性的数学学科,广泛应用于计算机科学、电子信息等领域。
本文是《离散数学实验报告(二)》,通过对离散数学实验的深入研究和实践,总结了相关的理论知识和应用技巧,希望能够对读者对离散数学有更加深入的理解。
概述:本实验主要涉及离散数学中的集合、关系、图论等基本概念及其应用。
通过对离散数学的实验学习,深入掌握了这些概念和应用,对于在实际问题中的应用和拓展具有重要的意义。
正文内容:一、集合相关概念及应用1.定义:集合是由元素组成的无序的整体。
介绍了集合的基本概念、集合的表示法以及集合的运算。
2.集合的应用:介绍了集合在数学、计算机科学中的应用,如数据库的查询、关系代数等。
二、关系相关概念及应用1.定义:关系是一个元素与另一个元素之间的对应关系。
介绍了关系的基本概念、关系的表示方法及其运算。
2.关系的应用:介绍了关系在图像处理、社交网络分析等领域的应用,如图像中的像素点之间的关系、社交网络中用户之间的关系等。
三、图论基础知识及应用1.定义:图是由顶点和边组成的抽象的数学模型。
介绍了图的基本概念、图的表示方法和图的运算。
2.图论的应用:介绍了图论在路由算法、电子商务等领域的应用,如路由器的路由选择、电子商务中的商品推荐等。
四、布尔代数的概念及应用1.定义:布尔代数是一种基于集合论和逻辑学的代数系统。
介绍了布尔代数的基本概念、布尔表达式及其化简方法。
2.布尔代数的应用:介绍了布尔代数在电路设计、开关控制等方面的应用,如逻辑门电路的设计、开关控制系统的建模等。
五、递归的概念及应用1.定义:递归是一种通过调用自身来解决问题的方法。
介绍了递归的基本原理、递归的应用技巧。
2.递归的应用:介绍了递归在算法设计、树的遍历等方面的应用,如快速排序算法、树结构的遍历等。
总结:通过本次离散数学的实验学习,我深入掌握了集合、关系、图论等基本概念与应用。
集合的应用在数据库查询、关系代数等方面起到了重要的作用。
关系的应用在图像处理、社交网络分析等领域有广泛的应用。
中南大学自动化专业离散数学实验报告2
中南大学自动化专业离散数学实验报告2离散数学作为计算机科学与技术专业的基础课程之一,对于培养学生的逻辑思维和抽象思维能力具有重要意义。
本次实验是关于离散数学中的图论部分,通过实际操作和计算来理解和应用图的相关概念和算法。
实验一开始,我们首先学习了图的基本概念和术语,例如顶点、边、路径、回路等。
然后,我们学习了图的表示方法,包括邻接矩阵和邻接表。
通过实际操作,我们发现邻接矩阵适合表示稠密图,而邻接表适合表示稀疏图。
这种不同的表示方法对于图的遍历和搜索算法有着重要的影响。
接下来,我们进行了图的遍历实验。
通过深度优先搜索和广度优先搜索算法,我们可以遍历图中的所有节点,并找到特定节点之间的路径。
深度优先搜索算法通过递归的方式进行,它会首先访问一个节点的所有邻接节点,然后再递归地访问这些邻接节点的邻接节点。
广度优先搜索算法则是通过队列的方式进行,它会首先访问一个节点的所有邻接节点,然后将这些邻接节点按照访问的顺序加入队列中,再逐个出队进行访问。
通过实验,我们发现深度优先搜索算法更适合用于寻找路径,而广度优先搜索算法更适合用于寻找最短路径。
在实验的后半部分,我们学习了最小生成树和最短路径算法。
最小生成树算法用于找到一个连通图的最小生成树,其中包含了连接图中所有节点的最短路径。
我们学习了Prim算法和Kruskal算法,它们分别基于贪心算法和并查集来实现。
通过实验,我们发现Prim算法适合用于稠密图,而Kruskal算法适合用于稀疏图。
最短路径算法用于找到两个节点之间的最短路径,我们学习了Dijkstra算法和Floyd算法。
Dijkstra算法通过贪心策略逐步更新节点之间的最短路径,而Floyd算法则通过动态规划的方式计算所有节点之间的最短路径。
通过实验,我们发现Dijkstra算法适合用于稀疏图,而Floyd算法适合用于稠密图。
总结起来,本次实验让我们深入了解了离散数学中的图论部分,并通过实际操作和计算来应用图的相关概念和算法。
离散数学实验报告
离散数学实验报告一、实验目的离散数学是现代数学的一个重要分支,它在计算机科学、信息科学、人工智能等领域有着广泛的应用。
本次离散数学实验的目的在于通过实际操作和编程实现,深入理解离散数学中的基本概念、原理和算法,提高解决实际问题的能力,培养逻辑思维和创新能力。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
同时,还使用了一些相关的数学库和工具,如 sympy 库用于符号计算。
三、实验内容1、集合运算集合是离散数学中的基本概念之一。
在实验中,我们首先定义了两个集合 A 和 B,然后进行了并集、交集、差集等运算。
通过编程实现这些运算,加深了对集合运算定义和性质的理解。
```pythonA ={1, 2, 3, 4, 5}B ={4, 5, 6, 7, 8}并集union_set = Aunion(B)print("并集:", union_set)交集intersection_set = Aintersection(B)print("交集:", intersection_set)差集difference_set = Adifference(B)print("A 与 B 的差集:", difference_set)```2、关系的表示与性质判断关系是离散数学中的另一个重要概念。
我们使用矩阵来表示关系,并通过编程判断关系的自反性、对称性和传递性。
```pythonimport numpy as np定义关系矩阵relation_matrix = nparray(1, 0, 1, 0, 1, 0, 1, 0, 1)判断自反性is_reflexive = all(relation_matrixii == 1 for i inrange(len(relation_matrix)))print("自反性:", is_reflexive)判断对称性is_symmetric = all(relation_matrixij == relation_matrixji for i in range(len(relation_matrix)) for j in range(len(relation_matrix)))print("对称性:", is_symmetric)判断传递性is_transitive = Truefor i in range(len(relation_matrix)):for j in range(len(relation_matrix)):for k in range(len(relation_matrix)):if relation_matrixij == 1 and relation_matrixjk == 1 and relation_matrixik == 0:is_transitive = Falsebreakprint("传递性:", is_transitive)```3、图的遍历图是离散数学中的重要结构。
离散数学实验报告2
printf(“pleaseenter the values of m,n,p\n”);
scanf(“%d,%d,%d”,&m,&n,&p);
for(i=0;i<m;i++)
for(j=0;j<p;j++)
scanf(“%d”,A[i][j]);
printf(“\n”);
for(i=0;i<p;i++)
一、实验目的
求两个布尔矩阵的乘积
二、实验内容
1.描述布尔矩阵乘积的算法
2.编程实现布尔矩阵的乘积
三、使用环境
TC
四、算法介绍
Algorithm:the Boolean product
Input:two Boolean matrices and
Output:the Boolean product
Begin
}
for(i=0;i<m;i++)
{
for(j=0;ቤተ መጻሕፍቲ ባይዱ<n;j++)
printf(“%2d”,C[i][j]);
printf(“\n”);
}
}
2.运行窗口:
六、总结
1.注意当IF( =1 and =1) THEN =1执行完时要跳出循环
七、参考文献
[1]BernardKolman,Robert C.Busby,Sharon Cutler Ross,DiscreteMathematical Structures,Pearson Education,2009
for(j=0;j<n;j++)
scanf(“%d”,B[i][j]);
离散2实验报告
长沙学院离散数学实验报告题目集合运算及关系运算系(部) 计算机科学与技术专业(班级) 计科01班姓名刘江惠学号指导教师朱志勇起止日期长沙学院课程设计鉴定表姓名刘江惠学号专业计科班级01 设计题目集合运算及关系运算指导教师朱志勇指导教师意见:评定等级:教师签名:日期:答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名:日期:系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;实验2:集合运算及关系运算1.实验目的:通过试验,了解集合运算有关概念及计算技术,掌握合成关系运算条件与运算特点。
2.实验类型:验证型实验3.实验学时:2学时4.实验原理及知识点:(1)交运算:设A,B是两个集合,则A∩B={x|(x A)并且(x B)}。
(2)并运算:设A,B是两个集合,则A∪B={x|(x A)或(x B)}。
(3)差运算:设A,B是两个集合,则A B={x|(x A)并且(x B)}。
(4)笛卡儿集合:设A,B是两个集合,称集合A×B={<x,y>|(x A)∧(y B)}为集合A与B的笛卡儿积。
(5)求子集或求幂集:设A有n个元素,则ρ(A)有2n个元素,证明A的所有由k个元素组成的子集个数为从n个元素中取k个元素的组合数。
(6)求关系合成运算:设R是X到Y的关系,S是Y到Z的关系,则RοS称为R和S的复合关系,定义为:RοS={ <x,z>∃∣y(<x,y>∈R∧<y,z>∈S)}。
5.实验内容及步骤:(1)编写操作界面,使用MFC提供的DLG类,在面板上添加两个输入文本框作为输入集合A、B的实例输入。
添加四个按钮分别表示求交集,求并集,求差集和求笛卡儿积。
(2)按照运算规则编写运算函数,在对应按钮的触发事件中添加对应的处理函数。
(3)编译程序,连调发现程序中存在的问题并修改。
合肥工业大学离散数学实验报告2
实验二:逻辑运算与闭包运算求解姓名:李亚鸣学号:2014211590班级:计算机科学与技术14-1班实验地点:三号实验楼4号机房实验时间:2015年10月24日1实验目的和要求实验目的:(1)通过补充代码,完成基本逻辑运算的程序,加深对逻辑运算的理解。
(2)通过补充待完善的MFC程序,添加核心warshall算法部分,加强对闭包运算的求解的理解,同时对warshall算法加深理解。
实验要求:(1)在luojiyuns.cpp文件中补充And(), Or(), Not(), Xor(), Single_condition(),Doublbe_condition()以实现基本逻辑运算。
(2)warshallDlg.cpp文件中的CWarshallDlg::OnCalculate() 函数中补充warshall算法(3)在待完善的MFC代码上补充warshall算法的核心部分,并在图形上实现。
2实验环境和工具VisualC++6.03实验结果3.1算法流程图3.2程序核心代码(1)/****************************************************//该函数用于进行逻辑与运算//val_one和val_two分别为参与运算的逻辑值//调用twovalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::And(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==1&&val_two==1;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑或运算//val_one和val_two分别为要进行计算逻辑值//调用twovalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::Or(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==1||val_two==1;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑非运算//val_one为要进行计算的逻辑值//调用onevalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::Not(int val_one){//int jud;if(onevalue_Judge(val_one)){return val_one==0;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑异或运算//val_one和val_two分别为要进行计算逻辑值//调用twovalue_Judge函数检测是否符合输入要求,然后进行//逻辑运算并返回运算结果*****************************************************/ int luoji::Xor(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one^val_two;}else{Output();return 2;}cout<<"\n\n";}/**************************************************** //该函数用于进行逻辑单条件运算//val_one和val_two分别为要进行计算逻辑值*****************************************************/ int luoji::Single_condition(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==1&&val_two==0;}else{Output();return 2;}cout<<"\n\n";}/****************************************************//该函数用于进行逻辑双条件运算//val_one和val_two分别为要进行计算逻辑值*****************************************************/int luoji::Double_condition(int val_one,int val_two){//int jud;if(twovalue_Judge(val_one,val_two)){return val_one==0&&val_two==0;}else{Output();return 2;}cout<<"\n\n";}(4)// 以下语句段使用warshall方法改变矩阵中的值以帮助求解传递闭包// 需要用到的矩阵的行、列值存储在变量dim中,矩阵中各个位置上的对应// 值存储在two_mat[][]数组中//请在此添加warshall算法代码int j,k;int **temp=new int *[dim]; //定义二维动态数组for(i=0;i<dim;i++)temp[i] = new int[dim];for(k=0;k<dim;k++) //依次取k作为中间点的顶点{for(i=0;i<dim;i++){for(j=0;j<dim;j++){//if(two_mat[k][i]&&(two_mat[k][j]||two_mat[j][i])) two_mat[k][i]=1;temp[i][j]=(two_mat[i][j])||(two_mat[i][k]&two_mat[k][j]);}}for(i=0;i<dim;i++)for(j=0;j<dim;j++)two_mat[i][j]=temp[i][j];}3.3运行结果3.4运行结果分析对基本逻辑运算,用了几个简单的例子进行检测,运行结果都正确对warshall算法也用了一个4X4的矩阵作为例子进行检测,运算结果正确。
离散数学实验报告
实验一命题逻辑推理1.实验用例根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。
(1)营业员A或B偷了手表;(2)若A作案,则作案不在营业时间;(3)若B提供的证据正确,则货柜末上锁;(4)若B提供的证据不正确,则作案发生在营业时间;(5)货柜上了锁。
2.实验目的加深对命题逻辑推理方法的理解。
3.实验内容用命题逻辑推理的方法解决逻辑推理问题。
4.实验原理和方法(1)符号化上面的命题,将它们作为条件,营业员A偷了手表作为结论,得一个复合命题。
(2)将复合命题中要用到的联结词定义成C语言中的函数,用变量表示相应的命题变元。
将复合命题写成一个函数表达式。
(3)函数表达式中的变量赋初值1。
如果函数表达式的值为1,则结论有效,A偷了手表,否则是B偷了手表。
用命题题变元表示:A:营业员A偷了手表B:营业员B偷了手表C:作案不在营业时间D:B提供的证据正确E:货柜末上锁则上面的命题符号化为 (A||B) && (!A||C) && (!D||E) && (D||!C) && !E 要求找到满足上面式子的变元A,B的指派便是结果。
5.实验代码6.实验结果B偷了手表实验二关系的运用1.实验原理和方法在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法)2.实验代码5.实验结果1.自反闭包2.传递闭包3.对称闭包实验三图论1.实验用例如下图所示的赋权图表示某七个城市及预先算出它们之间的一些直接通信成路造价(单位:万元),试给出一个设计方案,使得各城市之间既能够通信又使总造价最小并计算其最小值.2实验原理和方法为了求解最小代价,使花费的总代价最小,这是数学中经典的求解最小耗费生成树的算法。
其核心思想是寻找每一步的最优解继而求得全局最优解。
为了求得最小耗费生成树,我们运用数学中经典的Krusal算法,此算法的核心思想是:1、假设该图G是不连通的,对该图的边以非降序权重新排列2、对于排序表中的每条边,如果现在把它放入T不会形成回路的话,则把它加入到生成树T中;否则丢弃3、输出最小生成树的结果,得到我们想要的答案因而最后求得的最小耗费是:此时的最小耗费是:23+1+4+9+3+17=57(万元)实验四最优二叉树在通信编码中的应用1.实验内容输入一组通信符号的使用频率,求各通信符号对应的前缀码。
离散数学 实验报告
离散数学实验报告离散数学实验报告一、引言离散数学是一门研究离散结构及其运算规则的数学学科,它在计算机科学、信息科学、通信工程等领域具有重要的应用价值。
本实验旨在通过实际案例,探索离散数学在现实生活中的应用。
二、实验目的本实验的目的是通过离散数学的理论知识,解决一个实际问题。
我们选择了图论中的最短路径问题作为案例,以展示离散数学在网络路由、物流规划等领域的应用。
三、实验过程1.问题描述我们的实验场景是一个城市的交通网络,其中各个交叉路口被看作是图的节点,而道路则是图的边。
我们需要找到两个给定节点之间的最短路径,以便规划出行路线。
2.建模为了解决这个问题,我们需要将实际情况抽象成数学模型。
我们将交通网络表示为一个有向图,每个节点代表一个交叉路口,每条边代表一条道路。
每条边上还需要标注距离或时间等权重。
3.算法选择在离散数学中,有多种算法可以解决最短路径问题,如迪杰斯特拉算法、弗洛伊德算法等。
根据实际情况和需求,我们选择了迪杰斯特拉算法。
4.算法实现我们使用编程语言实现了迪杰斯特拉算法,并将其应用于我们的交通网络模型。
算法的核心思想是通过不断更新节点之间的最短距离,逐步找到最短路径。
5.实验结果经过实验,我们成功找到了两个给定节点之间的最短路径,并计算出了最短距离。
这对于规划出行路线具有重要意义,可以帮助人们节省时间和资源。
四、实验总结通过这个实验,我们深入理解了离散数学在实际问题中的应用。
离散数学的概念和算法不仅仅是理论上的抽象,它们可以帮助我们解决现实生活中的复杂问题。
离散数学的应用远不止于此,它还可以用于密码学、数据压缩、人工智能等领域。
通过学习离散数学,我们能够培养出良好的抽象思维和问题解决能力,为未来的科学研究和工程实践打下坚实的基础。
总之,离散数学是一门具有广泛应用前景的学科,通过实验,我们对其应用领域有了更深入的了解。
希望未来能有更多的人关注和研究离散数学,为推动科学技术的发展做出贡献。
离散数学实验报告
离散数学实验报告离散数学实验报告一、引言离散数学是现代数学的一个重要分支,它研究离散的数学结构和离散的数学对象。
本实验报告将介绍我对离散数学的学习和实践的一些心得体会。
二、集合论集合论是离散数学的基础,它研究集合及其运算。
在实验中,我学习了集合的表示方法和运算规则。
集合的表示方法有枚举法、描述法和图示法等。
集合的运算包括并、交、差和补等。
通过实践操作,我深刻理解了集合的概念和运算规则。
三、逻辑与命题逻辑是离散数学的另一个重要内容,它研究推理和思维的规律。
在实验中,我学习了逻辑的基本概念和符号表示法。
逻辑中的命题是逻辑推理的基本单位,它可以是真或假。
通过实践操作,我能够正确地分析和判断命题的真值,并进行逻辑推理。
四、关系与函数关系与函数是离散数学中的重要内容,它们描述了元素之间的联系。
在实验中,我学习了关系的定义和性质,包括自反性、对称性和传递性等。
函数是一种特殊的关系,它将一个集合的元素映射到另一个集合。
通过实践操作,我能够正确地定义和分析关系与函数。
五、图论图论是离散数学中的重要分支,它研究图及其性质。
在实验中,我学习了图的基本概念和表示方法。
图由顶点和边组成,可以分为有向图和无向图。
通过实践操作,我能够正确地定义和分析图的性质,如度、路径和连通性等。
六、组合数学组合数学是离散数学的另一个重要分支,它研究离散对象的组合和排列。
在实验中,我学习了组合数学的基本原理和方法。
组合数学中的排列和组合是常见的计数问题,通过实践操作,我能够正确地计算排列和组合的数量。
七、实践应用离散数学在计算机科学、通信工程和运筹学等领域有着广泛的应用。
在实验中,我了解了离散数学在实际问题中的应用。
例如,图论可以用于网络路由算法的设计,组合数学可以用于密码学中的加密算法设计。
通过实践操作,我能够将离散数学的知识应用到实际问题中,提高问题的解决效率。
八、总结通过本次离散数学实验,我深入了解了离散数学的基本概念和方法,并通过实践操作加深了对离散数学的理解。
离散数学实验报告二(1)
学生实验报告学院:软件与通信工程学院课程名称:离散数学(软件)专业班级: 12软件 3 班姓名:简建敏学号: 0123897学生实验报告(2)一、实验综述1、实验目的及要求(1)熟悉图在计算机中的矩阵表示;(2)编写程序,根据输入的整数对,输出一个图形的邻接矩阵,并求出各结点的出度和入度;(3)加强对图知识的理解、应用和运用能力。
实验要求:给出如下有向图D ,利用邻接矩阵,编写程序计算:(1)各结点的度数;(2)D 中2v 到4v 长度为3的通路的条数;(3)D 中3v 到3v 长度为3的回路的条数。
32we.认真完成实验题,能正确运行,提交实验报告并上传程序,实验报告要求写出操作步骤、结果、问题、解决方法、体会等。
2、实验仪器、设备或软件计算机、VC++6.0、office 、相关的操作系统等。
二、实验过程(实验步A 骤、记录、数据、分析)实验原理:设D =<V,E>是一个线图,1211{,,,},{,,,}n n V v v v E e e e =⋅⋅⋅=⋅⋅⋅,则n 阶方阵()ij n n A a ⨯=称为D 的邻接矩阵。
其中:1,,(,)0,,(,)i j i j ij i j i j v v E v v Ea v v E v v E <>∈∈⎧⎪=⎨<>∉∉⎪⎩或或邻接矩阵具有如下特点:(1)邻接矩阵是一个布尔矩阵;(2)无向线图的邻接矩阵是对称的;(3)而有向线图的邻接矩阵不一定对称;利用邻接矩阵可以很容易的完成结点的度数计算实验过程代码如下:#include <iostream>using namespace std;#define MAX_SIZE 20#define OK 1typedef int Status;typedef struct ArcCell{int adj;}ArcCell,AdjMatrix[MAX_SIZE][MAX_SIZE];typedef struct{char vex[MAX_SIZE];AdjMatrix arcs;int vexnum,arcnum;}MGraph;int LocateVex(MGraph G,char v1);int LocateVex(MGraph G,char v1){int i;for(i=0;i<G.vexnum;i++){if(G.vex[i]==v1)return i;}return -1;}Status CreatDG(MGraph &G){ cout<<"用abcd 代替v1、v2、v3、v4;"<<endl;cout<<"请输入顶点的个数和弧数:";cin>>G.vexnum>>G.arcnum;int i,j,k;char v1,v2;cout<<"请按顺序输入所有的顶点:"<<endl;for(i=0;i<G.vexnum;i++){111deg()deg (),deg ()n i ik k n n i ik i ki k k v a v a v a =+-=====∑∑∑cin>>G.vex[i];}for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=0;}for(k=0;k<G.arcnum;k++){cout<<"请输入第"<<k+1<<"边的两个端点:"<<endl;cin>>v1>>v2;i=LocateVex(G,v1);j=LocateVex(G,v2);G.arcs[i][j].adj=1+G.arcs[i][j].adj;}cout<<"邻接矩阵:"<<endl;for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++)cout<<G.arcs[i][j].adj<<" ";cout<<endl;}return OK;}void du(MGraph G){int i,j,s=0,k=0;for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++){s=s+G.arcs[i][j].adj;k=k+G.arcs[j][i].adj;}cout<<"第"<<i+1<<"个顶点的出度是"<<s<<",入度是"<<k<<"."<<endl; s=0; k=0;}}MGraph changdu(MGraph T){MGraph S;S.arcnum=T.arcnum;S.vexnum=T.vexnum;int i,j;for(i=0;i<T.vexnum;i++){S.vex[i]=T.vex[i];for(j=0;j<T.vexnum;j++)S.arcs[i][j].adj=T.arcs[i][0].adj*T.arcs[0][j].adj+T.arcs[i][1].adj* T.arcs[1][j].adj+T.arcs[i][2].adj*T.arcs[2][j].adj+T.arcs[i][3].adj*T.a rcs[3][j].adj;}return S;}MGraph changdu2(MGraph Q,MGraph T){MGraph S;S.arcnum=T.arcnum;S.vexnum=T.vexnum;int i,j;for(i=0;i<T.vexnum;i++){S.vex[i]=T.vex[i];for(j=0;j<T.vexnum;j++)S.arcs[i][j].adj=Q.arcs[i][0].adj*T.arcs[0][j].adj+Q.arcs[i][1].adj* T.arcs[1][j].adj+Q.arcs[i][2].adj*T.arcs[2][j].adj+Q.arcs[i][3].adj*T.a rcs[3][j].adj;}return S;}int tonglu(MGraph G,int length,char v1,char v2){MGraph S;S=changdu(G);int i,j;for(i=0;i<length-2;i++)S=changdu2(S,G);cout<<"长度为"<<length<<"的关系矩阵:"<<endl;for(i=0;i<G.vexnum;i++){for(j=0;j<G.vexnum;j++)cout<<S.arcs[i][j].adj<<" ";cout<<endl;}i=LocateVex(S,v1);j=LocateVex(S,v2);return S.arcs[i][j].adj;}void main(){MGraph G;CreatDG(G);du(G);int i;char v2,v4,v3;cout<<"请输入长度以及端点v2,v4:";cin>>i>>v2>>v4;cout<<v2<<"与"<<v4<<"长度为"<<i<<"的通路有"<<tonglu(G,i,v2,v4)<<"条!"<<endl;cout<<"请输入长度以及端点v3:";cin>>i>>v3;cout<<"长度为"<<i<<"的"<<v3<<"回路有"<<tonglu(G,i,v3,v3)<<"条!"<<endl;}三、结论1、实验结果2、分析讨论通过本次实验练习,我近一步深入了解了熟悉图在计算机中的矩阵表示,而且根据输入的整数对,输出一个图形的邻接矩阵,并求出各结点的出度和入度,同时加强对图知识的理解、应用和运用能力。
离散数学实验二:命题逻辑(2).
void main()
{
char x = '0', y = '0', n = '0', n1, n2, n3;
int t = 0;
math math1(x, y);
loop:
{
cin.clear();
cin.sync();
math1.fengefu();
math1.caidan();
while (n)
cout << "0 1 0" << endl;
cout << "1 0 0" << endl;
cout << "1 1 1" << endl;
cout << "请选择(1-6)查看真值表:" ;
}
void math::fengefu()
{
cout << "########################################################################" << endl;
2.合取(P∧Q)
3.析取(P∨Q)
4.条件(P→Q)
5.双条件(P←→Q)
6.继续/退出(y/n)
****************************************************************
5.【算法描述】
真值表:列出命题公式真假值的表,通常以1表示真,0 表示假。命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《离散数学》
实验报告
学院
专业
指导教师
学号
姓名
提交日期
实验二命题公式的等值演算与真值表
一.实验目的
熟悉逻辑运算否定、合取、析取、蕴含、等价规则,利用程序语言实现命题公式的真值表运算,使其与命题的等值演算结果相同。
二.实验内容
(一)预测比赛名次
写出下列题目的命题公式,并应用程序语言实现命题公式的真值表以求解问题。
有,
,四人参加百米赛跑,观众甲、乙、丙预测比赛的名次为:
A,
C
B
D
甲说:C第一,B第二;
乙说:C第二,D第三;
丙说:A第二,D第四;
比赛结束后发现甲、乙、丙每人的预测都只对一半,试问实际名次如何(假定没有并列者)?
(二)筛选产品方案
某工厂要从A 、 B 、 C 、 D 、 E 五种新型产品中选择几种产品投产,根据该厂的实际生产条件及市场需求的调查分析结果,选择时必须满足以下条件:
(1) 若选择A,则必须选择B;
(2) D 、E两种产品至少选择一种;
(3) B 、C两种产品只选择一种;
(4) C 、D两种产品都选择或都不选择;
(5) 若选E,则必须选择A和B。
请用命题公式真值表法为该厂做出选择方案。
三. 实验过程
(一)预测比赛名次
1. 算法分析:
列出命题公式,说明程序设计思路。
2. 程序代码:
3.实验数据及结果分析
列出求解的真值表,并筛选出正确答案。
(二)筛选产品方案
1. 算法分析:
列出命题公式,说明程序设计思路。
2. 程序代码:
3.实验数据及结果分析
列出求解的真值表,并筛选出正确答案。