目录
下载链接
设计一个5人表决开关电路
代码实现
确定谁是作案者
代码实现
链接:https://pan.baidu.com/s/1nDnISBjZjbD6Bf4qqzICsw?pwd=1234
提取码:1234
【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。
【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。
实验用例:用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过(表决开关亮)。
用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过(表决开关亮)。
3人或3人以上同意(即表决为1)时,表决通过,开关亮,共列出10种3人搭配,10种3人之间的搭配为析取的关系,
【实验原理和方法】
(1)写出5人表决开关电路真值表,从真值表得出5人表决开关电路的主合取公式(或主析取公式),将公式化简成尽可能含五个基本联结词最少的等价公式。
(2)上面公式中的每一个联结词是一个开关元件,将它们定义成C语言中的函数。
(3)输入5人表决值(0或1),调用上面定义的函数,将5人表决开关电路真值表的等价公式写成一个函数表达式。
(4)输出函数表达式的结果,如果是1,则表明表决通过,否则表决不通过。
具体代码如下所示:(只看第一个即可)
#include
int main()
{
int vote(int a,int b,int c,int d,int e);
int a,b,c,d,e;
printf("请输入5个人的表决值:\n");
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
if(vote(a,b,c,d,e))
printf("表决通过了!\n");
else
printf("很遗憾,表决没有被通过!");
}
int vote(int a,int b,int c,int d,int e)
{
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;
}
#include
int main()
{
int vote(int a,int b,int c,int d,int e);
int a,b,c,d,e;
printf("请输入5个人的表决值:\n");
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
if(vote(a,b,c,d,e))
printf("表决通过了!\n");
else
printf("很遗憾,表决没有被通过!");
}
int vote(int a,int b,int c,int d,int e)
{
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;
}
#include
int main()
{
int vote(int a,int b,int c,int d,int e);
int a,b,c,d,e;
printf("请输入5个人的表决值:\n");
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
if(vote(a,b,c,d,e))
printf("表决通过了!\n");
else
printf("很遗憾,表决没有被通过!");
}
int vote(int a,int b,int c,int d,int e)
{
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;
}
【实验目的】加深对命题逻辑推理方法的理解。
【实验内容】用命题逻辑推理的方法解决逻辑推理问题。
根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。离散指
(1)营业员A或B偷了手表;
(2)若A作案,则作案不在营业时间;
(3)若B提供的证据正确,则货柜末上锁;
(4)若B提供的证据不正确,则作案发生在营业时间;
(5)货柜上了锁。
用命题题变元表示
A:营业员A偷了手表
B:营业员B偷了手表
C:作案不在营业时间
D:B提供的证据正确
E:货柜没有上锁
(1)符号化上面的命题,将它们作为条件,营业员A偷了手表作为结论,得一个复合命题。
(2)将复合命题中要用到的联结词定义成C语言中的函数,用变量表示相应的命题变元。将复合命题写成一个函数表达式。
(3)函数表达式中的变量赋初值1。如果函数表达式的值为1,则结论有效, A偷了手表,否则是B偷了手表。
具体代码如下所示:(只看第一个即可)
#include
int main()
{ 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=%d",A,B);
return 0;
}
#include
int main()
{ 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=%d",A,B);
return 0;
}
#include
int main()
{ 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=%d",A,B);
return 0;
}
链接:https://pan.baidu.com/s/1nDnISBjZjbD6Bf4qqzICsw?pwd=1234
提取码:1234