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

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

一、预习内容:

1、真值表:把变量的各种可能取值与想对应的函数值,用表格的形式一一列举出来,这种表格就叫做真值表
2、命题公式的析(合)取范式
⑴文字:命题变元及其否定统称为文字
⑵简单析取式:仅有限个文字组成的析取式
⑶简单合取式:仅有限个文字组成的合取式
3、从定义可得
⑴一个简单析取式是重言式当且仅当它同时含有某个命题变元及其否定式。
⑵一个简单合取式是矛盾式当且仅当它同时含有某个命题变元及其否定式。
4、范式存在定理:任一个命题公式都存在着与之等价的析取范式与合取范式。

二、实验目的与要求(及主要实验仪器、设备):

1.通过实验,帮助学生更好地掌握计算机科学技术常用的离散数学中的概念、性质和运算;
2. 通过实验提高学生编写实验报告、总结实验结果的能力;
3. 使学生具备程序设计的思想,能够独立完成简单的算法设计和分析。
实验环境:软件:vc++6.0 ,硬件:电脑

三、实验原理(方法与与原理分析):

1.真值表:表征逻辑事件输入和输出之间全部可能状态的表格。列出命题公式真假值的表。通常以1表示真,0表示假。命题公式的取值由组成命题公式的命题变元的取值和命题联结词决定,命题联结词的真值表给出了真假值的算法真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效。
2.主析取范式:在含有n个命题变元的简单合取式中,若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单合取式为小项。由若干个不同的小项组成的析取式称为主析取范式;与A等价的主析取范式称为A的主析取范式。任意含n个命题变元的非永假命题公式A都存在与其等价的主析取范式,并且是惟一的。
3.主合取范式:在含有n个命题变元的简单析取式中。若每个命题变元与其否定不同时存在,而两者之一出现一次且仅出现一次,称该简单析取式为大项。由若干个不同的大项组成的合取式称为主合取范式;与A等价的主合取范式称为A的主合取范式。任意含n个命题变元的非永真命题公式A都存在与其等价的主合取范式,并且是惟一的。

四、实验步骤(程序代码与实验过程):

#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int LEN = 140 + 10;
char arr[LEN];
int brr[LEN][4+10];
int beg = 80;
int sta1 = 0, sta2 = 0;
main()
{
int m;
memset(brr, 0, sizeof(brr));
int num;
cout << “请输入变量个数:”;
cin >> num;
cout << endl;
int sum=pow(2, num);
cout << “请输入”<<sum << “个字符(用T 或 F表示)”;
for(m=1;m<=sum;m++)
{cin >> arr[m];
if(arr[m] == ‘T’)
sta1++;
else
sta2++;}
cout << endl;
int cnt1 = 0, cnt2 = 1;
for(m=sum-1;m>=0;m–)
{cnt1 = 0;
int val=m;
while(cnt1 < num)
{cnt1++;
brr[cnt2][cnt1] = val%2;
val = val/2;}
cnt2++;}
cout << “输出公式对应的真值表 :”<< endl;
for(m=1;m<=num;m++)
{cout << char(beg++) << " ";}
cout << ‘A’;
cout << endl;
cout << “———————————” << endl;
beg = 80;
for(m= 1;m<=sum;m++)
{for(int j = num; j >= 1; j–)
{if(brr[m][j] == 1)
cout << ‘T’ << " ";
else
cout << ‘F’ << " ";}
cout << arr[m];
cout << endl;}
cout << endl;
int k = 0;
cout << “输出主析取范式:” << endl;
for(m=1; m<=sum;m++)
{if(arr[m] == ‘T’){
k++;
cout << ‘(’;
for(int j = num; j >= 1; j–)
{if(brr[m][j] == 1)
{cout << (char)(beg++);}
else
{cout << “┓” << (char)(beg++);}
if(j != 1)
cout << “∧”;}
cout << ‘)’;
if(k < sta1)
cout << “∨”;}
beg = 80;}
cout << endl
<< endl;
cout << “输出主合取范式:” << endl;
for(m= 1;m<=sum;m++)
{if(arr[m] == ‘F’)
{k++;
cout << ‘(’;
for(int j = num; j >= 1; j–)
{if(brr[m][j] == 0)
{cout << (char)(beg++);}
else
{cout << “┓” << (char)(beg++);}
if(j != 1)
cout << “∨”;}
cout << ‘)’;
if(k < sta2)
cout << “∧”;}
beg = 80;}
cout << endl;
return 0;}

五、实验结果(数据分析与结论):

在这里插入图片描述

六、问题讨论:

问:范式有什么特点:?
答:(1) 范式中不出现联结词→、←;,求范式时可消去:
A→B↔┐A∨B
A←B↔(┐A∨B)∧(A∨┐B)
(2)范式中不出现如下形式的公式:
┐┐A, ┐(A∧B), ┐(A∨B)
因为:┐┐A↔A
┐(A∧B)↔┐A∨┐B
┐(A∨B)↔┐A∧┐B
(3)在析取范式中不出现如下形式的公式:
A∧(B∨C)
在合取范式中不出现如下形式的公式:
A∨(B∧C)
因为:A∧(B∨C)↔(A∧B)∨(A∧C)
A∨(B∧C)↔(A∨B)∧(A∨C)

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩辕椿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值