离散数学的命题公式 ,真值表 ,主析取范式的c++代码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近老师让我们做离散数学的程序设计;正好做完了,想发在这里记录一下学习成果.


一、命题公式 ,真值表 ,主析取范式原理

(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; 
     
 }


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容 。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C语言来实现命题公式真值表生成。下面是一个基本的示例代码: ```c #include <stdio.h> // 递归函数,用于生成命题公式真值表 void generateTruthTable(int variables[], int numVariables, int index) { // 如果遍历完所有变量,输出当前的真值表行 if (index == numVariables) { for (int i = 0; i < numVariables; i++) { printf("%d ", variables[i]); } printf("\n"); return; } // 递归调用,分别生成变量为0和1时的真值表行 variables[index] = 0; generateTruthTable(variables, numVariables, index + 1); variables[index] = 1; generateTruthTable(variables, numVariables, index + 1); } int main() { int numVariables; printf("请输入变量的数量:"); scanf("%d", &numVariables); int variables[numVariables]; generateTruthTable(variables, numVariables, 0); return 0; } ``` 在这个示例代码中,我们使用递归函数`generateTruthTable`来生成命题公式真值表。首先,我们定义一个整型数组`variables`来存储每个变量的取值(0或1)。然后,在`generateTruthTable`函数中,我们递归地遍历每个变量,并将其取值分别设为0和1,直到遍历完所有变量。当遍历完所有变量时,我们输出当前的真值表行。 在`main`函数中,我们首先获取变量的数量,并创建相应大小的`variables`数组。然后,我们调用`generateTruthTable`函数来生成真值表。 你可以根据自己的需求进行修改和扩展这个示例代码。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值