《离散数学》实验报告
实验二:程序实现逻辑运算
程序实现关系运算
姓 名: 叶云燕 学 号: 2014211617 班 级: 计算机科学与技术14-2班 实验地点: 4号机房 实验时间: 2015.10.2
《离散数学》实验报告
1 实验目的和要求
实验目的:
(1) 编程实现各种常见的逻辑运算;
(2) 编程实现关系的闭包运算的求解。
实验要求:
(1)在luojiyuns.cpp文件中补充And(), Or(), Not(), Xor(), Single_condition(),
Doublbe_condition()以实现基本逻辑运算;
(2)运行程序验证用常量表示的复杂逻辑表达式的真值求解方法
(3)补充luojiyuns.cpp文件中的Unknown_Logic()的两段代码以实现以变量表示的复杂逻
辑表达式的结果输出(以真值表形式)以及主合取和主析取范式输出
(4)熟练使用C++进行编码,掌握VC++6.0的有关操作。
(5) 在warshallDlg.cpp文件中的CWarshallDlg::OnCalculate() 函数中补充warshall算法
2 实验环境和工具
装有VC++6.0的电脑一台。
3 实验结果
3.1算法流程图
3.2程序核心代码
(1)编程实现基本的逻辑运算
/****************************************************
//该函数用于检测输入的单逻辑值是否正确
//val_one为要进行检测的逻辑值
*****************************************************/
int luoji::onevalue_Judge(int val_one) {
if(val_one==0||val_one==1 )
《离散数学》实验报告
}
return 1; else return 0;
/****************************************************
//该函数用于检测输入的双逻辑值是否正确
//val_one和val_two为要进行检测的逻辑值
*****************************************************/
int luoji::twovalue_Judge(int val_one,int val_two) {
if((val_one==0||val_one==1)&&(val_two==0||val_two==1))
}
/****************************************************
//该函数用于进行逻辑与运算
//val_one和val_two分别为参与运算的逻辑值
//调用twovalue_Judge函数检测是否符合输入要求,然后进行
//逻辑运算并返回运算结果
*****************************************************/
int luoji::And(int val_one,int val_two) {
int jud; return 1; else return 0;
《离散数学》实验报告
if(twovalue_Judge(val_one,val_two)==1)
}
/****************************************************
//该函数用于进行逻辑或运算
//val_one和val_two分别为要进行计算逻辑值
//调用twovalue_Judge函数检测是否符合输入要求,然后进行
//逻辑运算并返回运算结果
*****************************************************/
int luoji::Or(int val_one,int val_two) {
int jud; else { Output(); { } if(val_one==1&&val_two==1)return 1; else return 0; return 2; } cout<<"\n\n";
if(twovalue_Judge(val_one,val_two)==1)
{
《离散数学》实验报告
} if(val_one==1||val_two==1)return 1; else return 0;
else
}
/****************************************************
//该函数用于进行逻辑非运算
//val_one为要进行计算的逻辑值
//调用onevalue_Judge函数检测是否符合输入要求,然后进行
//逻辑运算并返回运算结果
*****************************************************/
int luoji::Not(int val_one) {
int jud; if( onevalue_Judge(val_one)==1 ) { } else if(val_one==1)return 0; else return 1; { Output(); return 2; } cout<<"\n\n";
《离散数学》实验报告
{ Output();
return 2;
}
/****************************************************
//该函数用于进行逻辑异或运算
//val_one和val_two分别为要进行计算逻辑值
//调用twovalue_Judge函数检测是否符合输入要求,然后进行
//逻辑运算并返回运算结果
*****************************************************/
int luoji::Xor(int val_one,int val_two) {
int jud; if(twovalue_Judge(val_one,val_two)==1) { } else { } Output(); return 2; if(val_one+val_two==1)return 1; else return 0; } cout<<"\n\n";
《离散数学》实验报告
cout<<"\n\n";
}
************************************************
//该函数用于进行逻辑单条件运算
//val_one和val_two分别为要进行计算逻辑值
*****************************************************/
int luoji::Single_condition(int val_one,int val_two) {
if(twovalue_Judge(val_one,val_two)==1) { } else { } Output(); return 2; if(val_one==1&&val_two==0)return 0; else return 1; int jud;
cout<<"\n\n";
}
《离散数学》实验报告
/****************************************************
//该函数用于进行逻辑双条件运算
//val_one和val_two分别为要进行计算逻辑值
*****************************************************/
int luoji::Double_condition(int val_one,int val_two) {
}
(4)warshall算法
int jud; if(twovalue_Judge(val_one,val_two)==1) { } else { } cout<<"\n\n"; Output(); return 2; if(val_one+val_two==1)return 0; else return 1;
/****************************************************
//该函数用于将获得的矩阵使用warshall算法计算并输出
//将输入的string转化存储到二维矩阵two_mat中
*****************************************************/
《离散数学》实验报告
void CWarshallDlg::OnCalculate()
{
CString dimension,string,tmp;
CString ch;
static int dim;
int num; int count=0; GetDlgItem( DIMENSION )->GetWindowText(dimension); dim=atoi(dimension); int *one_mat=new int[dim*dim]; //定义一维动态数组 int **two_mat=new int *[dim]; //定义二维动态数组 for(int i=0;i<dim;i++) two_mat[i] = new int[dim]; GetDlgItem( STRING )->GetWindowText( string ); for(i=0;i<dim*dim;i++) //将字符串转化存到一维数组中
{ if((i+1)%dim==0) { } else ch=string.GetAt(i+count); num=atoi(ch); one_mat[i]=num; ch=string.GetAt(i+count); count=count++; } for( i=0;i<dim;i++) //将一维数组转化存到二维数组中 for(int j=0;j<dim;j++) two_mat[i][j]=one_mat[dim*i+j];
《离散数学》实验报告
// 以下语句段使用warshall方法改变矩阵中的值以帮助求解传递闭包
// 需要用到的矩阵的行、列值存储在变量dim中,矩阵中各个位置上的对应 // 值存储在two_mat[][]数组中
for(int k=0;k<dim;k++) { } tmp=string=""; for(i=0;i<dim;i++) { } for(int j=0;j<dim;j++) { } string+="\r\n"; tmp.Format(" %d ",two_mat[i][j]); string+=tmp; for(i=0;i<dim;i++) { } for( i=0;i<dim;i++) for(int j=0;j<dim;j++) two_mat[i][j]=temp[i][j]; for(int j=0;j<dim;j++) temp[i][j]=(two_mat[i][j])||(two_mat[i][k]&two_mat[k][j]); int** temp=new int*[dim]; for(i=0;i<dim;i++) temp[i]=new int[dim];
《离散数学》实验报告
GetDlgItem( RESULT)->SetWindowText(string ); //输出warshall算法计算结果
}
3.3运行结果
实验运行截图如下:
《离散数学》实验报告
《离散数学》实验报告
3.4运行结果分析
基本实现所要求的运算和功能。 4 思考题(可选)
5 实验心得
《离散数学》实验报告
本次实验采用C++编程来实现基本的逻辑运算和关系的闭包运算,让我们将离散数学中的知识和编程知识结合在一起,两种知识都得到强化。
离散数学实验报告(1)
实验名称:构造任意合式公式的真值表
姓名:卢松
指导老师:冯伟森
年级:11级2班
学号:1143041172
学院:计算机
1、 功能
给出任意变元的合式公式,构造该合式公式的真值表。
1、 基本思想
仍然以用数值变量表示命题变元为前提规范,合式表示的表示。程序计算前将转换后的合式公式输入到本程序首个sign:语句后的条件位置上。另外使用a[N]来表示合式公式中所出现的n个命题变元。
一位数组a[N]除了表示n个命题变元外,它还是一个二进制加法的模拟器,每当在这个模拟器中产生一个二进制数时,就相当于给各命题变元产生了一组真值指派。其中数值一表示真值为1,数值0表示真值为0.
2、 算法逻辑
(1) 将二进制加法模拟器a[N]赋初值,ai=0(i=1,2,…,n)。
(2) 计算模拟器中所对应于模拟器所给出的一组真值指派下合式公式的真值。(条件语句)
(3) 输出真值表中对应于模拟器所给出的一组真值指派及这组真值指派所对应的一行真值。
(4) 在模拟器a[N]中,模拟产生下一个二进制数值。
(5) 若a[N]中的数值等于2n,则结束,否则转(2)。
3、 源程序
#include<stdio.h>
#define N 4
main()
{
int a[N];
int i,z;
printf("构造任意公式的真值表");
printf("\n");
for(i=1;i<=4;i++)
{
a[i]=0;
printf("a[%d]=0 ",i);
}
sign:
if(!(a[1]==1||a[2]==1)&&((a[1]==1||a[3]==1)||a[4]==1))
z=1;
else
z=0;
for(i=N;i>=1;i--)
printf("%4d",a[i]);
printf(" |%4d\n",z);
i=1;
sing:
a[i]=a[i]+1;
if(a[i]<2)
goto sign;
else
a[i]=0;
i++;
if(i<=4)
goto sing;
}
备注:本题是以~(PνQ)Λ((PνR)νS)为例子进行实验的。
4、 实验总结:
由于自己的技术问题只是验证了一组数据,因为时间紧迫所以来不及修改,课后会继续修改。从这次实验中学习到了很多,尤其是对真值表的判断条件,同时感觉到想像和实际操作之间的距离。
离散数学实验报告姓名学号班级离散数学实验报告实验一真值计算实验内容从键盘输入两个命题P和Q的真值求它们的合取析取条件和双条件的真值…
离散数学实验报告姓名学号班级实验一连结词逻辑运算一实验目的实现二元合取析取蕴涵和等价表达式的计算熟悉连接词逻辑运算规则利用程序语言…
离散数学课程设计学院计算机学院学生姓名学号指导教师评阅意见提交日期20xx年11月25日引言离散数学是现代数学的一个重要分支也是计…
离散数学实验报告题目专业学号姓名指导教师提交日期实验一五种连结词的逻辑运算一实验目的用C语言实现两个命题变元的合取析取蕴涵和等价表…
浙江万里学院实验报告课程名称离散数学实验名称数理逻辑实验专业班级计算机111姓名李俊学号20xx014620实验日期20xx10专…
离散数学实验报告题目专业学号姓名指导教师提交日期实验一五种连结词的逻辑运算一实验目的用C语言实现两个命题变元的合取析取蕴涵和等价表…
离散数学应用实践实验报告课序号03学号姓名任课教师陈瑜评阅成绩评阅意见提交报告时间20xx年1月3日课程名称离散数学运用实践学生姓…
离散数学实验报告目录第一章实验概述311实验目的312实验内容313实验环境3第二章实验原理和实现过程421实验原理4211逻辑连…
离散数学实验报告目录第一章实验概述311实验目的312实验内容313实验环境3第二章实验原理和实现过程421实验原理4211逻辑连…
实验一命题逻辑推理1实验用例根据下面的命题试用逻辑推理方法确定谁是作案者写出推理过程1营业员A或B偷了手表2若A作案则作案不在营业…