离散数学实践(1) |
您所在的位置:网站首页 › 求合取范式和析取范式例题 › 离散数学实践(1) |
*本文为博主本人校内的离散数学专业课的实践作业。由于实验步骤已经比较详细,故不再对该实验额外提供详解,本文仅提供填写的实验报告内容与代码部分,以供有需要的同学学习、参考。 -------------------------------------- 编程语言:C++ 编译环境:gcc 10.3.0 相关文章:离散数学实践(2)-编程实现关系性质的判断 目录 一、实验目的 二、实验内容 三、实验步骤及实验结果 1、实验步骤 2、函数接口 3、实验源码 四、实验结果的分析与总结 一、实验目的1.熟悉主合取范式和主析取范式的构成 2.真值表的输出和打印 3.通过二进制转换成主范式 二、实验内容根据赋值输出真值表,主合取范式和主析取范式(编程语言不限)。 (1)输入变量个数 在主函数中进行输入,以变量n接收。 (2)输入真值结果 在主函数中进行输入,以变长数组valueRet[totalNumber+1]接收。真值结果共2的n次方个,为了后续对真值表的操作方便,这里将数组长度定义为2的n次方+1,令操作时下标从1开始,下标为0处的元素搁置。 (3)进行真值表赋值 创建真值表数组truthTable[totalNumber+1][n+1],用于存放真值表相关信息。用0和1来表示命题变元可能的各个取值。有n个命题变元,故一共要赋值n列、2^n行次。下面以n为3来解释程序: 当n为3时也即有3个命题变元时,共有8个真值结果(要输入8次T或F)。可能的取值为0到2^3-1即0到7.将0到7这9个数转换为2进制,并将每个位分配给每个变元即可。如: P Q R 1 1 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 0 0 0 0 0 这些就是P、Q、R所有的取值。显然,问题转换成了将0到2^n-1 的所有数转换成2进制。易得代码。 (4)打印真值表 将数组truthTable中的值与valueRet中的值按格式打印出来。 用printf函数的域宽控制%-md来对齐打印。数组中值为1,则打印T,值为0,则打印F.for循环控制。注意变长数组的传参问题。这里没法直接传,用了二级指针来调用。 (5)求主析取范式并输出 可从真值结果为真即valueRet中的值为T判断主析取范式。找到相关行,按主析取范式的格式打印出来即可。 (6)求主合取范式并输出 和主析取范式一样,找到valueRet中值为F的行,按主和区范式的格式打印即可。 2、函数接口 //计数真值结果 void CountTF(char c, int* countT, int*countF) //输出真值表 void OutPutTruthTable(char** truthTable, char* valueRet, int col, int row) //主析取范式 void MasterDisjunction(char** truthTable, char* valueRet, int col, int row,int countT,int* count) //主合取范式 void MasterConjunction(char** truthTable, char* valueRet, int col, int row,int countF,int* count) 3、实验源码 #include #include #include #include using namespace std; /* 姓名:碳基肥宅-wyd 程序功能:离散数学实践作业一:输出给定结果的真值表和主析取范式、主合取范式 环境:gcc 10.3.0 */ //计数真值结果 void CountTF(char c, int* countT, int*countF) { if(c == 'T') { (*countT)++; } else if(c == 'F') //考虑到空白字符等干扰 { (*countF)++; } } //输出真值表 void OutPutTruthTable(char** truthTable, char* valueRet, int col, int row) { char ch = 'P'; for(int i = 1; i |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |