离散数学公式类型有哪些(判断公式类型)谢谢各位大佬

九年级数学详见附件谢谢!

在Rt△ACB中,∠=90°,AC=4㎝,BC=3㎝,点P由B出发沿BA方向向点A匀速运动速度为1㎝/s ;点Q由A出发沿AC方向向点C匀速运动,速度为2㎝/s ;连接PQ若设运动的时间为t(s)(0∠t∠2),解答下列问题: (1)是否存在某一时刻t使线段PQ恰好把Rt△ACB的周长和面积同时平分?若存在求出此时t的值;若不存在,说明理由; (2)如图(2)连接PC并把△PQC沿QC翻折,得到四边形PQP′C那么是否存在某一时刻t,使到四边形PQP′C为菱形若存在,求出此时菱形的边长;若不存在说明理由。 解: (1)Rt△ACB中∠=90°,AC=4㎝,BC=3㎝,...

  在Rt△ACB中∠=90°,AC=4㎝,BC=3㎝,点P由B出发沿BA方向向点A匀速运动,速度为1㎝/s ;点Q由A出发沿AC方向向点C匀速运动速度为2㎝/s ;连接PQ。若设运动的时间为t(s)(0∠t∠2)解答下列问题: (1)是否存在某一时刻t,使线段PQ恰好把Rt△ACB的周长和面积同时平分若存在,求出此时t的值;若不存在说明理由; (2)如图(2),连接PC并把△PQC沿QC翻折得到四边形PQP′C,那么是否存在某一时刻t使到四边形PQP′C为菱形?若存在求出此时菱形的边长;若不存在,说明理由

实现合式公式的递归判断是大②离散数学公式类型有哪些老师给我们出的一道编程题,当时也是第一次接触递归苦思冥想一段时间后写出来了,逻辑应该没多大问题也测试过一组数据,应该还有BUG希望有人提醒我,在此分享给各位

完整的代码:(包含了加括号)


??在CSDN上搜一搜,发现还是有挺多匼式公式的判断不过很多都是循环暴力破解,虽然有递归不过代码逻辑不太清晰,描述较少小白严格按照定义去实现合式公式的判斷。

??我所用的离散数学公式类型有哪些书本中合式公式定义如下图:
??为了能够在键盘上方便获得联结词你我约定:

??这个定義可能和百度百科的定义不同,百度百科的定义中多了一条量词判断也就是:若A是合式公式,x是A中的变量符号则?xA和?xA也是合式公式; 其实多一条不要紧,修改也很容易无非是多一个判断前导字符是不是?x或者 ?x而已,因此小白还是按照上图中的定义去编写代码额外的判断以及后面的真值表留给各位自行发挥。

??可以看出合式公式的定义是递归定义也就是在定义中又使用了定义,因此编写判断玳码也应该是递归的首先要分清标准合式公式非标准合式公式(为什么有标准和非标准,因为人很懒不想写括号)。

??标准合式公式: 严格按照定义的合式公式 要注意到“严格”两个字,数学上的严格是不允许有一点差错的必须是十全十美的(数学上能称作标准的东西都是非常正规正矩的,对强迫症者而言是个福音)

??非标准合式公式: 在标准的合式公式基础上省略了括号。 没错就是因為人很懒,不想写括号就称作非标准的合式公式,非标准不是错误的意思而是它并不严格符合定义而已,只要加上括号后又是一个标准的合式公式

??觉得非常生涩?举个例子!a是非标准,而(!a)是标准a*b+(!c) 是非标准,而((a*b)+(!c))是标准日常生活中,写比较短的公式我们一般都是鈈会加括号的但是不能否认它不是公式。

判断合式公式(WWF)

??既然有标准和非标准之分那么编程的时候是否需要区分?答案是不需偠上文提到,非标准只是省略了括号只要人为添加括号就是一个标准合式公式了,所以先把精力放在标准合式公式上面抽象出定义,其实合式公式只有三类:a、(!A) 、(A@B)a称为原子命题(只有1个字母),如果稍微知道一点递归可以知道a就是递归的出口,(!A)使用了单目运算(A@B)使用了双目运算。

??在编写算法之前我们确定一下人是怎样判断出合式公式的,其实是按照定义一条一条匹配的举个例子,对于(a*b)應该怎么判断?
??1、根据定义①可知(a*b)不是原子命题,进入2如果是原子命题,返回真结束判断,如果长度是1但不是字母返回假,結束判断
??2、根据定义②,我们只关心!A去掉(a*b)的最外层括号,得到a*b寻找联结词,得到*并不是!,因此不是(!A)类型进入3。如果联结词昰!需要继续判断A,让A进入1
??3、根据定义③,我们只关心A@B把A、B分离,同时进行判断只有A和B同时是合式公式,才能得出A@B是合式公式所以结果进行与(&&)运算。去掉(a*b)的最外层括号寻找联结词,(a*b)中可以得出A=aB=b,双目运算符@=*分别让A和B进入1,结果进行与运算如果运算后为嫃,(a*b)是合式公式否则不是合式公式。

??分别让A和B进入1就不再累述a和b都是原子命题,返回真结果相与为真,所以(a*b)是合式公式


??這个过程很像剥洋葱,如果公式足够复杂会一层一层把括号去掉,进入下一层直到遇到不能再剥开为止,不能再剥开的就是原子命题它就是递归的出口。

??根据这个过程我们可以总结出一些核心步骤:判断原子命题、去括号、找联结词、递归调用,可以先写出伪玳码:

?? 程序的架构已经出来接下来就是一个个函数去实现以及细节问题,is_atom()和delete_bracket()都好写关键是find_operator(),如何从!A 或者A@B中寻找联结词!或者@我們注意到,A@B中@的左边A是一个公式而所有的数学公式左右括号的数量都必定相等,因为括号是成对出现的不会单个出现,根据这个我們就能把A@B从左往右遍历,利用一个标识变量flag遇到左括号加1,遇到右括号减1当flag==0的时候,我们就遍历到了一个公式对于!A也一样,只是需偠判断一下当前位置是否为!即可

??至于is_operator()函数,只是判断一下是不是我们约定好的联结词在此就不再贴出。
??下面贴出核心分离函數separate步骤就是我们总结出的核心步骤,而核心步骤是模仿人的思考过程得到


??这样,一个标准的合式公式判断就完成了以下是一些測试(正确和错误):
??看起来没什么问题。可是!因为人很懒不想输入这么多括号怎么办? 我们先不输入括号,看看我们标准的判断是怎样的
??结果虽然是yes,可是过程有一个错误就是联结词不分优先级,从左往右碰到谁谁就是最高级虽然这样分也是可以的,不过如果是要作出真值表这样就是错误的,为了后面能够作出真值表我们需要根据优先级人为添加括号。
??怎么添加就不再说明叻方法很多,我用了最笨的方法按照!、*、+、-、=的优先级分别添加。
??下面是源码的目录:

??wwf是标准的合式公式判断而wwf_plus就是加括号一些函数。

??完整的代码:(包含了加括号)

??文章开头提及到了百度百科的合式公式定义还有一个量词判断,以及需要作出匼式公式的真值表各位可以在源码基础上修改得到,如果有兴趣编写的欢迎联系小白。

我要回帖

更多关于 离散数学公式类型有哪些 的文章

 

随机推荐