提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
最近老师让我们做离散数学的程序设计;正好做完了,想发在这里记录一下学习成果.
一、命题公式 ,真值表 ,主析取范式原理
(1)否定 ┓ (!) : 当P为真时 ┓P为假, 当P为假时 ,┓P为真。
(2)合取 ∧ (&&): 当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;
否则,P∧Q的真值为假。
(3)析取 ∨ (||): 当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;
否则,P∨Q的真值为真。
(4)蕴涵 → (┓P∨Q): 当且仅当P为真,Q为假时,命题P→Q的真值才为假;
否则,P→Q的真值为真。
(5)等价 ↔ : 当且仅当P,Q的真值不同时,命题P↔Q的真值才为假;
否则,P↔Q的真值为真。
(6)命题公式真值表: 设A是含有n个命题变元的命题公式, 将命题公式A在所
有赋值之下取值的情况汇列成表, 称为命题公式A的真值表。
(7)极小项: 对于给定的命题变元,若由命题变元或其否定组成的合取式满足:
(1) 每个命题变元或其否定两者之一只出现一次。
(2) 按字典顺序或按下标从小到大顺序出现。
则称这样的合取式为所给命题变元产生的极小项
二、使用步骤
1.引入库
代码如下(示例)
#include<iostream>
#include<string>
2.读入数据
代码如下(示例):
#include<iostream>
#include<string>
using namespace std;
struct List
{
int p;
int q;
int r;
//存储在当前指定的真值指派下命题公式的真值
int answer;
}a[8];
int main()
{
int p,q;
cout<<"请输入命题p的真值(0/1),p=";
cin>>p;
cout<<endl;
cout<<"请输入命题p的真值(0/1),q=";
cin>>q;
cout<<endl;
cout<<"非p="<<(!p )<<endl;
cout<<"p∧q="<<(p&q)<<endl;
cout<<"p∨q="<<(p||q)<<endl;
cout<<"p→q="<<(!p||q)<<endl;
cout<<"p等价q="<<((!p||q)&&(!q||p))<<endl;
//1.利用三重循环为结构体赋值(真值指拍及)
int r,answer,k=0;
printf("p q r P∧Q∨R\n");
for(p=0;p<2;p++)
{
for(q = 0 ;q<2;q++)
{
for(r=0;r<2;r++)
{
a[k].p = p;
a[k].q = q;
a[k].r = r;
answer = p && q || r;
a[k].answer = answer;
k++;
printf("%d %d %d %d\n",p,q,r,answer);
}
}
}
//2.打印真值表
int z=0;
printf( "P∧Q∨R的主析取范式为");
for(k=0;k<8;k++)
{ if(a[k].answer =1)
{
printf("mv%d ",k);
}
}
//3.
/* cout<<"P∧Q∨R的主析取范式为";
string str = "";
for(k=0;k<8;k++)
{
if(a[k].answer==1)
{
str = str + "m" + to_string(k) + "v";
}
}
str = str.substr(0,str.length()-1);
cout<< str <<endl; */
/* int r;
int answer = p && q || r; //P∧Q∨R
p=q=r=0;
printf("p=0,q=0,r=0, P∧Q∨R %d\n",answer);
p=q=0;
r=1;
answer = p&&q||r;
printf("p=0,q=0,r=1,%d\n",answer);
p=r=0;
q=1;
printf("p=0,q=0,r=0,%d%n",answer);
p=0;
q=r=1;
printf("p=0,q=0,r=0,%d%n",answer);
p=1;
q=r=0;
printf("p=0,q=0,r=0,%d%n",answer);
p=r=1;
q=0;
printf("p=0,q=0,r=0,%d%n",answer);
p=q=1;
r=0;
answer = p&&q||r;
p=q=r=1;
printf("p=0,q=0,r=0,%d%n",answer);*/
return 0;
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容 。