重 庆 交 通 大 学
学 生 实 验 报 告
实验课程名称 离散数学 开课实验室 数学实验室 学 院 理学院 专 业 信息与计算科学
学 生 姓 名 谭冰 学号 631122020212 班级 2班
开 课 时 间 2011 至 2012 学年第 二 学期
教师评语: 总 成 绩 教师签名 - 1 -
目录
实验一:教材第17页习题(1)(b);教材第39页习题(4)(b) …………3. 实验二:教材第127页习题(2)(b); 教材第113页习题(2)(b) .............. 9
- 2 -
实验一(此实验包含两题)
一、实验内容
1. 从键盘输入两个命题变元P和Q的真值,求它们的非,合取,析取,条件和双条件的真值。 2. 求任意一个命题公式的真值表。 二、实验目的
熟悉掌握命题逻辑中的联接词,真值表,主范式等,进一步能用它们来解决实际问题。 三、实验环境
MATLAB软件的编程环境实现
四、实现两题的算法与原理(教材第17页习题(1)(b),39页习题(4)(d))
根据析取,合取的定义可用简单的算术运算求出结果,并将结果转换成逻辑值。同样根据等价关系可将条件式及双条件式转换成析取和合取的运算。 五、实验数据及结果分析 实验所用函数:
function y=Not(x) if x==0 y=1; else y=0; end
function m=Vee(x,y) if x==0&y==0 m=0;
- 3 -
else m=1; end
function y=Wedge(P,Q) if P==1&Q==1 y=1; else y=0; end
function y=If(P,Q) y=Vee(Not(P),Q); end
function y=Hh(P,Q,R) y=Vee(Wedge(P,R),If(P,Q)); end
function y=Ss(P,Q,R)
y=Wedge(If(P,Wedge(Q,R)),If(Not(P),Wedge(Not(Q),Not(R)))); end
A=[0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1];
P=A(:,1); Q=A(:,2); R=A(:,3);
In=input(‘请输入含有三个变元的命题公式:’); S={‘真值表为’};
T=num2str([P,Q,R,In]); T%保存命名为Zzb
'此为求(P→(Q∧R))∧(?P→(?Q∧?R))主析取范式、主合取范式的程序,并判断是否为重言式,以K代替其真值'
P=[0 0 0 0 1 1 1 1]; Q=[0 0 1 1 0 0 1 1]; R=[0 1 0 1 0 1 0 1]; ' P Q R'
- 4 -
Z=[P;Q;R]'
K=Wedge(If(P,Wedge(Q,R)),If(Not(P),Wedge(Not(Q),Not(R)))); '主析取范式:' A=[]; V=[];
for i=find(K) switch i case 1
A=[A,'(?P∧?Q∧?R)∨']; case 2
A=[A,'(?P∧?Q∧R)∨']; case 3
A=[A,'(?P∧Q∧?R)∨']; case 4
A=[A,'(?P∧Q∧R)∨']; case 5
A=[A,'(P∧?Q∧?R)∨']; case 6
A=[A,'(P∧?Q∧R)∨']; case 7
A=[A,'(P∧Q?∧R)∨']; case 8
A=[A,'(P∧Q∧R)']; otherwise '此为永假式' end end A
'主合取范式'
for i=find(Not(K)) switch i case 1
V=[V,'(P∨Q∨R)∧']; case 2
V=[V,'(P∨Q?∨R)∧']; case 3
V=[V,'(P∨?Q∨R)∧']; case 4
V=[V,'(P∨?Q∨?R)∧']; case 5
V=[V,'(?P∨Q∨R)∧']; case 6
V=[V,'(?P∨Q∨?R)∧']; case 7
- 5 -