离散数学1命题逻辑.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
离散数学1命题逻辑

南京工程学院 实 验 报 告 课程名称 离散数学 实验项目名称 命题逻辑 实验学生班级 K网络工程121 实验学生姓名 王云峰 学    号 240121525 实验时间 11月1日 实验地点 信息楼 实验成绩评定 指导教师签字   年 月 日 一、实验目的和要求 真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。 本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。 二、实验主要仪器和设备 计算机 三、实验方法与步骤(需求分析、算法设计思路、流程图等) (1)求任意一个命题公式的真值表。 (2)利用真值表求任意一个命题公式的主范式。 (3)利用利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。 真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。n个命题变元的每组赋值的生成算法可基于这种思想。 含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。 为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、、|、-、+来表示。 算符之间的优先关系如表1-32所示: 表1-32 算符优先级 + - | ! ( ) @ + - | ! ( ) @ > < < < < < > > > > < < < < > > > > > < < < > > > > > > < < > > > > > > > < > > < < < < < < = E > > > > > E > > < < < < < < E = “〉”代表当前的优先级高于比较对象,可以进行运算 “”代表当前的优先级低于比较对象,不可以进行运算,必须等待 “=”一般是一对刮号,可以一起消除 “E”代表表达式错误,一般不会出现 为实现算符优先算法,我们采用两个工作栈。一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。算法的基本思想是: (1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素; (2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次); (3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。 真值表进行逻辑推理。 四、实验原始纪录(源程序、数据结构等) #include stdio.h #includemath.h #includestring.h typedef struct optrstack { char oper[30]; int loc; }OPStack; void initop(OPStack op) { int i; op.loc=0; for(i=0;i30;i++)op.oper[i]=\0; } void push(OPStack op,char c) { op.oper[op.loc++]=c; } char pop(OPStack op) { return(op.oper[--op.loc]); } typedef struct opndstack { int oper[60]; int loc; }OPndStack; void initopnd(OPndStack op) { int i; op.loc=0 ; for(i=0;i30;i++)op.oper[i]=\0; } void pushopnd(OPndStack op, int c) { op.oper[op.loc++]=c; } int popo

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档