离散数学上机实验1

合集下载

离散数学上机实验报告

离散数学上机实验报告

离散数学上机实验报告————————————————————————————————作者:————————————————————————————————日期:ﻩ《离散数学》实验报告姓名:学号:班级:ﻬ实验一连结词逻辑运算一.实验目的实现二元合取、析取、蕴涵和等价表达式的计算。

熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。

二.实验内容从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。

要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。

三.实验环境使用Microsoft Visual C++6.0为编程软件,采用称C/C++语言为编程语言实现。

四.实验过程1.算法分析:合取:p,q都为1的时候为1,其他为0析取:p,q都为0的时候为0,其他为1蕴含:p为1,q为0时为0,其他为1等价:p,q同真同假2.程序代码:#include<stdio.h>intmain(){ﻩint P,Q,a,b,c,d,p,q;printf(" P的值");for(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩﻩprintf("\t%d",P);ﻩ}printf("\n Q的值");for(P=0;P<2;P++)ﻩ{ﻩﻩfor(Q=0;Q<2;Q++)ﻩprintf("\t%d",Q);ﻩ}printf("\n 非P的值");for(P=0;P<2;P++){ﻩfor(Q=0;Q<2;Q++)ﻩ{ﻩﻩif(P==0)/*判断非P的值*/ﻩﻩﻩp=1;ﻩﻩelseﻩﻩp=0;ﻩﻩﻩprintf("\t%d",p);ﻩ}ﻩ}ﻩprintf("\n 非Q的值");ﻩfor(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩﻩ{ﻩﻩif(Q==1)/*判断非Q的值*/ﻩﻩﻩq=0;ﻩelseﻩﻩq=1;ﻩprintf("\t%d",q);}ﻩ}ﻩprintf("\n P与Q的值");for(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩ{ﻩﻩﻩif(Q==0||P==0)/*判断P与Q的值*/ﻩa=0;ﻩﻩelseﻩﻩa=1;ﻩprintf("\t%d",a);ﻩ}ﻩ}ﻩprintf("\n P或Q的值");ﻩfor(P=0;P<2;P++)ﻩ{for(Q=0;Q<2;Q++)ﻩﻩ{ﻩif(Q==1||P==1)/*判断P或Q的值*/ ﻩﻩﻩb=1;ﻩelseﻩﻩb=0;ﻩprintf("\t%d",b);}ﻩ}ﻩprintf("\nP蕴含Q的值");ﻩfor(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩﻩ{ﻩﻩif(P==1&&Q==0)/*判断P蕴含Q的值*/ﻩﻩc=0;ﻩﻩelseﻩc=1;printf("\t%d",c);}}printf("\nP等价Q的值");for(P=0;P<2;P++)ﻩ{ﻩﻩfor(Q=0;Q<2;Q++)ﻩ{ﻩﻩif(P==Q)/*判断P等价Q的值*/ ﻩd=1;ﻩﻩelseﻩﻩd=0;ﻩﻩprintf("\t%d",d);}ﻩ}printf("\n");return 0;}3.实验数据及结果分析:实验二关系的复合运算及逆运算一.实验目的熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。

离散数学实验报告()

离散数学实验报告()

《离散数学》实验报告专业网络工程班级姓名学号授课教师二 O 一六年十二月目录实验一联结词的运算实验二根据矩阵的乘法求复合关系实验三利用warshall算法求关系的传递闭包实验四图的可达矩阵实现实验一联结词的运算一.实验目的通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习和锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解和记忆命题连接词运算。

二.实验原理(1) 非运算, 符号: ,当P=T时,P为F, 当P=F时,P为T 。

(2) 合取, 符号: ∧ , 当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。

(3) 析取, 符号: ∨ , 当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。

(4) 异或, 符号: ▽ , 当且仅当P和Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。

(5) 蕴涵, 符号: →, 当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q 的真值为真。

(6) 等价, 符号: ↔, 当且仅当P,Q的真值不同时,命题P↔Q的真值才为假;否则,P→Q的真值为真。

三.实验内容编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。

四.算法程序#include<stdio.h>void main(){printf("请输入P、Q的真值\n");int a,b;scanf("%d%d",&a,&b);int c,d;if(a==1)c=0;else c=1;if(b==1)d=0;else d=1;printf("非P、Q的结果为%d,%d\n",c,d);int e;if(a==1&&b==1)e=1;else e=0;printf("合取的结果为%d\n",e);int f;if(a==0&&b==0)f=0;else f=1;printf("析取的结果为%d\n",f);int g;if(a==1&&b==0)g=0;else g=1;printf("单条件的结果为%d\n",g);int h;if(a==b)h=1;else h=0;printf("双条件的结果为%d\n",h);}内容格式:新罗马,五号,行间距固定值18磅五.实验结果六.心得体会通过编程,学会了析取、合取、单条件连接词、双条件连接词的用法。

离散数学计算机实验报告

离散数学计算机实验报告

离散实验报告实验一真值计算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 的真值为假。

本实验要求从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。

用C语言或MATLAB实现。

3、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。

源代码:#include <iostream.h>void main(){int p,q;cout<<"请分别输入P,Q的真值:";cin>>p>>q;if(p>1||p<0){cout<<"P的真值有误,请重新输入!"<<endl;}if(q>1||q<0){cout<<"Q的真值有误,请重新输入!"<<endl;}if(p==0&&q==0){cout<<"P∧Q=0"<<endl;cout<<"P∨Q=0"<<endl;cout<<"P→Q=1"<<endl;cout<<"P<->Q=1"<<endl;}if(p==0&&q==1){cout<<"P∧Q=0"<<endl;cout<<"P∨Q=1"<<endl;cout<<"P→Q=1"<<endl;cout<<"P<->Q=0"<<endl;}if(p==1&&q==0){cout<<"P∧Q=0"<<endl;cout<<"P∨Q=1"<<endl;cout<<"P→Q=0"<<endl;cout<<"P<->Q=0"<<endl;}if(p==1&&q==1){cout<<"P∧Q=1"<<endl;cout<<"P∨Q=1"<<endl;cout<<"P→Q=1"<<endl;cout<<"P<->Q=1"<<endl;}}运行结果:请分别输入P,Q的真值:0 1P∧Q=0P∨Q=1P→Q=1P<->Q=0Press any key to continue实验二关系闭包计算1、实验目的熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。

离散数学上机实验1

离散数学上机实验1

实验11实验内容(1)求任意一个命题公式的真值表。

(2)利用真值表求任意一个命题公式的主范式。

(3)利用真值表进行逻辑推理。

注:(2)和(3)可在(1)的基础上完成。

2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。

例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。

本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。

目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。

3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。

真值表中命题变元的取值具有如下规律:每列中0 和1 是交替出现的,且0 和1 连续出现的个数相同。

n 个命题变元的每组赋值的生成算法可基于这种思想。

含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。

为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、蕴含和等价联结词分别用!、&、|、-、+来表示。

算符之间的优先关系如表1-1所示:表1-1算符优先级优先算法,我们采用两个工作栈。

一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。

算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd (按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND 栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。

离散数学上机实验报告

离散数学上机实验报告
实验三、用沃尔算法求传递闭包
一、实验内容
从键盘输入二元关系用沃尔算法求出它的传递闭包,并输出。
二、实验步骤
熟悉沃尔算法,然后将其用程序编写出来,任意输入二元关系,观察程序运行结果,
用另一种算法算出结果,与其比较,调试程序。
三、实验代码
#include<stdio.h>
int main()
{
int n,i,j,k,a[10][10];
printf("﹁q=0\n");
printf("p∧q=1\n");
printf("p∨q=1\n");
printf("p→q=1\n");
printf("p<->q=1\n");
}
continue;
}
if('n'==t)
break;
}
return 0;
}
四、实验体会
求真值运算中,应注意各种连接词的试用方法,以及其在不同情况下的真值。
printf("\n");
}
return 0;
}
四、实验体会
熟悉并使用沃尔算法,关系矩阵中只有0和1,所以用沃尔算法求得的数若大于1,应该返回1,其余不变。
实验四、三种闭包运算
一、实验内容
从键盘输入一个二元关系,求它的自反闭包,对称闭包,传递闭包,并输出。
二、实验步骤
编写程序,从键盘输入一个二元关系,当求传递闭包时,试与沃尔算法的传递闭包做比较,观察程序运行结果,调试程序。
char t;
while(t)
{
printf("是否运算程序(y/n):\n");

离散数学实验指导书

离散数学实验指导书

实验一命题逻辑公式化简【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。

【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。

实验用例:用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过(表决开关亮)。

【实验原理和方法】(1)写出5人表决开关电路真值表,从真值表得出5人表决开关电路的主合取公式(或主析取公式),将公式化简成尽可能含五个基本联结词最少的等价公式。

(2)上面公式中的每一个联结词是一个开关元件,将它们定义成C语言中的函数。

(3)输入5人表决值(0或1),调用上面定义的函数,将5人表决开关电路真值表的等价公式写成一个函数表达式。

(4)输出函数表达式的结果,如果是1,则表明表决通过,否则表决不通过。

#include<stdio.h>main(){int a[5],i;printf(“please input five persons’ choices (1 means YES 0 means NO):\n”);for(i=0;i<5;i++)scanf(“%d”,&a[i]);a[5]=0;for(i=0;i<5;i++)a[5]=a[5]+a[i];if(a[5]>=3)printf(“YES!”);elseprintf(“NO!”);}参考代码:#include<stdio.h>int vote(int a,int b,int c,int d,int e){//五人中任取三人的不同的取法有10种。

i f( a&&b&&c || a&&b&&d || a&&b&&e || a&&c&&d || a&&c&&e || a&&d&&e || b&&c&&d || b&&c&&e || b&&d&&e || c&&d&&e)return 1;e lsereturn 0;}void main(){i nt a,b,c,d,e;p rintf("请输入第五个人的表决值(0或1,空格分开):");s canf("%d%d%d%d%d",&a,&b,&c,&d,&e);i f(vote(a,b,c,d,e))printf("很好,表决通过!\n");e lseprintf("遗憾,表决没有通过!\n");}//注:联结词不定义成函数,否则太繁实验二命题逻辑推理【实验目的】加深对命题逻辑推理方法的理解。

离散数学实验

离散数学实验

离散数学实验报告(实验一)专业:自动化班级:学号:姓名:日期2010.10.28一实验内容(二选一)1. 从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值(A)2. 求任意一个命题公式的真值表(B),并根据真值表求主范式(C)。

二实验目的熟悉掌握命题逻辑中的联接词、真值表、主范式等,进一步能用它们来解决实际问题。

三实验环境进入Visual C++ 环境后,选择菜单“File | New”,在弹出的对话框中单击上方的选项卡“Projects”,选择“Win32 Console Application”工程类型,在“Project name”一栏中填写工程名例如MyFirst,在“Location”一栏中填写工程路径(目录). 选择菜单“Project | Add to Project | New”,为工程添加新的C++源文件。

选择菜单为工程添加新源文件在“File Name”栏填入新添加的源文件名,如MyFirst.cpp,“Location”一栏指定文件路径,按按钮“OK”完成C++源程序的系统新建操作。

编译源程序:选择Build | Build菜单(F7为快捷键),系统将会在Output窗口给出所有的错误信息和警告信息。

当所有错误修正之后,系统将会生成扩展名为.exe的可执行文件。

对于Output窗口给出的错误信息,双击可以使输入焦点跳转到引起错误的源代码处以进行修改。

执行程序:选择Build | Execute菜单项(Ctrl + F5为快捷键),执行程序,将会出现一个DOS窗口,按照程序输入要求正确输入数据后,程序即正确执行。

四实验原理和实现过程(算法描述)1.程序主界面本程序界面主要有两个操作,1:求真值。

2:求任何公式的真值。

操作1完成A 类题要求,操作2完成A,B类题要求。

如果出输入的操作项不是0,1,2,则会提示出错,再次选择。

其界面如图所示:2.算法描述和实现过程在做A类题时,算法实现,首先判断输入格式是否正确,在把蕴含(→),等值(←→),通过变换,化成只有非,合取和析取的等价公式,在利用C语言中的运算符非(!),与(&&)和或(||)算出任何两元变量的真值。

《离散数学》实验课程指导书

《离散数学》实验课程指导书
printf("**************************************************\n\n");
printf("您要在多少个数中进行线性查找,请输入(1~100):");
scanf("%d",&n);
printf("\n");
while(n<1 || n>100) //如果输入的数据列表长度不在[1,100]之间
scanf("%d",&a[i]);
i=0;
do
{
exchanged=0;
for(j=0;j<l-1-i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
exchanged=1;
}
if (i==0)
printf("\n");
printf("第%d趟冒泡排序法由小到大排序后:\n",i+1);
{ int r[50];
int length;
}list,*sqlist;
int CreateSqlist(sqlist s)
{
int i;
printf("请输入您要进行搜索的数据队列的长度:\n");
scanf("%d",&(s->length));
printf("\n请输入您要进行搜索的%d个数据:\n",s->length);
printf("冒泡排序算法\n");
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验1
1实验内容
(1)求任意一个命题公式的真值表。

(2)利用真值表求任意一个命题公式的主范式。

(3)利用真值表进行逻辑推理。

注:(2)和(3)可在(1)的基础上完成。

2实验目的
真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。

例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。

本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。

目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。

3算法的主要思想
利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。

真值表中命题变元的取值具有如下规律:每列中0 和1 是交替出现的,且0 和1 连续出现的个数相同。

n 个命题变元的每组赋值的生成算法可基于这种思想。

含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。

为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、蕴含和等价联结词分别用!、&、|、-、+来表示。

算符之间的优先关系如表1-1所示:
表1-1算符优先级
优先算法,我们采用两个工作栈。

一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。

算法的基本思想是:
(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;
(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd (按字典序排列,同一个命题变元只出现一次);
(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND 栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。

相关文档
最新文档