离散数学课程设计实验报告实验一构造任意合式公式的真值表
专业计算机科学与技术
年级2012级
班级一班
姓名陈昊
学号
日期2013年12月21日
f一、实验内容
1、功能给出任意变元的合式公式构造该合式公式的真值表
2、基本思想以用数值变量表示命题变元为前提规范合式公式的表示及求真值表采用通过将合式公式表示成为条件语句中的条件表达式对每个赋值其合式公式的真值即为该合式公式的逻辑运算结果使用一维数组aN表示合式公式中所出现的
个命题变元同时它也是一个二进制加法器的模拟器每当在这个模拟器中产生一个二进制数时就相当于给各个命题变元产生了一组真值指派。
3、算法逻辑
1将二进制加法模拟器赋初值
2计算模拟器中所对应的一组真值指派下合式公式的真值条件语句。
3输出真值表中对应于模拟器所给出的一组真值指派及这组真值指派所对应的一行真值。
4在模拟器aN中模拟产生下一个二进制数值。
5若aN中的数值等于2
则结束否则转②。
4、要求
用C语言编写出相应的程序并至少通过输入两个合式公式进行验证打印出结果。
二、实验目的
熟悉掌握命题逻辑中的联接词、真值表、合式公式等进一步能用它们来解
决实际问题。掌握编程实现求任意合式公式的真值表的算法。
三、实验环境
C编程语言CodeBlocks1211编译环境
四、主要算法和思想
1通过栈来存储变元和运算符建立char型optr栈存储运算符i
t型op
d栈存储变元初值。
2数组a保存变元数组b保存变元的初值。构造所有真值的可能性。
3通过压栈和弹栈来进行求值。
1当遇到运算符时且前一个运算符的优先级大于该运算符则弹出前一个运算符左右两个变元的初值运算后放回op
d栈内。
210
iai
f2当遇到变元初值时直接压栈。
3最后当optr栈只有‘’号时则optr栈顶元素就是该组初值的真值。
五、实验源代码
i
cludeiostream
i
cludecstdio
i
cludecmath
i
cludecstri
g
usi
g
amespacestd
templateclassType
classStack堆栈类
protected
i
ttop
i
tmaxSize
Typeelems
i
tIsFullco
st
i
tIsEmptyco
st
public
Stacki
tsize20
Stackdeleteelems
i
tPushTypex
i
tPopTypex
i
tGetTopTypex
templateclassType
StackTypeStacki
ts
top1maxSizes
elems
ewTypemaxSize
templateclassType
i
tStackTypePushTypex
ifIsFullretur
0
elemstopxretur
1
ftemplateclassType
i
tStackTypePopTypex
ifIsEmptyretur
0
xelemstopretur
1
templateclassType
i
tStackTypeIsFullco
st
retur
topmaxSize1
templateclassType
i
tStackr