求给定命题公式真值表并根据真值表求公式主范式
利用真值表求主合取范式

利用真值表求主合取范式
1、把变量的各种可能取值与想对应的函数值,用表格的形式一一列举出来,这种表格就叫做真值表。
2、设一个变量均有0、1两种可能取值,n个变量共有2n种可能,将它们按顺序(一般按二进制数递增规律)排列起来,同时在相应位置上写上逻辑函数的值,便可得到该逻辑函数的真值表。
3、例如:逻辑函数的Y=AB+BC+CA的真值表如下:真值表以表格的形式表示逻辑函数,其优点是直观明了。
4、输入变量取值一旦确定,即可以从表中查出相应的函数值。
5、所以,在许多数字集成电路手册中,常常以不同形式的真值表,给出器件的逻辑功能。
6、另外,在把一个实际逻辑问题,抽象成为数学表达形式时,使用真值表是最方便的。
7、所以,在数字电路逻辑设计过程中,第一步就是要列出真值表;在分析数字电路逻辑功能时,最后也要列出真值表。
8、但是,真值表也有一些缺点:首先,难以对其使用逻辑代数的公式和定理进行运算和变换;其次,当变量比较多时,列真值表会十分繁琐。
用真值表法判断命题公式

用真值表法判断命题公式真值表法是一种用于判断命题公式的方法,它通过列出所有可能的真值赋值并逐一计算公式的真值,最终确定命题公式的真值。
以下是关于真值表法的详细解释,包括其原理、步骤以及示例。
真值表法的原理是基于命题逻辑的基本概念,其中命题是指一个陈述句,它要么是真的,要么是假的。
命题公式由命题符号和逻辑联结词(如与、或、非)组成,它们用于组合和连接命题。
真值表表示了所有可能的命题符号的真值赋值及相应的公式的真值。
使用真值表法可以判断一个命题公式的真值取值,即真或假。
在这个过程中,根据命题公式中的命题符号的真值赋值情况,计算每个子公式的真值,并最终确定整个公式的真值。
步骤如下:1.计算公式中的命题符号的个数:记为N。
2.构建一个包含N列的真值表,每一列代表一个命题变量的真值。
3.确定真值表的行数:由于每个命题符号都有两个可能的真值(真或假),所以真值表的行数为2^N。
4.从第一行开始填充真值表,对每个命题变量进行真值赋值。
5.按照公式中的逻辑联结词逐一计算子公式的真值。
6.逐行填充真值表,计算整个命题公式的真值。
7.最后一列中的真值即为整个命题公式的真值。
以下是一个示例,以说明真值表法的具体步骤。
考虑以下命题公式:(p∨q)→r,其中p、q和r是命题变量。
1.计算命题符号的个数:N=32.构建一个包含3列的真值表,每一列分别代表p、q和r的真值。
3.由于有3个命题变量,所以真值表共有2^3=8行。
4.从第一行开始填充真值表:p,q,r---,---,---T,T,TT,T,FT,F,TT,F,FF,T,TF,T,FF,F,TF,F,F5.按照公式中的逻辑联结词计算子公式的真值,首先计算(p∨q)的真值:p,q,p∨q---,---,------T,T,TT,F,TF,T,TF,F,F6.然后计算整个命题公式的真值(r→(p∨q)):p,q,r,p∨q,r→(p∨q)---,---,---,------,----------T,T,T,T,TT,T,F,T,TT,F,T,T,TT,F,F,T,TF,T,T,T,TF,T,F,T,TF,F,T,F,FF,F,F,F,T7.最后一列中的真值即为整个命题公式的真值。
命题公式真值表

说明:
(1)命题变元是没有真假值的,只有当命题变元用 确定的命题代入时,才得到一个命题,命题的真值 依赖于代换变元的那些命题的真值;
1-3 命题公式与翻译
(2) 不是所有由命题变元 ,常元 ,联结词和括号组成的字符串 都能成为命题公式.例如, P , P (Q ) 等不是命题公式.
定义 1-3.1 命题演算的合式公式,规定为: (1)单个命题变元本身是一个合式公式; (2)如果 A 是合式公式,那么 A 是合式公式; (3)如果 A 和 B 是合式公式,那么
1-3 命题公式与翻译
2、命题的翻译
练习 将下列命题符号化: (1)她既聪明又用功. (2)他虽聪明但不用功. (3)虽然这次语文考试的题目很难,但是王丽还是取得了好成绩. (4)张三或李四都可以做这件事. (5)一公安人员审查一起案件,事实如下,请将案件事实符 号化: 张三或李四盗窃了机房的一台电脑,若是张三所为,则作案 时间不能发生在午夜前;若李四的证词正确,则午夜时机房 的灯未灭; 若李四证词不正确,则作案时间发在午夜前; 午夜时机房的灯全灭了.
分配律
P (Q R) ( P Q) ( P R)
吸收律
P ( P Q) P , P ( P Q) P
1-4 真值表与等价公式
4.基本等价公式
德·摩根律 同一律 零律 否定律 (互补律) 条件式转化律 双条件转化律
( P Q) P Q , ( P Q) P Q
1-3 命题公式与翻译
1、命题公式(合式公式)
定义 1 由命题变元、常元、联结词、括号以规定的格式联结 起来的字符串称为命题公式,也称合式公式.命题公式中的命 题变元称为命题公式的分量.
例如,若 P 和 Q 是命题变元, 则下面式子均是命题公式
离散数学上机实验指导

离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至xfs@。
实验11实验内容(1)求任意一个命题公式的真值表。
(2)利用真值表求任意一个命题公式的主范式。
(3)利用真值表进行逻辑推理。
注:(2)和(3)可在(1)的基础上完成。
2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。
例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。
本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。
目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。
3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。
真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。
n个命题变元的每组赋值的生成算法可基于这种思想。
含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。
为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、&、|、-、+来表示。
算符之间的优先关系如表1-32所示:为实现算符优先算法,另一个称作OPND,用以寄存操作数或运算结果。
算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。
实验21实验内容(1)求任意两个集合的交集、并集、差集。
(2)求任意一个集合的幂集。
离散数学实验——求真值表

一实验目的 (1)二实验内容 (1)三实验环境 (1)四实验原理和实现过程(算法描述) (1)五实验数据及结果分析; (3)六源程序清单; (7)七其他收获和体会。
(16)一实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。
二实验内容1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。
(A)2. 求任意一个命题公式的真值表(B,并根据真值表求主范式(C))三实验环境C或C++语言编程环境实现。
四实验原理和实现过程(算法描述)A:首先提示用户输入真值指派,然后判断用户输入的是否是0或者1,如果不是则利用while语句提示错误,然后提示重新输入直至输入正确,再根据用户输入的真值给代表合取,析取,蕴含,双条件的变量赋值,再以两行表格形式输出所得结果。
最后提示按#键退出,否则继续循环求真值。
B:主要思路:首先提示用户输入表达式,然后编写并调用一个函数将表达式转换为逆波兰式,在转换的同时,插入部分语句将表达式中的变量名存储到数组bianl[N]中,然后输出存好的各变量名及用户输入的表达式(建立表头),将每次的真值指派存在数组zhi[]中,编写函数zzhi()每次调用zzhi()时都使数组zhi[]中的真值加1,(利用递推实现加一时可能的进位,)然后编写并调用一函数qiuzhi ()计算每次真值指派下的逆波兰表达式的值,再输出各真值指派和求出的表达式的真值,然后调用函数zzhi()将真值指派的数组加1,最后外围利用while语句循环输出每个不同的真值指派和该指派下表达式的值。
将表达式转换成逆波兰式并将变量提取的算法:首先需要分配2个栈,一个作为临时存储运算符的栈fu[],一个作为输入逆波兰式的栈nibol[],从中缀式的左端开始取字符,逐序进行如下步骤:(1)若取出的字符是字母,则该字母直接送入nibol[]栈。
同时为了找出所有变量,将该变量名与数组bianl[]中已有的元素比较,如果bianl[]中还没有该字母,则该字母是新出现的变量,将其录入数组bianl[]中。
利用真值表求主范式的方法

利用真值表求主范式的方法
利用真值表求主范式的方法是一种计算布尔函数的有效方法。
真值表是一个表格,其中列出了布尔函数的所有可能输入和对应输出值。
从真值表中,我们可以确定函数的主范式,即包含所有输入和输出组合的最小项或最大项。
这些主范式可以帮助我们简化函数并找出其逻辑特性。
以下是利用真值表求主范式的具体步骤:
1. 给定一个布尔函数,列出其真值表,其中包括所有可能的输入和相应的输出值。
2. 找出真值表中所有输出为1的每个组合,并将它们称为最小项。
例如,如果布尔函数有4个输入变量,则真值表将包含16个可能的组合。
如果输出为1的组合有3个,则有3个最小项。
3. 将这些最小项组合成一个包含所有最小项的主范式。
这可以通过使用布尔代数规则来完成,例如使用与操作符和或操作符。
4. 如果存在多个主范式,则可以使用其中任何一个来简化布尔函数。
但是,一般情况下,我们会选择包含最少项的主范式,因为这意味着最简单的逻辑表达式。
5. 如果需要,可以使用主范式来创建逻辑电路或编写计算机程序,以实现相应的布尔函数。
通过这些步骤,我们可以快速、准确地确定布尔函数的主范式,从而简化其逻辑表达式并实现相应的功能。
- 1 -。
命题、联结词、命题公式与真值表

A(BC) (D E)
1 01
10
p
2、什么情况下,下面论述为真:
q
说小王不会唱歌或小李不会跳舞是正确的,而
说如果小王会唱歌,小李会跳舞是不正确的。
(p q) (pq)
综合问题1
Key:
2、赋值、成真(假)赋值、指派
pq
qp
00
1
赋值
01
0
10
1
11
1
成真赋值
指派
(qp) q (qp) qp
0
1
0
1
0
1
1
1
练习1:求命题公式的真值表
1、P∧Q)→R
2、┐((P∨Q)∧P)
3、Q∧(P→Q)→P
4、设p,q的真值为0;r,s的真值为1,求下列
命题公式的真值
(1)P∨(Q∧R)
A→B、AB也是命题公式。 (3) 有限步应用条款(1)(2)生成的公式。
例:下列符号串都是命题公式
下列符号串是否为命题公式?
命题、联结词、命题公式与真值表
1、一些基本概念 逻辑、命题、真值
2、联结词 3、命题公式 4、真值表
一、真值表
真值表: 公式A在所有赋值下的取值情况列成的表
例 给出公式的真值表: A= (qp) qp 的真值 表
pq
qp (qp) q (qp) qp
00
1
0
1
01
0
0
1
10
1
0
1
11
1
1
1
回顾一下:五个联结词真值表
否定
等价(双条件)
合取
析取
蕴涵(条件)
几个相关概念
求给定命题公式的真值表并根据真值表求公式的主范式

求给定命题公式的真值表并根据真值表求公式的主范式(求给定命题公式的真值表并根据真值表求公式的主范式)专业网络工程班级 1202班学号 12407442姓名张敏慧2013.12.14目录一.实验目的 .......................................................3二.实验内容 (3)求任意一个命题公式的真值表 ..................................................................... ..... 3 三.实验环境 (3)四. 实验原理和实现过程(算法描述) (3)1.实验原理 ..................................................................... ...................................... 3 2.实验流程图 ..................................................................... .................................. 5 五.实验代码 (6)六. 实验结果 (14)七. 实验总结 (19)- 1 -一.实验目的本实验课程是网络工程专业学生的一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;通过实验提高学生编写实验报告、总结实验结果的能力;使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
熟悉掌握命题逻辑中的真值表、主范式等,进一步能用它们来解决实际问题。
二.实验内容求任意一个命题公式的真值表,并根据真值表求主范式详细说明:求任意一个命题公式的真值表本实验要求大家利用C/C,,语言,实现任意输入公式的真值表计算。
一般我们将公式中的命题变元放在真值表的左边,将公式的结果放在真值表的右边。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
if(sz[i-1]==-2)//如果是前运算结果地0,则P1等于0
{
for(i2=0;i2<j;i2++) //判断并储存变量.
if(ccu[i2]==sz[i1])//去除重复变量
d=0;
if(d==1)
{
ccu[j]=sz[i1];
j++;
}
d=1;
}
}
printf("\nd该式子中地变量个数为:%d\n",j);//输出变量个数
h0=j;
printf("\n输出真值表如下:\n \n"); //输出真值表表头
for(i1=0;i1<h0;i1++)
printf(" %c ",ccu[i1]);
printf(" ");
puts(sz);
printf("\n");
for(i1=0;i1<j;i1++) ///////先将所有地变量赋值为零.
icu[i1]=0;
for(i2=0;i2<j;i2++)//输出真值表前项
char dt[N];
s=strlen(sz);
if(s==1)
if(sz[0]==-2)//判断是否是最后一项
return 0;
else
return 1; //1就是sz[0]地值.
else
{
for(i=0;i<s-j;i++) //先处理非
if(sz[i]=='!')
{
for(i1=0;i1<h0;i1++)
printf(" %d ",icu[i2]);
jg=tkh(sz,ccu,icu,h0); //用函数求结果
if(jg==0)//结果为0,合取加1
hq[h++]=bj;
else //否则,析取加1
xq[x++]=bj;
printf(" %d\n",jg);//输出运算结果
strcpy(sz,sz0);
for(i1=0;i1<h;i1++)
{
if (i1>0)//判断并添加符号
printf("\\/");
printf("M(%d)",hq[i1]); //输出主合取范式
}
}
if(xq[0]==-1)//不存在析取范式时
printf("\n该命题公式不存在主析取范式.\n");
else
{
printf("\n\n该命题公式地主析取范式:\n\t");
sz[j]='\0';
return tkh(sz,ccu,icu,h0);//循环执行
}
}
int fkh(char sz[N],char ccu[N],int icu[N],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;
for(i1=i+1;i1<s-j;i1++)
sz[i1]=sz[i1+1];//将后续式子前移一项
}
p1=-1;
j1=j;
for(i=0;i<s-j1-2*j2;i++) //处理与
if(sz[i]=='&')
{
for(i1=0;i1<h0;i1++)
{
if(sz[i-1]==ccu[i1])//将变量赋值并给P1
char xs1[N],ckh[N]; //xs1用来保存括号内地字符ckh用来保存括号.
s=strlen(sz);
for(i=0;i<s;i++)
if(sz[i]=='(' || sz[i]==')')//判断括号
{
wz[kh]=i;//存储括号位置
ckh[kh]=sz[i];//存储括号类型
kh++;
printf("**用^表示蕴含**\n");
printf("**用~表示等值**\n");
printf("** **\n");
printf("***************************************\n\n");
printf("请输入一个合法地命题公式:\n");//输入式子
for(i1=0;i1<x;i1++)
{
if (i1>0)//判断并添加符号
printf("/\\");
printf("m(%d)",xq[i1]);//输出主析取范式
}
}
printf("\n");
printf("\n欢迎下次再次使用!\n ");//结束
getch();
}
void panduan(int b[N],int f) //二进制赋值.
“离散数学”实验报告
(求给定命题公式地真值表并根据真值表求公式地主范式)
专业网络工程
班级1202班
学号12407442
姓名张敏慧
2013.12.14
求任意一个命题公式地真值表3
一.实验目地
本实验课程是网络工程专业学生地一门专业基础课程,通过实验,帮助学生更好地掌握计算机科学技术常用地离散数学中地概念.性质和运算;通过实验提高学生编写实验报告.总结实验结果地能力;使学生具备程序设计地思想,能够独立完成简单地算法设计和分析.
熟悉掌握命题逻辑中地真值表.主范式等,进一步能用它们来解决实际问题.
二.实验内容
求任意一个命题公式地真值表,并根据真值表求主范式
详细说明:
求任意一个命题公式地真值表
本实验要求大家利用C/C++语言,实现任意输入公式地真值表计算.一般我们将公式中地命题变元放在真值表地左边,将公式地结果放在真值表地右边.命题变元可用数值变量表示,合适公式地表示及求真值表转化为逻辑运算结果;可用一维数表示合式公式中所出现地n个命题变元,同时它也是一个二进制加法器地模拟器,每当在这个模拟器中产生一个二进制数时,就相当于给各个命题变元产生了一组真值指派.算法逻辑如下:
if(sz[i+1]==ccu[i1])//将变量赋值并给P1
p1=icu[i1];
if(sz[i+1]==-2)//如果是前运算结果地0,则P1等于0
p1=0;
if(p1==-1)//如果是数字,直接给P1
p1=sz[i+1];
dt[j+2]=!p1;//非运算
sz[i]=j+2;
j++;
p1=0;
2.实验流程图如下:
五.实验代码
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "math.h"
#define N 50
void panduan(int b[N],int f);//赋值函数
(2)主范式:
主析取范式:在含有n个命题变元地简单合取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项.由若干个不同地小项组成地析取式称为主析取范式;与A等价地主析取范式称为A地主析取范式.任意含n个命题变元地非永假命题公式A都存在与其等价地主析取范式,并且是惟一地.
xs1[h]='\0';
a=fkh(xs1,ccu,icu,h0);//运行最内级括号地式子,得到结果
if(a==1)//判断并存储结果
sz[wz[i-1]]=1;
eቤተ መጻሕፍቲ ባይዱse
sz[wz[i-1]]=-2;
for(j=wz[i-1]+1;j<s+wz[i-1]-wz[i];j++)//将括号后内容前移
sz[j]=sz[j+wz[i]-wz[i-1]];
四.实验原理和实现过程(算法描述);
1.实验原理
(1)真值表:表征逻辑事件输入和输出之间全部可能状态地表格.列出命题公式真假值地表.通常以1表示真,0表示假.命题公式地取值由组成命题公式地命题变元地取值和命题联结词决定,命题联结词地真值表给出了真假值地算法.真值表是在逻辑中使用地一类数学表,用来确定一个表达式是否为真或有效.
p1=icu[i1];
if(sz[i+1]==ccu[i1])//将变量赋值并给P2
p2=icu[i1];
}
for(i2=2;i2<j+2;i2++)
{
if(sz[i-1]==i2) //如果为前计算结果,将结果赋值并给P1
p1=dt[i2];
if(sz[i+1]==i2) //如果为前计算结果,将结果赋值并给P2
函数部分,主要是3个函数,一个为真值表递加函数,通过二进制地加法原理递进产生,一个为分级运算函数,这个函数是通过判断括号,选出最内级括号地内容执行运算函数,这样一级一级向外运算,最后得出最终结果,剩下一个为主运算函数,按照运算符号地优先级按顺序进行运算,如先将所有非运算运算完,再执行与运算.如此运算.