Java版本的如下链接所示:

Java语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客https://blog.csdn.net/weixin_56319483/article/details/128489247?spm=1001.2014.3001.5501

Python版本的如下链接所示:

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

实验内容:

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

实验要求:

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

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

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

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

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

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

C++实现 源代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <cstring>
#include <cmath>
#include <fstream>
using namespace std;const int length = 150; //定义数组长度
char arr[length];   //用来存放2^n次方个字符,其中n表示变量个数
int brr[length][14];   //brr用来存放真值表
int beg = 80;             //字符P对应的ASCII码,用于输出P,Q,R
int sta1 = 0, sta2 = 0;   //sta1表示真值为T的个数,sta2表示真值为F的个数int main()
{int num;  //变量个数cout << "请输入变量个数 : ";cin >> num;cout << endl;int sum = pow(2, num);  //2^ncout << "请输入" << sum << "个字符(用T 或 F表示) : ";for (int i = 1; i <= sum; i++){cin >> arr[i];if (arr[i] == 'T')sta1++;elsesta2++;}cout << endl;//处理真值表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++;}cout << "输出公式对应的真值表 : " << endl;for (int i = 1; i <= num; i++){cout << char(beg++) << "      ";}cout << 'A';cout << endl;cout << "———————————" << endl;beg = 80;for (int i = 1; i <= sum; i++){for (int j = num; j >= 1; j--){if (brr[i][j] == 1)cout << 'T' << "      ";elsecout << 'F' << "      ";}cout << arr[i];cout << endl;}cout << endl;int k = 0;cout << "输出主析取范式:" << endl;for (int i = 1; i <= sum; i++){if (arr[i] == 'T'){k++;cout << '(';for (int j = num; j >= 1; j--){if (brr[i][j] == 1){cout << (char)(beg++);}else{cout << "┓" << (char)(beg++);}if (j != 1)cout << "∧";}cout << ')';if (k < sta1)cout << "∨";}beg = 80;}cout << endl<< endl;k = 0;cout << "输出主合取范式:" << endl;for (int i = 1; i <= sum; i++){if (arr[i] == 'F'){k++;cout << '(';for (int j = num; j >= 1; j--){if (brr[i][j] == 0){cout << (char)(beg++);}else{cout << "┓" << (char)(beg++);}if (j != 1)cout << "∨";}cout << ')';if (k < sta2)cout << "∧";}beg = 80;}cout << endl;return 0;
}

运行结果截图:

分析与总结:

本次的实验任务已完成,在本次实验中主要使用变量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数组对应位置的数值,确定输出的合取或析取符号,以及否定符号。

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

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

    C++版本的看这个链接: [离散数学]C++语言实现利用真值表法求主析取范式和主合取范式_zhtstar的博客-CSDN博客https://blog.csdn.net/weixin_56319483/ ...

  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. 离散数学 求命题公式的主析取范式和主合取范式

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

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

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

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

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

最新文章

  1. Django 图片上传upload_to路径指定失效的问题记录
  2. 【解决方案】chrome打开新标签页自动打开chrome://newtab并且跳转到谷歌香港
  3. 1930年的上海是什么样
  4. Python 全局变量和局部变量迷惑人的小示例
  5. Windows——桌面快捷键Ctrl+Z撤销的文件恢复解决方案
  6. 买卖股票的最佳时机Python解法
  7. Apache优化——日志管理
  8. BZOJ2690: 字符串游戏(平衡树动态维护Dfs序)
  9. java 俄文,俄文字体在word里面是什么
  10. 【BZOJ4453】cys就是要拿英魂! 后缀数组+单调栈+set
  11. 数据科学 | 如何解释线性回归的R方
  12. 【AD封装】插件电阻贴片电阻排阻分装(带3D)
  13. ics-07—CTF
  14. 植物大战僵尸海盗22困难通关
  15. 六年级下计算机教案封面,六年级下册信息技术教案21279(43页)-原创力文档
  16. JQuery Mobile试试水
  17. 9月18日 第5届 FLASH开发者交流会 暨FLASH CAMP 2010
  18. 【Java】java9的of方法
  19. 003 Rust 网络编程,使用 IpAddr
  20. Python大数据分析(二):大数据技术基础

热门文章

  1. IDEA 设置类注释和方法注释模板
  2. IEC 60601-2-36:2014 Medical electrical equipment - Part 2-36:Particular requirements for the basic
  3. Labview温度采集系统(状态机)
  4. 【强化学习论文合集】十三.2018机器人与自动化国际会议论文(ICRA2018)
  5. PaddleDetection进行路标检测
  6. Mysql中各种常用的命令行客户端工具
  7. socket的read和available()方法
  8. 平面曲线曲率的计算-MATLAB
  9. 配置linux开发板ssh登录
  10. python3 判断当前月份多少天