题目:根据给定的式子,先输出其真值表,再利用真值表法求取主析取范式以及主合取范式,输出答案。

举例:以 (P^Q) V (非P^R) 为例。

程序代码

//(P^Q) V (非P^R)
//主合取范式: (非PVQV非R) ^ (非PVQVR) ^ (PV非QVR) ^ (PVQVR)
//主析取范式: (P^Q^R) V (P^Q^非R) V (非P^Q^R) V (非P^非Q^R)
#include <iostream>
#include <cmath>
using namespace std;
int a[1000], b[1000], c[1000];  //P^Q  非P^R  A
int x[1000], y[1000], z[1000];  //P Q R
int n;//输出真值表
void Output_truth_table(){cout << endl << "The truth table is:" << endl;cout << 'P' << '\t' << 'Q' << '\t' << 'R' << '\t';cout << "P^Q" << '\t' << "非P^R" << '\t' << "(P^Q) V (非P^R)" << endl;for(int i = 0; i < pow(2, n); ++i){//输出 P Q R 的真值if(i < pow(2, n-1)){x[i] = 1;cout << 'T' << '\t';}if(i >= pow(2, n-1)){x[i] = 0;cout << 'F' << '\t';}if(i % 4 < 2){y[i] = 1;cout << 'T' << '\t';}if(i % 4 >= 2){y[i] = 0;cout << 'F' << '\t';}if(i % 2 == 0){z[i] = 1;cout << 'T' << '\t';}if(i % 2 == 1){z[i] = 0;cout << 'F' << '\t';}//输出(P^Q)  (非P^R)  (P^Q) V (非P^R) 的真值if(a[i] == 1) cout << 'T' << '\t';else if(a[i] == 0) cout << 'F' << '\t';if(b[i] == 1) cout << 'T' << '\t';else if(b[i] == 0) cout << 'F' << '\t';if(c[i] == 1) cout << 'T' << endl;else if(c[i] == 0) cout << 'F' << endl;}
}//主合取范式
void Master_conjunction(){cout << endl << "Master_conjunction is: ";int count = 0;for(int i = 0; i < pow(2, n); ++i){if(c[i] == 0){  //如果公式真值为假,则输出相应的真值相反的 P Q Rif(x[i] == 1 && y[i] == 1 && z[i] == 1){cout << "(非PV非QV非R)";count++;}else if(x[i] == 1 && y[i] == 1 && z[i] == 0){cout << "(非PV非QVR)";count++;}else if(x[i] == 1 && y[i] == 0 && z[i] == 1){cout << "(非PVQV非R)";count++;}else if(x[i] == 1 && y[i] == 0 && z[i] == 0){cout << "(非PVQVR)";count++;}else if(x[i] == 0 && y[i] == 1 && z[i] == 1){cout << "(PV非QV非R)";count++;}else if(x[i] == 0 && y[i] == 1 && z[i] == 0){cout << "(PV非QVR)";count++;}else if(x[i] == 0 && y[i] == 0 && z[i] == 1){cout << "(PVQV非R)";count++;}else if(x[i] == 0 && y[i] == 0 && z[i] == 0){cout << "(PVQVR)";count++;}if(count != pow(2, n-1)) cout << " ^ ";}}cout << endl;
}//主析取范式
void Master_disjunction(){cout << endl << "Master_disjunction is: ";int count = 0;for(int i = 0; i < pow(2, n); ++i){if(c[i] == 1){  //如果公式真值为真,则输出相应真值的 P Q Rif(x[i] == 1 && y[i] == 1 && z[i] == 1){cout << "(P^Q^R)";count++;}else if(x[i] == 1 && y[i] == 1 && z[i] == 0){cout << "(P^Q^非R)";count++;}else if(x[i] == 1 && y[i] == 0 && z[i] == 1){cout << "(P^非Q^R)";count++;}else if(x[i] == 1 && y[i] == 0 && z[i] == 0){cout << "(P^非Q^非R)";count++;}else if(x[i] == 0 && y[i] == 1 && z[i] == 1){cout << "(非P^Q^R)";count++;}else if(x[i] == 0 && y[i] == 1 && z[i] == 0){cout << "(非P^Q^非R)";count++;}else if(x[i] == 0 && y[i] == 0 && z[i] == 1){cout << "(非P^非Q^R)";count++;}else if(x[i] == 0 && y[i] == 0 && z[i] == 0){cout << "(非P^非Q^非R)";count++;}if(count != pow(2, n-1)) cout << " V ";}}cout << endl;
}int main(){cout << "Please input the number of variable:";cin >> n;cout << endl << "The formula is:(P^Q) V (非P^R)" << endl;int m1 = 0;int m2 = 0;int m3 = 0;//三重循环for(int i = 0; i < 2; ++i){for(int j = 0; j < 2; ++j){for(int k = 0; k < 2; ++k){if(i == 0 && j == 0){a[m1++] = 1;  //P为真,Q为真:P^Q 为真}if(j == 1 || i == 1){a[m1++] = 0;  //P为真,Q为假 或 P为假:P^Q 为假}if(i == 0 || k == 1){b[m2++] = 0;  //P为真 或 P为假,R为假:(非P^R)为假}if(i == 1 && k == 0){b[m2++] = 1;  //P为假 且 R为真:(非P^R)为真}}}}for(int m3 = 0; m3 < pow(2, n); ++m3){if(a[m3] == 0 && b[m3] == 0){  //P^Q 为假 且 (非P^R)为假c[m3] = 0;}else c[m3] = 1;}Output_truth_table();Master_conjunction();Master_disjunction();return 0;
}

实验结果

南邮 | 离散数学实验一:利用真值表法求取主析取范式以及主合取范式的实现相关推荐

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

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

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

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

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

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

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

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

  5. Python实现---南邮离散数学实验四:图的生成及欧拉(回)路的确定

    一.题目要求: 内容: 对具有n个结点的无向图,判断其能否被一笔画. 要求: 对给定n个结点的无向图,进行欧拉图和半欧拉图的判定,若是欧拉图或半欧拉图,则输出所有的欧拉(回)路. 二.实验原理及内容: ...

  6. 南邮 | 离散数学实验二:集合上二元关系性质判定的实现

    题目:根据某一集合元素以及关系矩阵,判断其满足什么特性,输出满足的特性,再求此集合的闭包. 举例:以集合{1,2,3,4}为例.关系矩阵为:[[1,0,1,0],[0,1,0,0],[1,0,1,1] ...

  7. 南邮计算机实验报告合集【非常全】

    南邮计算机实验报告合集 GitHub上自取,可以借鉴,请勿直接抄袭 南京邮电大学数据结构实验,南京邮电大学离散数学实验,南京邮电大学操作系统实验,南京邮电大学电工电子基础实验B实验,南京邮电大学汇编语 ...

  8. 南邮matlab实验报告,南邮matlab实验报告.doc

    南邮matlab实验报告 软件课程设计 实验报告 模块名称:__MATLAB_____________ 专业班级:__ __________ 姓 名:__ _____________ 学 号:__ _ ...

  9. 离散数学实验报告三——真值表与主范式

    离散数学实验报告三--真值表与主范式 一.预习内容: 1.真值表:把变量的各种可能取值与想对应的函数值,用表格的形式一一列举出来,这种表格就叫做真值表 2.命题公式的析(合)取范式 ⑴文字:命题变元及 ...

  10. C语言南邮数据结构实验报告2,南邮数据结构实验报告.docx

    南邮数据结构实验报告 实验报告 课程名称 实验名称数据结构二叉树基本操作以及哈夫曼编码译码系统 实验时间 指导单位指导教师年月日 学生姓名 学院(系) 班级学号专业 二叉树的基本运算: 一.问题描述 ...

最新文章

  1. C#中的Partial
  2. 【原】storm源码之一个class解决nimbus单点问题
  3. 《爬虫与网络编程基础》学习
  4. 一天1个机器学习知识点(五)
  5. 最后关于nginx+passenger+ror+mysql的安装部署过程
  6. JMeter的PUT请求,响应结果中文出现乱码的解决方法
  7. 一位头发发白的神人教你怎么写程序,运维,买电脑,写文章,平面设计!
  8. C/C++中static的用法全局变量与局部变量
  9. python cnn 实例_基于CNN的纹理合成实践【附python实现】
  10. Hexo 入门指南(一) - 简介 准备
  11. cad插件_CAD插件常青藤3.0
  12. 中心药库管理系统 v6.85 是什么
  13. ant design入门_Umi + ant Design Pro最简单的入门教程(一)初
  14. 如何理解word2vec,以及相应库的使用
  15. ZZNUOJ_用C语言编写程序实现1236:数的逆转(附完整源码)
  16. 微信小程序(4)——CSS3渐变
  17. cursor的所有样式
  18. MySQL - binlog 图文详解
  19. 国家高新技术企业申报办法及认定要求,重点介绍
  20. android背景气泡,仿Android微信消息气泡

热门文章

  1. 即时聊天软件开发体会
  2. ImageOptim 图片压缩工具
  3. Xilinx FPGA 编程技巧之常用时序约束详解
  4. [iOS]在xib中设置YYLabel自适应高度
  5. 测试理论基础篇~有它一篇就够了!
  6. 计算机技术应用基础知识,计算机三级PC技术章节习题及答案:计算机应用的基础知识...
  7. 三菱PLC5u与台达变频器modbus RTU通讯
  8. [附源码]java毕业设计卡通动漫商城系统
  9. java jbutton数组_java-JButton需要显示图像数组
  10. 用友T1商贸宝批发零售版SQL SERVER数据库恢复