您好,欢迎访问三七文档
标准实验报告(实验)课程名称离散数学实验报告学生姓名:学号:指导教师:实验地点:实验时间:一、实验室名称:信息与软件学院实验室二、实验项目名称:逻辑学家会议问题三、实验学时:2四、实验原理:数理逻辑研究的中心问题是推理,而推理的前提和结论都是表达判断的陈述句(DeclcerativeSentence),因而,表达判断的陈述句构成了推理的基本单位,于是,我们称能判断真假的陈述句为命题。为此,我们可以说:命题逻辑研究的对象是命题。五、实验目的:1.复习教材中关于复合命题符号化以及真值表的内容;2.掌握在VS2010环境编辑、编译、连接、和运行C程序的方法和过程;六、实验内容:将如下题目更改为C语言程序:1.A,B两人至少有1人参加会议。2.A,E,F3人中有2人参加会议。3.B和C两人决定,要么两人都去,要么两人都不去。4.A,D两人中只1人参加会议。5.C,D两人中也只要1人参加会议。6.如果D不去,那么E也决定不去求,参加人数。七、实验器材(设备、元器件):PC硬件要求:CPUPII以上,64M内存,1OOM硬盘空间即可。软件要求:Windows2000/XP/2003。八、实验步骤:1.复习教材中关于复合命题符号化以及真值表的内容2.将实验内容中的参加会议的6个条件写成复合命题;1)“A,B两人至少有1人参加会议”AB2)“A,E,F3人中有2人参加会议”(AEF)(AEF)(AEF)3)“B和C两人决定,要么两人都去,要么两人都不去”(BC)(BC)4)“A,D两人中只1人参加会议”(AD)(AD)5)“C,D两人中也只要1人参加会议”(CD)(CD)6)“如果D不去,那么E也决定不去”DE3.将第二步中得到的复合命题转化成函数形式,即每个函数根据输入值来判定是否满足条件;定义结构:structcomp{charkey;booljudge;boolchange;};以下是每个条件函数化的代码:if(human[i].change==0){human[i].judge=rand()%2;human[i].change=1;}if(human[0].judge==0){human[1].judge=1;human[1].change=1;}if(human[0].change==1&&human[4].change==1){if(human[0].judge==1&&human[4].judge==1){human[5].judge=0;human[5].change=1;}if(human[0].judge!=1&&human[4].judge==1){human[5].judge=1;human[5].change=1;}if(human[0].judge==1&&human[4].judge!=1){human[5].judge=1;human[5].change=1;}}if(human[1].change==1){human[2].judge=human[1].judge;human[2].change=1;}if(human[0].change==1){human[3].judge=!human[0].judge;human[3].change=1;}if(human[3].change==1){human[2].judge=!human[3].judge;human[2].change=1;}if(human[3].change==1){human[4].judge=human[3].judge;human[4].change=1;}4.对6位逻辑学家分别指定“去”或“不去”的状态,并调用第三步的函数进行判定,寻找6个条件全部满足的状态;5.编译并运行代码,得出最终结果,打印在计算机屏幕上;6.整个实验源代码如下:#includestdafx.h#includestdlib.h#includestring.hstructcomp{charkey;booljudge;boolchange;};boolJudgement(structcomp*human){inti=0;for(i;i6;i++){if(human[i].change==1){continue;}else{return(0);}}return(1);}int_tmain(intargc,_TCHAR*argv[]){structcomphuman[6];for(inti=0;i6;i++){human[i].key=char(65+i);human[i].change=0;}inti=0;while(Judgement(human)!=1){if(human[i].change==0){human[i].judge=rand()%2;human[i].change=1;}if(human[0].judge==0){human[1].judge=1;human[1].change=1;}if(human[0].change==1&&human[4].change==1){if(human[0].judge==1&&human[4].judge==1){human[5].judge=0;human[5].change=1;}if(human[0].judge!=1&&human[4].judge==1){human[5].judge=1;human[5].change=1;}if(human[0].judge==1&&human[4].judge!=1){human[5].judge=1;human[5].change=1;}}if(human[1].change==1){human[2].judge=human[1].judge;human[2].change=1;}if(human[0].change==1){human[3].judge=!human[0].judge;human[3].change=1;}if(human[3].change==1){human[2].judge=!human[3].judge;human[2].change=1;}if(human[3].change==1){human[4].judge=human[3].judge;human[4].change=1;}i++;}for(inti=0;i6;i++){if(human[i].judge==1){printf(%c,human[i].key);}}return0;}九、实验数据及结果分析:实验截图:从截图可以得出:A、B、C、F参加,D、E不参加。十、实验结论:A、B、C、F参加了这项会议。十一、总结及心得体会:离散数学实验在利用C语言实现的时候,我们需要注意结合那些我们已经学习过的C语言及数据结构相关知识,将书本上的内容由自然语言转化为计算机能够理解,编译可以通过的语言形式。以本题为例我们可以利用结构进行,这对我们以后学习编程是很有利的。通过变成实现离散实验可以加强我们对离散的理解,提高我们对离散数学的认识,是我们更好得学习离散数学。十二、对本实验过程及方法、手段的改进建议:无报告评分:指导教师签字:实验报告学生姓名:学号:指导教师:实验地点:实验时间:一、实验室名称:信息与软件学院实验室二、实验项目名称:海底管道问题三、实验学时:2四、实验原理:该实验的本质是求最小生成树的问题,求解最小生成树的算法很多,其中最主要的是克鲁斯卡尔算法和普里姆算法,根据具体的要求,在算法上作相应完善和补充。五、实验目的:通过与实际相结合的应用问题,熟练应用图论基础知识和程序设计语言来求解最小生成树相关问题;六、实验内容:将如下题目更改为C语言程序:某石油公司在海湾拥有几个石油钻井平台,每个平台开采出的石油需要运往海岸上的炼油厂。要在平台与炼油厂之间建造一个石油运输网络。问管道如何设计,才能使成本最低?下图给出了钻井平台及炼油厂(图的顶点),并给出了经过勘测之后可能的管道铺设走向和建设费用。七、实验器材(设备、元器件):PC硬件要求:CPUPII以上,64M内存,1OOM硬盘空间即可。软件要求:Windows2000/XP/2003。八、实验步骤:海底管道的勘测图是一个带权无向图。由于要求各个钻井平台及炼油厂之间以最小的代码能够通过管道连通,这实际上是一个最小生成树的问题。求解最小生成树的算法很多,其中最主要的是克鲁斯卡尔算法和普里姆算法,在此选用Prim算法,在添加必要辅助函数后实现实验要求。Prim算法:(1)在G中任意选取一个结点v1,置VT={v1},ET=Φ,k=1;(2)在V-VT中选取与某个vi∈VT邻接的结点vj,使得边(vi,vj)的权最小,置VT=VT∪{vj},ET=ET∪{(vi,vj)},k=k+1;(3)重复步骤2,直到k=|V|。实验源代码如下:#includestdafx.h#includestdlib.hstructlistnu{intnumber;intup;aedcbkjifgh218129247136149176};boolSearch(intm,intn,structlistnunode[]){booljudge=false;for(intp=0;pn;p++)if(m==node[p].number)judge=true;returnjudge;}voidprint(intn){switch(n){case0:printf(a);break;case1:printf(b);break;case2:printf(c);break;case3:printf(d);break;case4:printf(e);break;case5:printf(f);break;case6:printf(g);break;case7:printf(h);break;case8:printf(i);break;case9:printf(j);break;case10:printf(k);break;}}voidVisit(structlistnulist[],intn){for(intw=0;wn;w++){for(intx=w;xn;x++){if(list[x].up==w){print(list[w].number);printf(-);print(list[x].number);printf(\n);}}}}int_tmain(intargc,_TCHAR*argv[]){intn=1;intmin;chartem;intp,SUM=0;structlistnunode[11];for(intw=0;w11;w++){node[w].number=0;node[w].up=-1;}printf(Whichdoyouwanttobeginwith?);printf(abcdefghijk\n);scanf(%c,&tem);switch(tem){case0:node[0].number=0;break;case1:node[0].number=1;break;case2:node[0].number=2;break;case3:node[0].number=3;break;case4:node[0].number=4;break;case5:node[0].number=5;break;case6:node[0].number=6;break;case7:node[0].number=7;break;case8:node[0].number=8;break;case9:node[0].number=9;break;case10:node[0].number=10;break;default:break;}intmap[11][11]={{0,2,-1,-1,-1,-1,-1,1,8,-1,-1},{2,0,1,-1,-1,-1,-1,-1,6,-1,
本文标题:离散数学报告
链接地址:https://www.777doc.com/doc-7311765 .html