真值表与判断复杂程序
对于判断很多的函数,或者某一段程序(其实这样的一段程序,单单就其复杂程度而言也可以考虑独立成为一个函数了),可以写真值表来帮助解决。简单总结如下:
首先找出来判断条件的变量。对于判断条件就复杂得需要借助一点外力的程序,参与判断的变量肯定是不少的,需要全部列出来。
很多情况下,判断条件的变量并不是简单的布尔值,那么最好转换成布尔值,否则真值表本身也太复杂了。比如,l_color变量可能取值有enmu_black, enum_gray, enum_white,那么可以做三个对应的变量is_black, is_gary, is_white。
判断的结果,也往往未必就是布尔值,那么这时候可以考虑采用中间变量的布尔值代替判断结果。但是关于这一点,只是个人猜测,我的程序结果虽然不是布尔值,但是它的返回值只有两种可能,和布尔值也没什么区别。
然后,就是写真值表了,这个千变万化不见其宗,只能根据自己程序的需求来写。比如我的代码,写出的真值表有两个:
DEL ADD
CO_RE - -
CO_TE X X
CO_NONE X X
…
DEL ADD
UN_RE - -
UN_TE - -
UN_NONE O -
UN_NH O O
UN_WO O O
UN_SP O O
圆圈表示返回真,横杠表示返回假,叉表示没有效果。
下面一步,是化简真值表,这个在网上搜一下,相关的教程还是有的。应该是数字逻辑或者离散数学里的内容,就不献丑了。我自己化简的很没有章法,而且是化简完了才想起来去网上搜一下的:
DEL ADD
RE - -
NONE O -
OTHER O O
结果相同的组合,合并成一个判断。本来我是打算完全按照这个真值表来写程序的,就是分别设置RE、NONE、OTHER和DEL、ADD的值,最后做运算。后来发现这样做其实得不偿失,这种做法适合比较复杂的程序,可是本来真值表通过化简就已经把程序的判断简化出来,这样做有点大炮打苍蝇。
因为真值表的结果已经很简单了,所以代码还是if…else的写出来了。在这里真值表更多的是一个帮助分析的工具。如果是从真值表生成表达式(实际就是从真值表生成程序),那就不简单了,可惜短时间里没找到有用的工具。如果有这样的工具,我们就写一个真值表好了,化简也不化简,丢过去,程序就出来了。
一点链接:
http://zh.wikipedia.org/wiki/真值表
http://en.wikipedia.org/wiki/Truth_table —> 这个我只扫了一眼
http://cs.cup.edu.cn/TeacherHomePages/chenxuelan/lssx/1-34%20真值表与等价公式.ppt
命题公式真值表生成算法研究与程序设计:http://www.queshao.com/docs/31353/ —>这个挺贵的,不知道好不好
程序不特别复杂,我担心写错,于是才用了真值表。就昨天程序的复杂程度,应该是用不着的。
[原文在百度空间已经关闭]
标签集合/Tag clouds
C++
Symbain
轻松汇编
算法
论文学习
资治通鉴
Delphi
编程之美
Poco
MFC
Linux
IFC
知乎
汇编
数据分析
交叉编译
poco
j2me
android
XML
Java
DTD
飞信
零宽断言
诺基亚
联系人
编程
真值表
池西木
正则表达式
多线程
命令行
优化
stream
configure
cmake
VIM
UiAutomator
TDD
Symbian
Sqlite
SourceInsight
Python
MPAndroidChart
Kotlin
Flutter
Dokka
Chatgpt