C++版本的看这个链接:

【离散数学】C++语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客https://blog.csdn.net/weixin_56319483/article/details/128489182?spm=1001.2014.3001.5501

Python版本的看这个链接:

【离散数学】Python语言实现利用真值表法求主析取范式和主合取范式https://blog.csdn.net/weixin_56319483/article/details/128488744?spm=1001.2014.3001.5501

实验内容:

针对给定的包含任意个变量的真值表,编程实现用真值表法求取其所对应的主析取范式和主合取范式。

实验要求:

能够掌握通过真值表求取相应主析取和主合取范式的方法及原理。

先复习一下基本概念:或者直接跳到下面看源代码

1.主合取范式:若干个极大项的合取(交集)。例如:

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

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

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

Java实现 源代码如下:

package P3;
import java.util.Scanner;
public class 离散数学01 {public static void main(String[] args) {int length = 150;char[] arr = new char[length];int[][] brr = new int[length][14];int beg=80, sta1=0, sta2=0;int num = 0;System.out.print("输入变量的个数:");Scanner sc = new Scanner(System.in);num = sc.nextInt();int sum = (int)Math.pow(2,num);System.out.print("请输入"+sum+"个字符(用T或F表示):");for (int i = 1; i <= sum; i++){arr[i] = sc.next().charAt(0);if (arr[i] == 'T')sta1++;elsesta2++;}int cnt1 = 0, cnt2 = 1;for (int i = sum - 1; i >= 0; i--){cnt1 = 0;int val = i;while (cnt1 < num){cnt1++;brr[cnt2][cnt1] = val % 2;val = val / 2;}cnt2++;}int h = 0;for(int i[]:brr){for(int j:i){h++;System.out.print(j+" ");if(h%14==0)System.out.println();}}System.out.println("输出公式对应的真值表 :");for (int i = 1; i <= num; i++){System.out.print((char)(beg++)+"      ");}System.out.println('A');System.out.println("----------------------");beg = 80;for (int i = 1; i <= sum; i++){for (int j = num; j >= 1; j--){if (brr[i][j] == 1)System.out.print('T' + "      ");elseSystem.out.print('F' + "      ");}System.out.print(arr[i]);System.out.println();}System.out.println();int k=0;System.out.println("输出主析取范式:");for (int i = 1; i <= sum; i++){if (arr[i] == 'T'){k++;System.out.print('(');for (int j = num; j >= 1; j--){if (brr[i][j] == 1){System.out.print((char)(beg++));}else{System.out.print("¬" + (char)(beg++));}if (j != 1)System.out.print("∧");}System.out.print(')');if (k < sta1)System.out.print("∨");}beg = 80;}System.out.println();k=0;System.out.println("输出主合取范式:");for (int i = 1; i <= sum; i++){if (arr[i] == 'F'){k++;System.out.print('(');for (int j = num; j >= 1; j--){if (brr[i][j] == 0){System.out.print((char) (beg++));}else{System.out.print("¬" + (char)(beg++));}if (j != 1)System.out.print("∨");}System.out.print(')');if (k < sta2)System.out.print("∧");}beg = 80;}System.out.println();}
}

运行结果截图:

分析与总结:

本次的实验任务已完成,在本次实验中主要使用变量length定义数组长度,使用一维数组arr用来存放2^n次方个字符,其中n表示变量个数;使用二维数组brr用来存放真值表,使用变量beg并赋初值80,此为P的ASCII码,用来记录PQR。使用sta1, sta2 分别记录输入的‘T’与‘F’的个数。

在读取到输入的字符个数后提示用户输入相应数量的字符,获取字符后存入数组中,并分别记录‘T’和‘F’的个数。之后在二维数组中处理真值表,先给真值表赋初值0或1,在输出真值表时判断相应位置上的字符,如果是1,输出‘T’;否则输出‘F’。并在对应位置上输出获取到了字符。

在输出析取范式时,对arr数组各位进行遍历,如果为‘T’,则输出主析取范式;如果为‘F’,则输出主合取范式。此时要结合brr数组对应位置的数值,确定输出的合取或析取符号,以及否定符号。

【离散数学】Java语言实现利用真值表法求主析取范式和主合取范式相关推荐

  1. 【离散数学】C++语言实现利用真值表法求主析取范式和主合取范式

    Java版本的如下链接所示: Java语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客https://blog.csdn.net/weixin_56319483/art ...

  2. 离散数学范式c语言实验报告,离散数学实验报告-利用真值表法求主析取范式及主合取范式的实现...

    1.实 验 报 告( / 学年 第 一 学期)课程名称离散数学实验名称利用真值表法求主析取范式及主合取范式的实现实验时间年月日指导单位指导教师学生姓名班级学号学院(系)专 业 实 验 报 告实验名称利 ...

  3. 【C语言】 利用筛选法求100以内的素数

    算法思路: 原理很简单,就是当i是质(素)数的时候,i的所有的倍数必然是合数.如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质数的倍数筛掉. 代码如下: //C语言 筛选法求100以内的素 ...

  4. 利用真值表法求取主析取范式以及主合取范式的实现(C++)

    代码如下: #include <iostream> #include <stack> #include <string> #include <vector&g ...

  5. 【数理逻辑】范式 ( 合取范式 | 析取范式 | 大项 | 小项 | 极大项 | 极小项 | 主合取范式 | 主析取范式 | 等值演算方法求主析/合取范式 | 真值表法求主析/合取范式 )

    文章目录 一. 相关概念 1. 简单 析取 合取 式 ( 1 ) 简单合取式 ( 2 ) 简单析取式 2. 极小项 ( 1 ) 极小项 简介 ( 2 ) 极小项 说明 ( 3 ) 两个命题变项 的 极 ...

  6. 离散实验 真值表求主析取范式、主合取范式的计算机语言实现

    离散数学 实验一 标题:真值表求主析取范式.主合取范式的计算机语言实现 其他课程的一些其他实验源码也可在本人github主页找到哦 链接如下:https://github.com/Schiz0mani ...

  7. 离散数学实践一编程判断主析取范式和主合取范式【java实现】

    文章目录 实验要求 二 编程思路分析 困难所在 二 完整代码 实验要求 实验类型:设计性 实验目的 通过算法设计并编程实现,使学生掌握利用计算机语言判别合式公式主范式的基本方法. 实验内容 给定合式公 ...

  8. 离散数学 求命题公式的主析取范式和主合取范式

    Description 输入命题公式的合式公式,求出公式的真值表,并输出该公式的主合取范式和主析取范式. Input 命题公式的合式公式 Output 公式的主析取范式和主合取范式,输出形式为:&qu ...

  9. 使用C++求命题公式的主析取范式与主合取范式

    最近的离散数学的一个上机作业,要求任意输入一个命题公式,求它的真值表与主析取范式和主合取范式.其中的命题连接词都是用特殊符号来表示(怕麻烦--),并最终选择使用C++来编写程序. 先贴代码: // 五 ...

最新文章

  1. 4月书讯(上) | 这本书值得所有的等待
  2. HOWTO:安装包卸载时如何保留部分文件不被卸载
  3. 图解Windows下开发Objective-C程序之一 - 搭建Objective-C开发环境
  4. 机器学习:结点的实现,决策树代码实现(二)
  5. SUSE Linux 启动顺序
  6. Java程序设计语言基础01:绪论
  7. 这个Python资源在GitHub上标星超8000,现在被翻译成了中文 | 资源
  8. html canvas drawrect 变形,canvas图形变换
  9. 均值与标准差函数MATLAB
  10. 已知尺寸计算像素公式
  11. android 三星存储位置设置,三星手机如何设置储存位置
  12. 盛迈坤电商:电商运营要怎么样进行选款
  13. 字符串逆序输出c语言,5、输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。...
  14. SSM+智能社区服务的设计与实现 毕业设计-附源码221512
  15. 先别急着质疑新世相,这里或许有内容付费的真相
  16. 51nod2657二进制数字
  17. 【PMP】一、项目管理框架
  18. 启帆工业机器人综合收入如何_广州启帆工业机器人有限公司
  19. 微带滤波器摘要_滤波器详细分类摘要.ppt
  20. F - Anti-Rhyme Pairs(rmq算法模板)(后缀数组算法模板)

热门文章

  1. 在服务器上进行深度学习的入门教程
  2. 给程序员做几年老婆后的心得
  3. win10获取管理员权限_论文排版工具—LaTeX 安装+获取
  4. Weblogic中-Xms Xmx PermSize MaxPermSize的含义
  5. SpringBoot 生成pdf文件(含报表)
  6. 什么是视觉动力 ​——工业设计与视觉动力
  7. 去 OPPO 面试,被问麻了。。。
  8. Linux20系统怎么链接WiFi,在Deepin 20系统下安装Linux图形无线Wi-Fi扫描器LinSSID
  9. 一刀工具箱 - 亲戚称呼换算
  10. python无水印下载视频_用 Python 下载抖音无水印视频