实验二

来源:互联网 发布:郑州seo服务 编辑:程序博客网 时间:2024/06/05 01:54

命题逻辑推理


实验二 命题逻辑推理


【实验目的】加深对命题逻辑推理方法的理解。 【实验内容】用命题逻辑推理的方法解决逻辑推理问题。

实验用例:根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。
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的指派便是结果。

#include<stdio.h>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++)                        //(A || B)A作案或者b作案                        //(!A || C)A没有作案或者作案不在营业时间                        //(!D || E)B提供的证据不正确或者货柜未上锁                        //(D || !C)B提供的证据正确或作案在营业时间                        // !E货柜上锁了                        if((A || B) && (!A || C) && (!D || E) && (D || !C) && !E)                            printf("A:%d,B:%d",A,B);}

运行结果 A=0,B=1