【离散数学】Python语言实现利用真值表法求主析取范式和主合取范式
Java版本的看这个链接:
Java语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客
https://blog.csdn.net/weixin_56319483/article/details/128489247?spm=1001.2014.3001.5501
C++版本的看这个链接:
【离散数学】C++语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客
https://blog.csdn.net/weixin_56319483/article/details/128489182?spm=1001.2014.3001.5501
实验内容:
针对给定的包含任意个变量的真值表,编程实现用真值表法求取其所对应的主析取范式和主合取范式。
实验要求:
能够掌握通过真值表求取相应主析取和主合取范式的方法及原理。
先复习一下基本概念:或者直接跳到下面看源代码
1.主合取范式:若干个极大项的合取(交集)。例如:

2.主析取范式:若干个极小项的析取(并集)。例如:

3.极大项:就是包含全部数目的命题变元的析取表达式。例如:p∨¬q∨r

4.极小项:包含全部数目的命题变元的合取表达式。例如:¬p∧¬q∧r

python实现 源代码如下:
# Author: zhtstar
# Time: 2022/3/26 13:56length = 150
# list = [0 for i in range(length)] #arr
list1 = [[0 for i in range(14)] for j in range(length)] #brr
beg=80
sta1=sta2=0num = eval(input("输入变量的个数:"))
sum = 2**num
listt = [0 for i in range(sum)] #arr
print("请输入"+str(sum)+"个字符(用T或F表示):",end='')
listt = list(map(str,input().split(' ')))
# print(listt)
for i in range(0,sum):# c = input()c=listt[i]if c == 'T':sta1 = sta1+1else:sta2 = sta2+1
# print(sta1,sta2)
cnt1 = 0
cnt2 = 1
for i in range(sum-1,-1,-1):cnt1 = 0val = iwhile cnt1
运行结果截图:

| 分析与总结: 本次的实验任务已完成,在本次实验中主要使用变量length定义数组长度,使用一维列表listt用来存放2^n次方个字符,其中n表示变量个数;使用二维列表list1用来存放真值表,使用变量beg并赋初值80,此为P的ASCII码,用来记录PQR。使用sta1, sta2 分别记录输入的‘T’与‘F’的个数。 在读取到输入的字符个数后提示用户输入相应数量的字符,获取字符后存入列表中,并分别记录‘T’和‘F’的个数。之后在二维列表中处理真值表,先给真值表赋初值0或1,在输出真值表时判断相应位置上的字符,如果是1,输出‘T’;否则输出‘F’。并在对应位置上输出获取到了字符。 |
在输出析取范式时,对listt列表各位进行遍历,如果为‘T’,则输出主析取范式;如果为‘F’,则输出主合取范式。此时要结合list1列表对应位置的数值,确定输出的合取或析取符号,以及否定符号。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
