离散数学实践(1)

您所在的位置:网站首页 求合取范式和析取范式例题 离散数学实践(1)

离散数学实践(1)

#离散数学实践(1)| 来源: 网络整理| 查看: 265

*本文为博主本人校内的离散数学专业课的实践作业。由于实验步骤已经比较详细,故不再对该实验额外提供详解,本文仅提供填写的实验报告内容与代码部分,以供有需要的同学学习、参考。

--------------------------------------

编程语言:C++

编译环境:gcc 10.3.0

相关文章:离散数学实践(2)-编程实现关系性质的判断 

目录

一、实验目的

二、实验内容

三、实验步骤及实验结果

1、实验步骤

2、函数接口

3、实验源码

四、实验结果的分析与总结

一、实验目的

1.熟悉主合取范式和主析取范式的构成

2.真值表的输出和打印

3.通过二进制转换成主范式

二、实验内容

根据赋值输出真值表,主合取范式和主析取范式(编程语言不限)。

三、实验步骤及实验结果 1、实验步骤

(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 办公设备维修网 版权所有 豫ICP备15022753号-3