离散数学上机实验报告.docx

上传人:b****5 文档编号:14926501 上传时间:2023-06-28 格式:DOCX 页数:19 大小:155.84KB
下载 相关 举报
离散数学上机实验报告.docx_第1页
第1页 / 共19页
离散数学上机实验报告.docx_第2页
第2页 / 共19页
离散数学上机实验报告.docx_第3页
第3页 / 共19页
离散数学上机实验报告.docx_第4页
第4页 / 共19页
离散数学上机实验报告.docx_第5页
第5页 / 共19页
离散数学上机实验报告.docx_第6页
第6页 / 共19页
离散数学上机实验报告.docx_第7页
第7页 / 共19页
离散数学上机实验报告.docx_第8页
第8页 / 共19页
离散数学上机实验报告.docx_第9页
第9页 / 共19页
离散数学上机实验报告.docx_第10页
第10页 / 共19页
离散数学上机实验报告.docx_第11页
第11页 / 共19页
离散数学上机实验报告.docx_第12页
第12页 / 共19页
离散数学上机实验报告.docx_第13页
第13页 / 共19页
离散数学上机实验报告.docx_第14页
第14页 / 共19页
离散数学上机实验报告.docx_第15页
第15页 / 共19页
离散数学上机实验报告.docx_第16页
第16页 / 共19页
离散数学上机实验报告.docx_第17页
第17页 / 共19页
离散数学上机实验报告.docx_第18页
第18页 / 共19页
离散数学上机实验报告.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

离散数学上机实验报告.docx

《离散数学上机实验报告.docx》由会员分享,可在线阅读,更多相关《离散数学上机实验报告.docx(19页珍藏版)》请在冰点文库上搜索。

离散数学上机实验报告.docx

离散数学上机实验报告

离散数学上机实验报告

 

 

———————————————————————————————— 作者:

————————————————————————————————日期:

 

《离散数学》

实验报告

 

姓名:

学号:

班级:

 

实验一 连结词逻辑运算

一.实验目的

实现二元合取、析取、蕴涵和等价表达式的计算。

熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。

二.实验内容

从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。

要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。

三.实验环境

使用MicrosoftVisual C++6.0为编程软件,采用称C/C++语言为编程语言实现。

四.实验过程

1.算法分析:

合取:

p,q都为1的时候为1,其他为0 

析取:

p,q都为0的时候为0,其他为1 

蕴含:

p为1,q为0时为0,其他为1 

等价:

p,q同真同假

2.程序代码:

#include

int main()

{

ﻩintP,Q,a,b,c,d,p,q;

printf("P的值");

for(P=0;P<2;P++)

ﻩ{

ﻩfor(Q=0;Q<2;Q++)

ﻩﻩprintf("\t%d",P);

ﻩ}

printf("\nQ的值");

for(P=0;P<2;P++)

ﻩ{

ﻩﻩfor(Q=0;Q<2;Q++)

ﻩprintf("\t%d",Q);

ﻩ}

printf("\n非P的值");

for(P=0;P<2;P++)

{

ﻩfor(Q=0;Q<2;Q++)

ﻩ{

ﻩﻩif(P==0)/*判断非P的值*/

ﻩﻩﻩp=1;

ﻩﻩelse

ﻩﻩp=0;

ﻩﻩﻩprintf("\t%d",p);

ﻩ}

ﻩ}

ﻩprintf("\n 非Q的值");

ﻩfor(P=0;P<2;P++)

ﻩ{

ﻩfor(Q=0;Q<2;Q++)

ﻩﻩ{

ﻩﻩif(Q==1)/*判断非Q的值*/

ﻩﻩﻩq=0;

ﻩelse

ﻩﻩq=1;

ﻩprintf("\t%d",q);

}

ﻩ}

ﻩprintf("\n P与Q的值");

for(P=0;P<2;P++)

ﻩ{

ﻩfor(Q=0;Q<2;Q++)

ﻩ{

ﻩﻩﻩif(Q==0||P==0)/*判断P与Q的值*/

ﻩa=0;

ﻩﻩelse

ﻩﻩa=1;

ﻩprintf("\t%d",a);

ﻩ}

ﻩ}

ﻩprintf("\nP或Q的值");

ﻩfor(P=0;P<2;P++)

ﻩ{

for(Q=0;Q<2;Q++)

ﻩﻩ{

ﻩif(Q==1||P==1)/*判断P或Q的值*/

ﻩﻩﻩb=1;

ﻩelse

ﻩﻩb=0;

ﻩprintf("\t%d",b);

}

ﻩ}

ﻩprintf("\nP蕴含Q的值");

ﻩfor(P=0;P<2;P++)

ﻩ{

ﻩfor(Q=0;Q<2;Q++)

ﻩﻩ{

ﻩﻩif(P==1&&Q==0)/*判断P蕴含Q的值*/

ﻩﻩc=0;

ﻩﻩelse

ﻩc=1;

printf("\t%d",c);

}

printf("\nP等价Q的值");

for(P=0;P<2;P++)

ﻩ{

ﻩﻩfor(Q=0;Q<2;Q++)

ﻩ{

ﻩﻩif(P==Q)/*判断P等价Q的值*/

ﻩd=1;

ﻩﻩelse

ﻩﻩd=0;

ﻩﻩprintf("\t%d",d);

}

ﻩ}

printf("\n");

return0;

}

3.实验数据及结果分析:

实验二关系的复合运算及逆运算

一.实验目的

熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。

二.实验内容

利用矩阵求解有限集上的复合关系和逆关系。

三.实验过程

1.算法分析:

复合运算就将两个用矩阵表示的关系进行复合,即在第一个矩阵中寻找值为1的元素坐标(i,j ),在第二个矩阵第j行寻找值为1的元素,若有,且坐标为(j,k),则产生的新的关系的矩阵中坐标为(i,k)的元素值为1。

逆运算就是将用矩阵中值为1的元素坐标(i,j)对调,产生新的关系的矩阵中坐标为(j,i)的元素值为1。

2.程序代码:

//关系的复合运算

#include

usingnamespacestd;

intmain()

{

inta[100][100],b[100][100],c[100][100],i,j,k,n;

ﻩcout<<"请输入集合X中元素的个数:

";

cin>>n;

cout<<"请输入关系矩阵Mr的格式:

"<<endl;

for(i=0;i<n;i++)

ﻩ{

ﻩﻩfor(j=0;j

ﻩﻩﻩcin>>a[i][j];

}

ﻩcout<<"请输入关系矩阵Ms的格式:

"<

for(i=0;i<n;i++)

ﻩ{

ﻩﻩfor(j=0;j

ﻩcin>>b[i][j];

ﻩ}

ﻩfor(i=0;i<n;i++)  //进行复合运算

ﻩ{

for(j=0;j<n;j++)

ﻩif(a[i][j]==1)

ﻩfor(k=0;k<n;k++)

ﻩﻩif(b[j][k]==1)

ﻩﻩﻩﻩc[i][k]=1;

}

for(i=0;i

ﻩ{

ﻩfor(j=0;j<n;j++)

ﻩif(c[i][j]!

=1)

ﻩc[i][j]=0;

}

ﻩcout<

cout<<"关系矩阵Mr与Ms的复合运算结果是:

"<

for(i=0;i<n;i++)

ﻩ{

ﻩﻩfor(j=0;j

ﻩﻩcout<<c[i][j]<<" ";

ﻩcout<

}

return0;

//关系的逆运算

#include

intmain()

inta[100][100],b[100][100],n,i,j,index;

ﻩprintf("请输入集合X中元素的个数:

");

scanf("%d",&n);

printf("请输入关系矩阵Mr的格式:

\n");

ﻩfor(i=0;i<n;i++)

{

for(j=0;j

ﻩscanf("%d",&a[i][j]);

ﻩ}

for(i=0;i<n;i++)//进行逆运算

ﻩ{

for(j=0;j<n;j++)

ﻩif(a[i][j]==1)

ﻩﻩ{ﻩ

ﻩindex=i;

ﻩi=j;

ﻩﻩj=index;

ﻩﻩb[i][j]=1;

}

}

for(i=0;i<n;i++)

ﻩ{

ﻩfor(j=0;j

ﻩﻩif(b[i][j]!

=1)

ﻩﻩﻩb[i][j]=0;

}ﻩ

ﻩprintf("\n关系矩阵Mrc为:

\n");

for(i=0;i<n;i++)

ﻩ{

for(j=0;j<n;j++)

ﻩﻩprintf("%d",b[i][j]);

ﻩprintf("\n");

ﻩreturn 0;ﻩ

}

3.实验数据及结果分析:

实验三 关系的闭包运算

一.实验目的

熟悉关系的闭包运算,编程实现关系闭包运算算法。

二.实验内容

利用矩阵求解有限集上给定关系的自反、对称和传递闭包。

三.实验过程

1.算法分析:

在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法);传递闭包则直接根据t(R)=R+。

2.程序代码:

#include<iostream>

usingnamespacestd;

void deliver(intx[100][100],inty[100][100],int n);

int main()

{

ﻩinti,j,n,R[100][100],r[100][100],s[100][100],t[100][100];

cout<<"请输入矩阵的阶:

";

cin>>n;

ﻩcout<

"<

for(i=0;i

ﻩ{

for(j=0;j<n;j++)

ﻩﻩﻩcin>>R[i][j];

}

ﻩfor(i=0;i<n;i++)  //将R的关系矩阵赋值给r,s,t

ﻩ{ﻩ

ﻩﻩfor(j=0;j<n;j++)

ﻩ{

ﻩﻩﻩr[i][j]=R[i][j];

ﻩﻩs[i][j]=R[i][j];

ﻩt[i][j]=R[i][j];

ﻩ}

for(i=0;i

{

if(r[i][i]==0)

r[i][i]=1;

}

ﻩcout<

"<

ﻩfor(i=0;i

ﻩ{

ﻩfor(j=0;j

ﻩﻩﻩcout<<r[i][j]<<"";

cout<

}

for(i=0;i<n;i++)    //对称闭包运算

ﻩ{

ﻩfor(j=0;j<i;j++)

ﻩ{

if(s[i][j]==1||s[j][i]==1)

ﻩ{

ﻩﻩs[i][j]=1;

ﻩﻩﻩs[j][i]=1;

ﻩ}

ﻩ}

ﻩ}

cout<<endl<<"对称闭包关系矩阵s(R):

"<

ﻩfor(i=0;i

{

ﻩﻩfor(j=0;j<n;j++)

ﻩﻩcout<<s[i][j]<<"";

ﻩcout<<endl;

}

ﻩdeliver(t,R,n);    //关于传递闭包的函数

ﻩreturn 0;

}

void deliver(intx[100][100],inty[100][100],intn)//关于传递闭包的函数

{

inti,j,k,m,z[100][100];

for(m=0;m

ﻩﻩfor(i=0;i<n;i++) 

ﻩﻩ{

ﻩﻩfor(j=0;j

ﻩ{

ﻩﻩﻩif(x[i][j]==1)

ﻩ{

ﻩfor(k=0;k<n;k++)

ﻩﻩﻩif(y[j][k]==1)  //进行复合运算

ﻩﻩﻩﻩz[i][k]=1;

}

ﻩ}

ﻩ}

ﻩfor(i=0;i

{

ﻩfor(j=0;j

ﻩﻩﻩif(z[i][j]!

=1)

ﻩﻩﻩz[i][j]=0;

ﻩﻩ}

ﻩﻩfor(i=0;i<n;i++)   

ﻩﻩ{ﻩ

ﻩfor(j=0;j<n;j++)

ﻩﻩx[i][j]=x[i][j]+z[i][j]; //进行传递闭包运算

ﻩﻩ}

ﻩﻩ}

ﻩﻩfor(i=0;i

for(j=0;j<n;j++)

ﻩﻩif(x[i][j]!

=0)

ﻩﻩx[i][j]=1;

}

ﻩ}

cout<

"<<endl;

ﻩfor(i=0;i<n;i++) //输出x的关系矩阵

ﻩfor(j=0;j<n;j++)

ﻩﻩﻩcout<<x[i][j]<<"";

ﻩﻩcout<

}

}

 

3.实验数据及结果分析:

实验四 图的矩阵表示

一.实验目的

熟悉图的矩阵表示方法——邻接矩阵、可达矩阵和关联矩阵。

二.实验内容

利用邻接矩阵得到的可达矩阵来求解图的连通性质。

三.实验过程

1.算法分析:

可达矩阵表示图中任意两个节点间的可达关系,而邻接矩阵表示图中任意两个节点的邻接关系。

求解邻接矩阵

可知任意两个节点之间是否存在互相连通的路,从而判断是否可达。

2.程序代码:

#include

using namespacestd;

voidmain()

{

ﻩint i,j,k,n,m,a[100][100],b[100][100],c[100][100],d[100][100];

cout<<"请输入矩阵阶数:

";

cin>>n;

cout<<"请输入邻接矩阵a:

"<<endl;

ﻩfor(i=0;i

for(j=0;j

ﻩﻩcin>>a[i][j];

ﻩﻩb[i][j]=a[i][j];

ﻩﻩ}

ﻩ}

 for(i=0;i<n;i++)//矩阵d为零矩阵

{

ﻩﻩfor(j=0;j<n;j++)

ﻩﻩd[i][j]=0;

ﻩ}

ﻩfor(m=0;m

ﻩ{

for(i=0;i

ﻩﻩ{

ﻩﻩfor(j=0;j

ﻩc[i][j]=0;

}

ﻩﻩfor(k=0;k<n;k++)

ﻩﻩ{

ﻩfor(i=0;i

ﻩﻩﻩfor(j=0;j<n;j++)

ﻩﻩﻩ{

ﻩﻩc[k][i]=c[k][i]+b[k][j]*a[j][i];//矩阵的乘法运算

ﻩﻩ}

ﻩﻩ}

ﻩfor(i=0;i

ﻩ{

ﻩﻩﻩfor(j=0;j<n;j++)

ﻩ{

ﻩb[i][j]=c[i][j];

ﻩd[i][j]=d[i][j]+b[i][j];

ﻩ}

ﻩﻩ}

cout<<"m为"<

"<<endl;

ﻩﻩfor(i=0;i<n;i++)

ﻩfor(j=0;j<n;j++)

ﻩﻩﻩcout<

ﻩcout<

ﻩfor(i=0;i

{

ﻩfor(j=0;j<n;j++)

ﻩﻩif(d[i][j]!

=0)

ﻩd[i][j]=1;

}

cout<<"可达矩阵d为:

"<

ﻩfor(i=0;i

{

for(j=0;j

ﻩﻩcout<<d[i][j]<<"";

ﻩcout<<endl;

ﻩ}

}

3.实验数据及结果分析:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2