离散数学实验报告.docx
- 文档编号:29814858
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:17
- 大小:335.97KB
离散数学实验报告.docx
《离散数学实验报告.docx》由会员分享,可在线阅读,更多相关《离散数学实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
离散数学实验报告
安徽新华学院
“离散数学”实验报告
(1)
专业计算机科学与技术
班级10计科三班A组
学号1042157108
姓名凌谢翩
2011.6.2.
小组介绍
队名
组长
成员(学号)
口号
给
力
青
春
凌
谢
翩
韩茜1042157102
青
春
奋
斗
未
来
何业祥1042157103
孔磊磊1042157104
任淑梅1042157113
王立军1042157118
一.实验目的;
本实验课程是信息专业学生的一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。
二.实验内容;
1.从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。
(A)
2.求任意一个命题公式的真值表(B)
详细说明:
1.逻辑联接词的运算
本实验要求我们利用C/C++语言,实现二元合取、析取、条件和双条件表达式的计算。
充分利用联接词和逻辑运算符之间的相似性实现程序功能。
2.求任意一个命题公式的真值表
本实验要求我们利用C/C++语言,实现任意输入公式的真值表计算。
一般我们将公式中的命题变元放在真值表的左边,将公式的结果放在真值表的右边。
命题变元可用数值变量表示,合适公式的表示及求真值表转化为逻辑运算结果;算法逻辑如下:
(1)任意设计一个真值判断表达式,并使其赋值计算
(2)计算模拟器中所对应的一组真值指派下合式公式的真值。
(3)输出真值表中对应于模拟器所给出的一组真值指派及这组真值指派所对应的一行真值。
(4)如果所输出的为真值,则页面提示“真命题”
三.实验环境;
使用visualC++6.0为编程软件,采用C++语言为编程语言实现。
四.实验原理和实现过程(算法描述);
1.实验原理
(1)合取:
二元命题联结词。
将两个命题P、Q联结起来,构成一个新的命题P∧Q,读作P、Q的合取,也可读作P与Q。
这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P=T,Q=T时方可P∧Q=T,而P、Q只要有一为F则P∧Q=F。
这样看来,P∧Q可用来表示日常用语P与Q,或P并且Q。
(2)析取:
二元命题联结词。
将两个命题P、Q联结起来,构成一个新的命题P∨Q,读作P、Q的析取,也可读作P或Q。
这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P=F,Q=F时方可P∨Q=F,而P、Q只要有一为T则P∨Q=T。
这样看来,P∨Q可用来表示日常用语P或者Q。
(3)条件:
二元命题联结词。
将两个命题P、Q联结起来,构成一个新的命题P→Q,读作P条件Q,也可读作如果P,那么Q。
这个新命题的真值与构成它的命题P、Q的真值间的关系为只有当两个命题变项P=T,Q=F时方可P→Q=F,其余均为T。
(4)双条件:
二元命题联结词。
将两个命题P、Q联结起来,构成一个新的命题P←→Q,读作P双条件于Q。
这个新命题的真值与构成它的命题P、Q的真值间的关系为当两个命题变项P=T,Q=T时方可P←→Q=T,其余均为F。
(5)真值表:
表征逻辑事件输入和输出之间全部可能状态的表格。
列出命题公式真假值的表。
通常以1表示真,0表示假。
命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法。
真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。
(6)主范式:
主析取范式:
在含有n个命题变元的简单合取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项。
由若干个不同的小项组成的析取式称为主析取范式;与A等价的主析取范式称为A的主析取范式。
任意含n个命题变元的非永假命题公式A都存在与其等价的主析取范式,并且是惟一的。
主合取范式:
在含有n个命题变元的简单析取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。
由若干个不同的大项组成的合取式称为主合取范式;与A等价的主合取范式称为A的主合取范式。
任意含n个命题变元的非永真命题公式A都存在与其等价的主合取范式,并且是惟一的。
2.实验过程
(1)A题部分,首先是对各个输入量的处理,要确定输入的为0或1,否则则为出错,接下来就是运算处理,在C语言中本身支持的有与或非这三种,可以用!
&&,||来表示,而在这个实验中,不是与或非的可以通过转化而变为与或非的形式,具体流程图如下:
(2)B,C题部分,首先是输入一个合理的式子,然后从式子中查找出变量的个数,开辟一个二进制函数,用来生成真值表,然后用函数运算,输出结果,并根据结果归类给范式,最后输出范式。
函数部分,主要是3个函数,一个为真值表递加函数,通过二进制的加法原理递进产生,一个为分级运算函数,这个函数是通过判断括号,选出最内级括号的内容执行运算函数,这样一级一级向外运算,最后得出最终结果,剩下一个为主运算函数,按照运算符号的优先级按顺序进行运算,如先将所有非运算运算完,再执行与运算。
如此运算。
主函数
五.实验数据及结果分析;
题A:
进入界面
正确运算结果
错误控制和输入正确后
退出
结果分析:
这道题比较简单,主要是读取值并进行计算,同时要注意输入的值要是0或1,如果不是,则进行错误提示,并进行重新输入。
题B:
欢迎界面
非运算
与运算
或运算
蕴含运算
等值运算
综合运算
带括号的综合运算
结果分析:
B题由于涉及内容较窄,无我们组决定以一个比较简单的程序将其实现。
这个程序从功能上来说,达到了题目要求的各个功能,可以根据所给函数式的情况判断真值。
所以,总体上来说,虽然还有一些不完善的部分,但是整体是比较可以的。
六.源程序清单;
A题部分源代码:
#include
voidmain()
{
charp,q,t;
intp1,q1;
cout<<"输入p,q的真值(F或T)"< mm: cin>>p>>q; if((p! ='T')&&(p! ='F')) cout<<"所输入的p是非法字符"< if((q! ='T')&&(q! ='F')) cout<<"所输入的q是非法字符"< gotomm; if(p=='F') p1=0; else p1=1; if(q=='F') q1=0; else q1=1;//以下为计算 if(p1|q1) t='T'; else t='F'; cout<<"p析取q为"< if(p1&q1) t='T'; else t='F'; cout<<"p合取q为"< if((! p1)|q1) t='T'; else t='F'; cout<<"p条件q为"< if(p1==q1) t='T'; else t='F'; cout<<"p双条件q为"< } B题部分源代码: #include voidmain() { floata,b,sum=0; cout<<"请输入一个表达式: "; cin>>a; cin>>b; sum=a+b; cout< if(sum==sum) { cout<<"真命题"< cout<<"sum="< } else cout<<"假命题"< } 七.其他收获和体会。 这个实验分2个题,其实我觉得这两个题都不是很难,只要思路清晰,基本上都可以单独做出来。 A类题其实还是很简单的,最主要的是要有一个清晰的思路。 比如说: 在实现析取、合取等真值时,由于没有考虑到输入值的限制问题,所以,在调试程序的时候,无论输入什么样的数值,所得到得结果都是“T”(即所显示的全是真值)。 经过多次失败后,在指导老师李敬明老师的帮助下,最终将这个问题解决。 利用“goto返回运算”来解决,也许在个别功能上来说有一些不完美,但是能独自做成这个样子,对我来说已经是成功啦。 也许是很久没看C++语言了,导致很多基本的语句都已经并不熟练了,通过这次实验,让我从一定程度上找回了一点以前做C++课程设计时的感觉。 在编程过程中,最重要的其实是对细节方面的把握。 A类题的逻辑抽象和编程语言的表达都非常基础,所以能不能把程序的细节考虑完善是非常重要的,有没有输入提示,错误提示等等,这些东西是考验一个人考虑问题的全面性的一个方式,我们应该从现在就养成这样良好的习惯。 总的来说,本次实验总体上是比较成功的,也让我学到了很多东西。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散数学 实验 报告