离散数学实验报告2

合集下载

厦门理工学院离散数学实验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)

“离散数学”实验报告(实验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

中南大学自动化专业离散数学实验报告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

中南大学自动化专业离散数学实验报告2离散数学作为计算机科学与技术专业的基础课程之一,对于培养学生的逻辑思维和抽象思维能力具有重要意义。

本次实验是关于离散数学中的图论部分,通过实际操作和计算来理解和应用图的相关概念和算法。

实验一开始,我们首先学习了图的基本概念和术语,例如顶点、边、路径、回路等。

然后,我们学习了图的表示方法,包括邻接矩阵和邻接表。

通过实际操作,我们发现邻接矩阵适合表示稠密图,而邻接表适合表示稀疏图。

这种不同的表示方法对于图的遍历和搜索算法有着重要的影响。

接下来,我们进行了图的遍历实验。

通过深度优先搜索和广度优先搜索算法,我们可以遍历图中的所有节点,并找到特定节点之间的路径。

深度优先搜索算法通过递归的方式进行,它会首先访问一个节点的所有邻接节点,然后再递归地访问这些邻接节点的邻接节点。

广度优先搜索算法则是通过队列的方式进行,它会首先访问一个节点的所有邻接节点,然后将这些邻接节点按照访问的顺序加入队列中,再逐个出队进行访问。

通过实验,我们发现深度优先搜索算法更适合用于寻找路径,而广度优先搜索算法更适合用于寻找最短路径。

在实验的后半部分,我们学习了最小生成树和最短路径算法。

最小生成树算法用于找到一个连通图的最小生成树,其中包含了连接图中所有节点的最短路径。

我们学习了Prim算法和Kruskal算法,它们分别基于贪心算法和并查集来实现。

通过实验,我们发现Prim算法适合用于稠密图,而Kruskal算法适合用于稀疏图。

最短路径算法用于找到两个节点之间的最短路径,我们学习了Dijkstra算法和Floyd算法。

Dijkstra算法通过贪心策略逐步更新节点之间的最短路径,而Floyd算法则通过动态规划的方式计算所有节点之间的最短路径。

通过实验,我们发现Dijkstra算法适合用于稀疏图,而Floyd算法适合用于稠密图。

总结起来,本次实验让我们深入了解了离散数学中的图论部分,并通过实际操作和计算来应用图的相关概念和算法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.实验数据及结果分析
列出求解的真值表,并筛选出正确答案。

相关文档
最新文档