离散数学,逻辑学,命题公式求真值表

上传人:第*** 文档编号:34380600 上传时间:2018-02-23 格式:DOC 页数:11 大小:69KB
返回 下载 相关 举报
离散数学,逻辑学,命题公式求真值表_第1页
第1页 / 共11页
离散数学,逻辑学,命题公式求真值表_第2页
第2页 / 共11页
离散数学,逻辑学,命题公式求真值表_第3页
第3页 / 共11页
离散数学,逻辑学,命题公式求真值表_第4页
第4页 / 共11页
离散数学,逻辑学,命题公式求真值表_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《离散数学,逻辑学,命题公式求真值表》由会员分享,可在线阅读,更多相关《离散数学,逻辑学,命题公式求真值表(11页珍藏版)》请在金锄头文库上搜索。

1、离散逻辑学实验班级:10 电信实验班 学号:Q10600132 姓名:王彬彬一、实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。二、实验内容1. 从键盘输入两个命题变元 P 和 Q 的真值,求它们的合取、析取、条件和双条件的真值。 (A)2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C) )三、实验环境C 或 C语言编程环境实现。4、实验原理和实现过程(算法描述)1.实验原理(1)合取:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的命题 PQ, 读作 P、Q 的合取, 也可读作 P 与 Q。这个新命题的真值与构成它的命题 P、Q 的

2、真值间的关系为只有当两个命题变项 P = T, Q = T 时方可 PQ =T, 而 P、Q 只要有一为 F 则 PQ = F。这样看来,PQ 可用来表示日常用语P 与 Q, 或 P 并且 Q。(2)析取:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的命题 PQ, 读作 P、Q 的析取, 也可读作 P 或 Q。这个新命题的真值与构成它的命题 P、Q 的真值间的关系为只有当两个命题变项 P = F, Q = F 时方可 PQ =F, 而 P、Q 只要有一为 T 则 PQ = T。这样看来,PQ 可用来表示日常用语P 或者 Q。(3)条件:二元命题联结词。将两个命题 P、Q 联结起来,

3、构成一个新的命题 PQ, 读作 P 条件 Q, 也可读作如果 P,那么 Q。这个新命题的真值与构成它的命题 P、Q 的真值间的关系为只有当两个命题变项 P = T, Q = F 时方可PQ =F, 其余均为 T。(4)双条件:二元命题联结词。将两个命题 P、Q 联结起来,构成一个新的命题 PQ, 读作 P 双条件于 Q。这个新命题的真值与构成它的命题 P、Q 的真值间的关系为当两个命题变项 P = T, Q =T 时方可 PQ =T, 其余均为 F。(5)真值表:表征逻辑事件输入和输出之间全部可能状态的表格。列出命题公式真假值的表。通常以 1 表示真,0 表示假。命题公式的取值由组成命题公式的

4、命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法。 真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。(6)主范式:主析取范式:在含有 n 个命题变元的简单合取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项。由若干个不同的小项组成的析取式称为主析取范式;与 A 等价的主析取范式称为 A的主析取范式。任意含 n 个命题变元的非永假命题公式 A 都存在与其等价的主析取范式,并且是惟一的。主合取范式:在含有 n 个命题变元的简单析取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式

5、为大项。由若干个不同的大项组成的合取式称为主合取范式;与 A 等价的主合取范式称为 A 的主合取范式。任意含 n 个命题变元的非永真命题公式 A 都存在与其等价的主合取范式,并且是惟一的。5、代码设计结果:6、代码:#include #include #include #include conio.h#include math.h#define N 50 void panduan(int bN,int f);/赋值函数int tkh (char szN, char ccuN, int icuN, int h0);/分级运算函数int fkh (char szN, char ccuN, int

6、icuN, int h0);/主运算函数void zhumain()int i1,i2,d=1,icuN,kh=0,jg,j=0,h0;/icuN用于存放变量值,kh 括号计数,jg 存放结果int bj=0,hqN,h=0,x=0,xqN;/hqN存放合取结果 xqN存放析取结果char szN,ccuN,sz0N,s;/szN存放式子,ccuN存放变量 ,sz0N也是用于存放式子hq0=-1;xq0=-1;printf(*n);/标语printf(* *n);printf(* 欢迎进入逻辑运算软件 *n);printf(* (可运算真值表,主范式,支持括号) *n);printf(* *n

7、);printf(* 用!表示非 *n);printf(* 用printf(* 用|表示或 *n);printf(* 用表示蕴含 *n);printf(* 用表示等值 *n);printf(* *n);printf(*nn);printf(请输入一个合法的命题公式:n);/输入式子gets(sz);/读取式子strcpy(sz0,sz);/复制式子for(i1=0;i1=a & szi1=A & szi10)/判断并添加符号 printf(/);printf(M(%d),hqi1); /输出主合取范式if(xq0=-1)/不存在析取范式时printf(n 该命题公式不存在主析取范式。n);el

8、seprintf(nn 该命题公式的主析取范式:nt);for(i1=0;i10)/判断并添加符号printf(/);printf(m(%d),xqi1);/输出主析取范式printf(n);void panduan(int bN,int f) / 二进制赋值。 int i;i=f;if(bf=0)/加 1bf=1;else/进位bf=0;panduan(b,-i); int tkh (char szN,char ccuN,int icuN,int h0)/分级运算函数int i,j,h,s,kh=0,wzN,a; char xs1N,ckhN; /xs1 用来保存括号内的字符 ckh 用来保

9、存括号。s=strlen(sz);for(i=0;is;i+)if(szi=( | szi=)/判断括号wzkh=i;/存储括号位置ckhkh=szi;/存储括号类型kh+; if(kh=0)return fkh(sz,ccu,icu,h0);/如果无括号,直接运行elsefor(i=0;ikh;i+)if(ckhi=)/找到第一个)break;for(j=wzi-1+1,h=0;jwzi;j+,h+) /存储最内级括号中的内容xs1h=szj; xs1h=0;a=fkh(xs1,ccu,icu,h0);/运行最内级括号的式子,得到结果if(a=1)/判断并存储结果szwzi-1=1;else

10、szwzi-1=-2;for(j=wzi-1+1;js+wzi-1-wzi;j+)/将括号后内容前移szj=szj+wzi-wzi-1;szj=0; return tkh(sz,ccu,icu,h0);/循环执行int fkh(char szN,char ccuN,int icuN,int h0)/主运算函数int i,h=0,j=0,j1=0,j2=0,j3=0,j4=0,j5=0,i1,i2,p1=-1,p2=-1,s;char dtN;s=strlen(sz);if(s=1)if(sz0=-2)/判断是否是最后一项return 0;elsereturn 1; /1 就是 sz0的值、el

11、se for(i=0;is-j;i+) /先处理非if(szi=!) for(i1=0;i1h0;i1+)if(szi+1=ccui1)/将变量赋值并给 P1p1=icui1;if(szi+1=-2)/如果是前运算结果的 0,则 P1 等于 0p1=0; if(p1=-1)/如果是数字,直接给 P1p1=szi+1; dtj+2=!p1;/非运算szi=j+2;j+;p1=0;for(i1=i+1;i1s-j;i1+)szi1=szi1+1;/将后续式子前移一项p1=-1; j1=j; for(i=0;is-j1-2*j2;i+) / 处理与if(szi=&) for(i1=0;i1h0;i1

12、+) if(szi-1=ccui1)/将变量赋值并给 P1p1=icui1;if(szi+1=ccui1)/将变量赋值并给 P2p2=icui1;for(i2=2;i2j+2;i2+) if(szi-1=i2) /如果为前计算结果,将结果赋值并给 P1p1=dti2; if(szi+1=i2) /如果为前计算结果,将结果赋值并给 P2p2=dti2;if(szi-1=-2)/如果是前运算结果的 0,则 P1 等于 0p1=0; if(szi+1=-2)/如果是前运算结果的 0,则 P2 等于 0p2=0;if(p1=-1) /如果是数字,直接给 P1p1=(int)(szi-1);if(p2=

13、-1)/如果是数字,直接给 P2p2=(int)(szi+1); dtj+2=p1 /与运算szi-1=j+2;j+;j2+;p1=-1;p2=-1; for(i1=i;i1s-j1-2*j2;i1+)/将后续式子前移两项szi1=szi1+2;i=i-1; for(i=0;is-j1-2*j2-2*j3;i+) / 处理或。 if(szi=|)for(i1=0;i1h0;i1+) if(szi-1=ccui1)/将变量赋值并给 P1p1=icui1;if(szi+1=ccui1)/将变量赋值并给 P2p2=icui1;for(i2=2;i2j+2;i2+) if(szi-1=i2) /如果为前计算结果,将结果赋值并给 P1p1=dti2;if(szi+1=i2)/如果为前计算结果,将结果赋值并给 P2p2=dti2;if(szi-1=-2)/如果是前运算结果的 0,则 P1 等于 0p1=0; if(szi+1=-2)/如果是前运算结果的 0,则 P2 等于 0p2=0;if(p1=-1)/如果是数字,直接给 P1p1=szi-1;if(p2=-1)/如果是数字,直接给 P2p2=szi+1;dtj+2=p1 | p2;/或运算szi-1=j+2;j+;j3+;p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号