离散数学实验

这篇博客详细介绍了离散数学的实验内容,包括真值计算与真值表、关系性质的判断及闭包计算、计算两节点间长度为m的路径数目、最小生成树的构造以及群的判定。实验涵盖了命题逻辑、关系理论、图论和代数系统的基本概念,并提供了C、C++或Python的实现方式。
摘要由CSDN通过智能技术生成

实验一 真值计算及真值表

一、实验目的
(1)熟悉五个常用联结词合取、析取、条件和双条件的概念,掌握真值表技术。
(2)熟悉五个真值表,掌握真值表技术;
二、实验内容
定义1 设P表示一个命题,由命题联结词┐和命题P连接成┐P,称┐P为P的否定式复合命题, ┐P读“非P”。称┐为否定联结词。┐P是真,当且仅当P为假;┐P是假,当且仅当P为真。
定义2 设P和Q为两个命题,由命题联结词∧将P和Q连接成P∧Q,称P∧Q为命题P和Q的合取式复合命题,P∧Q读做“P与Q”,或“P且Q”。称∧为合取联结词。当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。
定义3 设P和Q为两个命题,由命题联结词∨把P和Q连接成P∨Q,称P∨Q为命题P和Q的析取式复合命题,P∨Q读做“P或Q”。称∨为析取联结词。当且仅当P和Q的真值同为假,P∨Q的真值为假;否则,P∨Q的真值为真。
定义4 设P和Q为两个命题,由命题联结词→把P和Q连接成P→Q,称P→Q为命题P和Q的条件式复合命题,简称条件命题。P→Q读做“P条件Q”或者“若P则Q”。称→为条件联结词。当P的真值为真而Q的真值为假时,命题P→Q的真值为假;否则,P→Q的真值为真。
定义5 令P、Q是两个命题,由命题联结词把P和Q连接成P  Q,称P  Q为命题P和Q的双条件式复合命题,简称双条件命题,P  Q读做“P当且仅当Q”,或“P等价Q”。称为双条件联结词。当P和Q的真值相同时,P  Q的真值为真;否则,P  Q的真值为假。
定义6设命题变元P1、P2、P3、…、Pn是出现在公式G中的所有命题变元,指定P1、P2、P3、…、Pn 的一组真值,则这组真值称为G的一个解释或指派,常记为I。
定义7 真值表:公式G在其所有可能的解释下所取真值的表。
本实验要求:
(1)从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值;
(2)从键盘输入一个命题公式列出其真值表。
(3)用C语言、C++或Python实现。
三、实验源程序
part1:

#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
   
    int a,b;   
    cin>>a>>b;
    //cout<<"合取结果为:"<<(int)a&&b << "\n";
    //cout<<"析取结果为:"<<(int)a||b << "\n";
    printf("The result of ^: %d\n",a&&b);
    printf("The result of v: %d\n",a||b);
    if(a&&!b){
   
        printf("The result of ->: %d\n",0);
    }else{
   
        printf("The result of ->: %d\n",1);
    }
    if(a && b || !a && !b){
   
        printf("The result of <->: %d\n",1);
    }else{
   
        printf("The result of <->: %d\n",0);
    }
    cout<<endl;
    return 0;
}

Part2:

#include<iostream>
using namespace std;
int main(){
   
    char a,ch,b;
    cout<<"What we have defined are as follows:\n";
    cout<<"You can input two truth-values and a operator\n";
    cout<<"You can use ^ v > -\n";
    cout<<"The ^ is conjunction\n";
    cout<<"The v is disjunction\n";
    cout<<"The > is condition\n";
    cout<<"The - is double conditions\n";
    cin>>a>>ch>>b;
    switch(ch){
   
        case '^':
            cout<<"\t"<<a<<"\t"<<b<<"\tresult\n";
            cout<<"\t"<<0<<"\t"<<0<<"\t"<<0<<endl;
            cout<<"\t"<<0<<"\t"<<1<<"\t"<<0<<endl;
            cout<<"\t"<<1<<"\t"<<0<<"\t"<<0<<endl;
            cout<<"\t"<<1<<"\t"<<1<<"\t"<<1<<endl;
            break;
        case 'v':
            cout<<"\t"<<a<<"\t"<<b<<"\tresult\n";
            cout<<"\t"<<0<<"\t"<<0<<"\t"<<0<<endl;
            cout<<"\t"<<0<<"\t"<<1<<"\t"<<1<<endl;
            cout<<"\t"<<1<<"\t"<<0<<"\t"<<1<<endl;
            cout<<"\t"<<1<<"\t"<<1<<"\t"<<1<<endl;
            break;
        case '>':
            cout<<"\t"<<a<<"\t"<<b<<"\tresult\n";
            cout<<"\t"<<0<<"\t"<<0<<"\t"<<1<<endl;
            cout<<"\t"<<0<<"\t"<<1<<"\t"<<1<<endl;
            cout<<"\t"<<1<<"\t"<<0<<"\t"<<0<<endl;
            cout<<"\t"<<1<<"\t"<<1<<"\t"<<1<<endl;
            break;
        case '-':
            cout<<"\t"<<a<<"\t"<<b<<"\tresult\n";
            cout<<"\t"<<0<<"\t"<<0<<"\t"<<1<<endl;
            cout<<"\t"<<0<<"\t"<<1<<"\t"<<0<<endl;
            cout<<"\t"<<1<<"\t"<<0<<"\t"<<0<<endl;
            cout<<"\t"<<1<<"\t"<<1<<"\t"<<1<<endl;
            break;
    }
    return 0;
}

四、实验的分析与思考

  • cout<<或许没有重载bool值与其他的,总之用cout会报错

实验二 关系性质判断及闭包计算

一、实验目的
(1)熟悉关系的性质,掌握求判断关系性质的方法。
(2)熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。
二、实验内容
定义1 设R是集合X上的二元关系,对任意的x∈X,都满足<x,x>∈R,则R是自反的。
定义2 设R是集合X上的二元关系,对任意的x∈X,都满足<x,x>ÏR,则R是反自反的。
定义3 设R是集合X上的二元关系,对任意的x,y∈X,满足<x,y>∈RÞ<y,x>∈R,则R是对称的。
定义4 设R是集合X上的二元关系,对任意的x,y∈X,满足<x,y>∈R∧<y,x>∈RÞx=y,则R是反对称的。
定义5 设R是集合X上的二元关系,对任意的x,y,z∈X,满足<x,y>∈R∧<y,z>∈RÞ<x,z>∈R,则R是传递的。
定义6 设R是A上的二元关系,R的自反(对称、传递)闭包是关系R1,则
① R1是自反的(对称的、传递的)
② RR1
③ 对任何自反的(对称的、传递的)关系R2,若RR2,则R1R2。
R的自反、对称和传递闭包分别记为r®、s®和t®。
定理1 令RAA,则
① r®=R∪IA
② s®=R∪R-1
③ t®=R∪R2∪R3…
Warshall算法:设R是n个元素集合上的二元关系,M是R的关系矩阵;
(1) 置新矩阵A:=M
(2) 置i:=1;
(3) for j=1 to n do

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值