柴玉梅
摘要:离散数学作为计算机专业的基础理论核心课程,在计算机科学中具有极其重要的地位。但离散难教、离散难学也是师生共同的心声。针对计算机专业的大一学生,提出一种案例教学法,将离散数学与程序设计完美结合,使学生初步认识到学习离散数学的重要性,增强学习兴趣,提高教学效率。
关键词:离散数学;程序设计;教学改革;三人表决器
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2020)26-0129-02
Abstract: As the core course of basic theory of computer science, discrete mathematics plays an important role in computer science. But it is difficult to teach and also difficult to learn, which is the common acknowledgement of teachers and students. Focused on the freshmen of computer majors, a case teaching method is proposed in this paper. The program combines discrete mathematics and programming perfectly so that students can realize the importance of learning discrete mathematics. As a result, it will enhance the students learning interest and improve teaching efficiency.
Key words: discrete mathematics; programming; teaching reform; three-person voting machine
1 引言
離散数学是计算机科学中基础理论的核心课程。它是研究离散量的结构及相互关系的数学学科。该课程为数据结构、编译原理、操作系统、数据库原理和人工智能等后续课程的学习打下坚实的数学基础,同时也有利于提高学生的抽象思维、逻辑思维和计算思维能力[1]。但离散数学概念繁多、理论性强、抽象度高的特点使学生感觉该课抽象、难懂、没用[2-3]。结合学生的学情,探讨一种针对大一学生的、与程序设计相结合的离散数学教学改革方案。
2 我校离散数学教学现状
离散数学是我校计算机专业的学位课之一,开设在大一下学期,教学计划为48学时,教学内容包括三部分:数理逻辑、关系、图论。长期以来,离散数学一直采用“定义—定理—证明—习题”的教学模式,致使学生感觉该课晦涩难懂、枯燥无味。学生常常为应付学分不得已而学之,造成“学生痛、教师伤”的尴尬局面。
此外,对于只接触了高级语言程序设计一门专业课的大一学生,往往还看不出离散数学与计算机学科的直接联系及其在计算机领域中的实际应用,“离散数学无用论”在学生中呼声很高。
针对此情形,笔者曾试图将离散数学在计算机中的实际应用介绍给学生。比如等价类用于软件测试;等价关系用于粗糙集;Huffman编码用于文件压缩等。但这些知识对于大一的学生而言还是比较遥远与抽象的,对增强学生的学习兴趣效果也不甚明显。
近年来,笔者在多年教学经验的基础上,立足我校学生的实际情况(只学习过程序设计语言),结合教学内容设计实验案例,可让学生更容易体会到离散数学在计算机领域,特别是程序设计中的应用价值。下面结合三人表决器的实验案例加以具体介绍。
3融入程序设计的离散数学教学案例设计
以课后作业的方式将任务布置给学生:设计并编程实现一个3人表决器。设三个裁判分别为A、B、C,有两个及以上裁判同意,则通过表决;否则,未通过表决。同意与否通过键盘输入,可以用0、1或T、F 表示。再进一步,如果A是主裁判,有一票否决权。又该如何设计?
通过此案例,旨在让学生体会离散数学在程序设计中发挥着重要作用。
3.1简化程序设计
从学生的作业中发现如图1所示的程序片段来实现A没有一票否决权。
就要求实现的功能而言,此程序没有问题。但能不能简化判断条件呢?以图1中的①②为例,如果写成命题公式,①可以表示为:[A∧B∧C] ,②可以表示为:[A∧B∧?C] 。①与②综合在一起即为[(A∧B∧C)∨(A∧B∧?C)],对该式可以用分配律进一步化简为[(A∧B)]。按照这个思路,上述8个判断条件可以简化为[(A∧B)∨(A∧C)∨(B∧C)]。据此,上述程序片段就可以优化为图2所示的代码。
3.2开辟程序设计新思路
在实现A具有一票否决权的表决器时,学生的通常做法是:当A未行使一票否决权时,通过循环语句,对表决结果进行累加求和,当结果大于等于2时,通过表决;否则未通过。经过笔者提示,有学生用真值表进行分析。如图3所示。
真值表的前四行转化成程序设计语言很简单,不赘述。当A未行使一票否决权时,该生分析了图3中的第5行,发现只有当B与C同时为0时,结果为0,于是写出了图4所示的程序片段。
程序片段3与程序片段4是否等价呢?很容易通过德摩根律证明。程序片段3中的条件(b==0 && c==0)的否定为!(b==0 && c==0),与!(b==0) || !(c==0)等价,进而与(b==1 || c==1)等价,即为程序片段4的表达方式。
3.3验证程序设计的缜密性
值得一提的是,有位冯同学写了如图6所示的程序片段来实现A具有一票否决权的表决器,但不确定自己的判定是否缜密。实际上,通过构造[A∧(B∨C)]的真值表,发现它与图3是一致的,故可以肯定图6的程序片段是完全正确的。
3.4实施效果
作业讲解交流后,收到了学生的一些反馈信息,现摘录部分与大家共享。“通过这次作业才发现离散和编程的关联这么大,以前一直认为这两门课程没有什么联系。”“离散可以用编程表示,编程体现着离散,这次作业展示,让我看到了大家的代码,异曲同工,又体现着个人的特点”。“我最开始只知道离散数学是计算机科学的基础。但对于离散和计算机专业之间有怎样的关系,我还是不清楚。如何把离散数学與编程联系起来,我还是不太明白。通过这次交流,我才明白离散数学能够指导编程去解决实际问题。”还有的学生表示,今后会投入更多的精力到离散数学的学习中,用离散的知识充实编程的内容。
学生的积极反馈信息表明此方案收到了预期的效果,也激励笔者今后挖掘更多、更好的教学案例来满足学生的这种求知欲。
4 结束语
通过上述3人表决器教学案例的实施效果,不难看出:将程序设计与离散数学理论相结合的教改方法,使大一学生对离散数学与计算机专业的相关性有了一定的认识,激发了学生的学习兴趣,取得了初步的预期效果。因此,笔者将继续深入研究离散数学各部分内容与程序设计整合模块的设计项目,以提升学生分析问题和解决问题的能力,满足应用型人才培养的需求。
参考文献:
[1] 左孝凌, 李为鑑, 刘永才.离散数学[M].上海:上海科学技术文献出版社,1981.
[2] 潘志刚,叶绿,向坚.基于实践能力培养的离散数学教学改革探索[J].浙江科技学院学报,2009,21(4):373-376.
[3] 刘明.结合科研实际的离散数学教学方法探索[J].科教导刊(下旬),2018(2):107-108.
[4] 张剑妹,李艳玲,吴海霞.结合计算机应用的离散数学教学研究[J].数学学习与研究,2014(1):2-4.
[5] 林睦纲,郑光勇,陈坚祯.应用型本科院校离散数学教学改革与探索[J].衡阳师范学院学报,2017,38(6):124-127.
【通联编辑:王力】