您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 54离散数学上机实验报告
《离散数学》实验报告姓名:学号:班级:2实验一连结词逻辑运算一.实验目的实现二元合取、析取、蕴涵和等价表达式的计算。熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。二.实验内容从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。三.实验环境使用MicrosoftVisualC++6.0为编程软件,采用称C/C++语言为编程语言实现。四.实验过程1.算法分析:合取:p,q都为1的时候为1,其他为0析取:p,q都为0的时候为0,其他为1蕴含:p为1,q为0时为0,其他为1等价:p,q同真同假2.程序代码:#includestdio.hintmain(){intP,Q,a,b,c,d,p,q;printf(P的值);for(P=0;P2;P++){for(Q=0;Q2;Q++)printf(\t%d,P);}printf(\nQ的值);for(P=0;P2;P++){for(Q=0;Q2;Q++)printf(\t%d,Q);}printf(\n非P的值);for(P=0;P2;P++){for(Q=0;Q2;Q++){if(P==0)/*判断非P的值*/3p=1;elsep=0;printf(\t%d,p);}}printf(\n非Q的值);for(P=0;P2;P++){for(Q=0;Q2;Q++){if(Q==1)/*判断非Q的值*/q=0;elseq=1;printf(\t%d,q);}}printf(\nP与Q的值);for(P=0;P2;P++){for(Q=0;Q2;Q++){if(Q==0||P==0)/*判断P与Q的值*/a=0;elsea=1;printf(\t%d,a);}}printf(\nP或Q的值);for(P=0;P2;P++){for(Q=0;Q2;Q++){if(Q==1||P==1)/*判断P或Q的值*/b=1;elseb=0;printf(\t%d,b);}}printf(\nP蕴含Q的值);for(P=0;P2;P++)4{for(Q=0;Q2;Q++){if(P==1&&Q==0)/*判断P蕴含Q的值*/c=0;elsec=1;printf(\t%d,c);}}printf(\nP等价Q的值);for(P=0;P2;P++){for(Q=0;Q2;Q++){if(P==Q)/*判断P等价Q的值*/d=1;elsed=0;printf(\t%d,d);}}printf(\n);return0;}3.实验数据及结果分析:5实验二关系的复合运算及逆运算一.实验目的熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。二.实验内容利用矩阵求解有限集上的复合关系和逆关系。三.实验过程1.算法分析:复合运算就将两个用矩阵表示的关系进行复合,即在第一个矩阵中寻找值为1的元素坐标(i,j),在第二个矩阵第j行寻找值为1的元素,若有,且坐标为(j,k),则产生的新的关系的矩阵中坐标为(i,k)的元素值为1。逆运算就是将用矩阵中值为1的元素坐标(i,j)对调,产生新的关系的矩阵中坐标为(j,i)的元素值为1。2.程序代码://关系的复合运算#includeiostreamusingnamespacestd;intmain(){inta[100][100],b[100][100],c[100][100],i,j,k,n;cout请输入集合X中元素的个数:;cinn;cout请输入关系矩阵Mr的格式:endl;for(i=0;in;i++){for(j=0;jn;j++)cina[i][j];}cout请输入关系矩阵Ms的格式:endl;for(i=0;in;i++){for(j=0;jn;j++)cinb[i][j];}for(i=0;in;i++)//进行复合运算{for(j=0;jn;j++)if(a[i][j]==1)for(k=0;kn;k++)if(b[j][k]==1)c[i][k]=1;6}for(i=0;in;i++){for(j=0;jn;j++)if(c[i][j]!=1)c[i][j]=0;}coutendl;cout关系矩阵Mr与Ms的复合运算结果是:endl;for(i=0;in;i++){for(j=0;jn;j++)coutc[i][j];coutendl;}return0;}//关系的逆运算#includestdio.hintmain(){inta[100][100],b[100][100],n,i,j,index;printf(请输入集合X中元素的个数:);scanf(%d,&n);printf(请输入关系矩阵Mr的格式:\n);for(i=0;in;i++){for(j=0;jn;j++)scanf(%d,&a[i][j]);}for(i=0;in;i++)//进行逆运算{for(j=0;jn;j++)if(a[i][j]==1){index=i;i=j;j=index;b[i][j]=1;}}for(i=0;in;i++){7for(j=0;jn;j++)if(b[i][j]!=1)b[i][j]=0;}printf(\n关系矩阵Mrc为:\n);for(i=0;in;i++){for(j=0;jn;j++)printf(%d,b[i][j]);printf(\n);}return0;}3.实验数据及结果分析:8实验三关系的闭包运算一.实验目的熟悉关系的闭包运算,编程实现关系闭包运算算法。二.实验内容利用矩阵求解有限集上给定关系的自反、对称和传递闭包。三.实验过程1.算法分析:在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法);传递闭包则直接根据t(R)=R+。2.程序代码:#includeiostreamusingnamespacestd;voiddeliver(intx[100][100],inty[100][100],intn);intmain(){inti,j,n,R[100][100],r[100][100],s[100][100],t[100][100];cout请输入矩阵的阶:;cinn;coutendl请输入R的关系矩阵:endl;for(i=0;in;i++)//输入R的关系矩阵{for(j=0;jn;j++)cinR[i][j];}for(i=0;in;i++)//将R的关系矩阵赋值给r,s,t{for(j=0;jn;j++){r[i][j]=R[i][j];s[i][j]=R[i][j];t[i][j]=R[i][j];}}for(i=0;in;i++)//自反闭包运算{if(r[i][i]==0)r[i][i]=1;}coutendl自反闭包关系矩阵r(R):endl;9for(i=0;in;i++)//输出r的关系矩阵{for(j=0;jn;j++)coutr[i][j];coutendl;}for(i=0;in;i++)//对称闭包运算{for(j=0;ji;j++){if(s[i][j]==1||s[j][i]==1){s[i][j]=1;s[j][i]=1;}}}coutendl对称闭包关系矩阵s(R):endl;for(i=0;in;i++)//输出s的关系矩阵{for(j=0;jn;j++)couts[i][j];coutendl;}deliver(t,R,n);//关于传递闭包的函数return0;}voiddeliver(intx[100][100],inty[100][100],intn)//关于传递闭包的函数{inti,j,k,m,z[100][100];for(m=0;mn;m++){for(i=0;in;i++){for(j=0;jn;j++){if(x[i][j]==1){for(k=0;kn;k++)if(y[j][k]==1)//进行复合运算z[i][k]=1;}}10}for(i=0;in;i++){for(j=0;jn;j++)if(z[i][j]!=1)z[i][j]=0;}for(i=0;in;i++){for(j=0;jn;j++){x[i][j]=x[i][j]+z[i][j];//进行传递闭包运算}}for(i=0;in;i++){for(j=0;jn;j++)if(x[i][j]!=0)x[i][j]=1;}}coutendl传递闭包关系矩阵t(R):endl;for(i=0;in;i++)//输出x的关系矩阵{for(j=0;jn;j++)coutx[i][j];coutendl;}}113.实验数据及结果分析:12实验四图的矩阵表示一.实验目的熟悉图的矩阵表示方法——邻接矩阵、可达矩阵和关联矩阵。二.实验内容利用邻接矩阵得到的可达矩阵来求解图的连通性质。三.实验过程1.算法分析:可达矩阵表示图中任意两个节点间的可达关系,而邻接矩阵表示图中任意两个节点的邻接关系。求解邻接矩阵𝐴1,𝐴2,𝐴3……𝐴𝑛可知任意两个节点之间是否存在互相连通的路,从而判断是否可达。2.程序代码:#includeiostreamusingnamespacestd;voidmain(){inti,j,k,n,m,a[100][100],b[100][100],c[100][100],d[100][100];cout请输入矩阵阶数:;cinn;cout请输入邻接矩阵a:endl;for(i=0;in;i++){for(j=0;jn;j++){cina[i][j];b[i][j]=a[i][j];}}for(i=0;in;i++)//矩阵d为零矩阵{for(j=0;jn;j++)d[i][j]=0;}for(m=0;mn;m++){for(i=0;in;i++)//矩阵c为零矩阵{for(j=0;jn;j++)c[i][j]=0;}for(k=0;kn;k++)13{for(i=0;in;i++)for(j=0;jn;j++){c[k][i]=c[k][i]+b[k][j]*a[j][i];//矩阵的乘法运算}}for(i=0;in;i++){for(j=0;jn;j++){b[i][j]=c[i][j];d[i][j]=d[i][j]+b[i][j];}}coutm为m+1,矩阵b为:endl;for(i=0;in;i++){for(j=0;jn;j++)coutb[i][j];coutendl;}}for(i=0;in;i++){for(j=0;jn;j++)if(d[i][j]!=0)d[i][j]=1;}cout可达矩阵d为:endl;for(i=0;in;i++){for(j=0;jn;j++)coutd[i][j];coutendl;}}143.实验数据及结果分析:
本文标题:54离散数学上机实验报告
链接地址:https://www.777doc.com/doc-4855024 .html