离散数学实验报告_第1页
离散数学实验报告_第2页
离散数学实验报告_第3页
离散数学实验报告_第4页
离散数学实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-1-《离散数学》实验报告学院软件学院专业计算机科学与技术指导教师刘冰学号11999008姓名曹春亭提交日期2012-12-9实验一连结词逻辑运算一.实验目的实现二元合取、析取、蕴涵和等价表达式的计算。熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。二.实验内容从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的的真值。要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。三.实验过程1.算法分析:程序采用java语言,以‘/\’表示合取,以‘\/’表示析取,以‘->’表示蕴含,以‘‘表示等价,用多重选择判断句分别实现功能。2.程序代码: importstaticjava.lang.System.*;importjava.util.*;publicclassLogicOperation{ publicstaticvoidmain(Stringargs[]) { Scannerin=newScanner(System.in); booleanstate=true; while(state) { Operatione=newOperation(); e.dataInput(); e.logicJudge(); out.println("是否继续进行运算?(y(Y)/n(N))"); Strings=in.nextLine(); if(s.charAt(0)=='n'||s.charAt(0)=='N') state=false; } }}classOperation{ Scannerin=newScanner(System.in); privatebooleanstate=true; privatebooleanm; privatebooleann; Operation() { } publicvoiddataInput() { out.println("欢迎使用逻辑运算程序"); out.println("请输入你要进行逻辑运算的两个值(0或1),以回车确认。"); intp,q; out.print("p="); p=in.nextInt(); out.print("q="); q=in.nextInt(); while(state) { if((p==0||p==1)&&(q==0||q==1)) { state=false; if(p==1) m=true; else m=false; if(q==1) n=true; else n=false; } else { out.println("您输入的数据不合法,请从新输入:"); out.print("p="); p=in.nextInt(); out.print("q="); q=in.nextInt(); } } } publicvoidlogicJudge() { if(m==n)//计算合取表达式 { if(m==true) out.println("合取:p/\\q=1"); else out.println("合取:p/\\q=0"); } else out.println("合取:p/\\q=0"); if(m==true||n==true)//计算析取表达式 out.println("析取:p\\/q=1"); else out.println("析取:p\\/q=0"); if(m==true&&n==false)//计算蕴含表达式 out.println("蕴含:p-》q=0"); else out.println("蕴含:p-》q=1"); if(m==n) out.println("恒等:p《-》q=1"); else out.println("恒等:p《-》q=0"); }}3.实验数据及结果分析;

实验二关系的闭包运算一、实验目的熟悉关系的闭包运算,编程实现关系闭包运算算法。一、实验内容利用矩阵求解有限集上给定关系的自反、对称和传递闭包。三.实验过程程序采用java语言,以二维数组表示矩阵。1.算法分析: 在三种闭包中自反和对称闭包的求解很容易,对矩阵表示的关系,其自反闭包只要将矩阵的主对角线全部置为1就可;对称闭包则加上关系的转置矩阵(逻辑加法);传递闭包则有两种算法(二选一即可):算法1:直接根据计算,过程略。算法2:Warshall算法(1962)设R的关系矩阵为M(1)令矩阵A=M(2)置i=1(3)对所有的j,若A[j,i]=1,则对于k=1,2,…,n,令A[j,k]=A[j,k]+A[i,k]注:此处为逻辑加,可以使用运算符||(4)i=i+l.(5)若i≤n,则转到(3),否则结束.流程图2.程序代码: importstaticjava.lang.System.*;importjava.util.*;publicclassClosureOperation{ publicstaticvoidmain(Stringargs[]) { Scannerin=newScanner(System.in); Closuree=newClosure(); intz; out.println("请输入你想计算的闭包:1为自反闭包,2为对称闭包,3为传递闭包。"); out.print("z="); z=in.nextInt(); do { switch(z) { case1:e.reflexiveClosure();out.println("谢谢使用!");z=0;break; case2:e.symmetryClosure();out.println("谢谢使用!");z=0;break; case3:e.deliverClosure();out.println("谢谢使用!");z=0;break; default:out.println("您输入的数据有误,请输入你想计算的闭包:1为自反闭包,2为对称闭包,3为传递闭包。");out.print("z=");z=in.nextInt();if(z==0)z=-1; } }while(z!=0); }}classClosure{ Scannerin=newScanner(System.in); privateint[][]matrix; privateintdimension; Closure() { out.println("欢迎使用关系闭包运算"); out.println("请输入矩阵的维数(最大不超过10)"); dimension=in.nextInt(); matrix=newint[dimension][dimension]; out.println("请输入您的关系矩阵,标准输入格式:"); out.println("1111"+"\n"+"0000"+"\n"+"1111"+"\n"+"0000"); for(inti=0;i<dimension;i++) { out.print("请输入第"+(i+1)+"行的元素:"); for(intj=0;j<dimension;j++) matrix[i][j]=in.nextInt(); } } publicvoidreflexiveClosure() { inti=0,j=0; int[][]a=newint[dimension][dimension]; for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) a[i][j]=matrix[i][j]; for(i=0,j=0;i<dimension;i++,j++) a[i][j]=1; out.println("所得的自反闭包关系矩阵:"); output(a); } publicvoidsymmetryClosure() { inti=0,j=0; int[][]a=newint[dimension][dimension]; for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) a[i][j]=matrix[i][j]; int[][]b=newint[dimension][dimension]; for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) b[j][i]=a[i][j]; for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) { a[i][j]+=b[i][j]; if(a[i][j]==2) a[i][j]=1; } out.println("所得的对称闭包关系矩阵:"); output(a); } publicvoiddeliverClosure() { inti=0,j=0,p=0; int[][]a=newint[dimension][dimension]; int[][]b=newint[dimension][dimension]; int[][]ends=newint[dimension][dimension]; for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) a[i][j]=b[i][j]=ends[i][j]=matrix[i][j]; intsum=0; for(intm=0;m<dimension-1;m++) { for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) { sum=0; for(p=0;p<dimension;p++) sum+=a[i][p]*matrix[p][j]; if(sum!=0) b[i][j]=1; else b[i][j]=0; } for(intx=0;x<dimension;x++) for(inty=0;y<dimension;y++) { a[x][y]=b[x][y]; } for(i=0;i<dimension;i++) for(j=0;j<dimension;j++) { ends[i][j]+=b[i][j]; if(ends

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论