admin 管理员组文章数量: 1086019
2024年4月21日发(作者:两个bigdecimal比较)
实验一
命题逻辑公式化简
【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌
握利用基本等价公式化简公式的方法。
【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。
实验用例: 用化简命题逻辑公式的方法设计一个 5 人表决开关电路, 要求 3 人以上 (含
3 人)同意则表决通过(表决开关亮) 。
【实验原理和方法】
(1) 写出 5 人表决开关电路真值表, 从真值表得出 5 人表决开关电路的主合取公式 (或
主析取公式) ,将公式化简成尽可能含五个基本联结词最少的等价公式。
(2)上面公式中的每一个联结词是一个开关元件,将它们定义成 C 语言中的函数。
(3)输入 5 人表决值(0 或 1),调用上面定义的函数,将 5 人表决开关电路真值表的
等价公式写成一个函数表达式。
(4)输出函数表达式的结果,如果是 1 ,则表明表决通过,否则表决不通过。
参考代码:
#include
int vote(int a,int b,int c,int d,int e)
{
//五人中任取三人的不同的取法有 10 种。
if( a&&b&&c || a&&b&&d || a&&b&&e || a&&c&&d || a&&c&&e || a&&d&&e || b&&c&&d
|| b&&c&&e || b&&d&&e || c&&d&&e)
return 1;
else
return 0;
}
void main()
{
int a,b,c,d,e;
printf("请输入第五个人的表决值( 0 或 1, 空格分开): ");
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
if(vote(a,b,c,d,e))
printf("很好,表决通过! n");
else
printf("遗憾,表决没有通过! n");
}
//注:联结词不定义成函数,否则太繁
实验二 命题逻辑推理
【实验目的】加深对命题逻辑推理方法的理解。
【实验内容】用命题逻辑推理的方法解决逻辑推理问题。
实验用例:根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。
(1) 营业员A 或 B 偷了手表;
(2) 若 A 作案,则作案不在营业时间;
(3) 若 B 提供的证据正确,则货柜末上锁;
(4) 若 B 提供的证据不正确,则作案发生在营业时间;
(5)货柜上了锁。
【实验原理和方法】
(1)符号化上面的命题,将它们作为条件,营业员 A 偷了手表作为结论,得一个复合
命题。
(2)将复合命题中要用到的联结词定义成 C 语言中的函数,用变量表示相应的命题变
元。将复合命题写成一个函数表达式。
(3)函数表达式中的变量赋初值 1。如果函数表达式的值为 1,则结论有效, A 偷了
手表,否则是 B 偷了手表。
用命题题变元表示:
A:营业员A 偷了手表
B:营业员 B 偷了手表
C:作案不在营业时间
D:B 提供的证据正确
E:货柜末上锁
则上面的命题符号化为 (A| |B) && (!A| |C) && (!D| |E) && (D| | !C) && !E
要求找到满足上面式子的变元 A, B 的指派便是结果。
C 语言算法:
int A,B,C,D,E;
for(A=0;A<=1;A++)
for(B=0;B<=1;B++)
for(C=0;C<=1;C++)
for(D=0;D<=1;D++)
for(E=0;E<=1;E++)
if((A| |B) && (!A| |C) && (!D| |E) && (D| | !C) && !E)
printf("A=%d,B=%dn",A,B);
}
/*实验结果是: A=0, B=1,即 B 偷了手表*/
版权声明:本文标题:(完整版)离散数学实验指导书及其答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713689365a647112.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论