离散数学上机实验报告.docx
- 文档编号:10400100
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:19
- 大小:182.84KB
离散数学上机实验报告.docx
《离散数学上机实验报告.docx》由会员分享,可在线阅读,更多相关《离散数学上机实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
离散数学上机实验报告
离散数学上机实验报告
《离散数学》
实验报告
姓名:
学号:
班级:
{
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("\nP与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的格式:
"< for(i=0;i { for(j=0;j cin>>a[i][j]; } cout<<"请输入关系矩阵Ms的格式: "< for(i=0;i { for(j=0;j cin>>b[i][j]; } for(i=0;i { for(j=0;j if(a[i][j]==1) for(k=0;k if(b[j][k]==1) c[i][k]=1; } for(i=0;i { for(j=0;j if(c[i][j]! =1) c[i][j]=0; } cout< cout<<"关系矩阵Mr与Ms的复合运算结果是: "< for(i=0;i { for(j=0;j cout< 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 { for(j=0;j scanf("%d",&a[i][j]); } for(i=0;i { for(j=0;j if(a[i][j]==1) { index=i; i=j; j=index; b[i][j]=1; } } for(i=0;i { for(j=0;j if(b[i][j]! =1) b[i][j]=0; } printf("\n关系矩阵Mrc为: \n"); for(i=0;i { for(j=0;j printf("%d",b[i][j]); printf("\n"); } return0; } 3.实验数据及结果分析: 实验三 关系的闭包运算 一.实验目的 熟悉关系的闭包运算,编程实现关系闭包运算算法。 二.实验内容 利用矩阵求解有限集上给定关系的自反、对称和传递闭包。 三.实验过程 1.算法分析: 在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法);传递闭包则直接根据t(R)=R+。 2.程序代码: #include usingnamespacestd; 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<<"请输入矩阵的阶: "; cin>>n; cout< "< for(i=0;i { for(j=0;j cin>>R[i][j]; } for(i=0;i { for(j=0;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< cout< } for(i=0;i { for(j=0;j { if(s[i][j]==1||s[j][i]==1) { s[i][j]=1; s[j][i]=1; } } } cout< "< for(i=0;i { for(j=0;j cout< cout< } deliver(t,R,n);//关于传递闭包的函数 return0; } voiddeliver(intx[100][100],inty[100][100],intn)//关于传递闭包的函数 { inti,j,k,m,z[100][100]; for(m=0;m { for(i=0;i { for(j=0;j { if(x[i][j]==1) { for(k=0;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 { for(j=0;j { x[i][j]=x[i][j]+z[i][j];//进行传递闭包运算 } } for(i=0;i { for(j=0;j if(x[i][j]! =0) x[i][j]=1; } } cout< "< for(i=0;i { for(j=0;j cout< cout< } } 3.实验数据及结果分析: 实验四 图的矩阵表示 一.实验目的 熟悉图的矩阵表示方法——邻接矩阵、可达矩阵和关联矩阵。 二.实验内容 利用邻接矩阵得到的可达矩阵来求解图的连通性质。 三.实验过程 1.算法分析: 可达矩阵表示图中任意两个节点间的可达关系,而邻接矩阵表示图中任意两个节点的邻接关系。 求解邻接矩阵 可知任意两个节点之间是否存在互相连通的路,从而判断是否可达。 2.程序代码: #include usingnamespacestd; voidmain() { inti,j,k,n,m,a[100][100],b[100][100],c[100][100],d[100][100]; cout<<"请输入矩阵阶数: "; cin>>n; cout<<"请输入邻接矩阵a: "< for(i=0;i { for(j=0;j { cin>>a[i][j]; b[i][j]=a[i][j]; } } for(i=0;i { for(j=0;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 { for(i=0;i for(j=0;j { c[k][i]=c[k][i]+b[k][j]*a[j][i];//矩阵的乘法运算 } } for(i=0;i { for(j=0;j { b[i][j]=c[i][j]; d[i][j]=d[i][j]+b[i][j]; } } cout<<"m为"< "< for(i=0;i { for(j=0;j cout< cout< } } for(i=0;i { for(j=0;j if(d[i][j]! =0) d[i][j]=1; } cout<<"可达矩阵d为: "< for(i=0;i { for(j=0;j cout< cout< } } 3.实验数据及结果分析:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散数学 上机 实验 报告