柴玉梅


摘要:離散數學作為計算機專業的基礎理論核心課程,在計算機科學中具有極其重要的地位。但離散難教、離散難學也是師生共同的心聲。針對計算機專業的大一學生,提出一種案例教學法,將離散數學與程序設計完美結合,使學生初步認識到學習離散數學的重要性,增強學習興趣,提高教學效率。
關鍵詞:離散數學;程序設計;教學改革;三人表決器
中圖分類號: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.
【通聯編輯:王力】