計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)范文

時間:2023-11-06 17:24:12

導(dǎo)語:如何才能寫好一篇計(jì)算機(jī)程序設(shè)計(jì)藝術(shù),這就需要搜集整理更多的資料和文獻(xiàn),歡迎閱讀由公文云整理的十篇范文,供你借鑒。

篇1

關(guān)鍵詞:MATLAB;遺傳算法;概率積分法;預(yù)計(jì)參數(shù)

中圖分類號:TD327文獻(xiàn)標(biāo)志碼:A

概率積分法是我國礦山開采沉陷預(yù)計(jì)的主要方法,提高概率積分法預(yù)計(jì)精度的關(guān)鍵在于減少模型誤差和參數(shù)誤差,模型誤差主要來自于該方法的基本假設(shè),往往難以改進(jìn),此時致力于減小參數(shù)誤差意義更為明顯[1]。目前求取概率積分法地表移動預(yù)計(jì)參數(shù)常采用傳統(tǒng)的優(yōu)化算法,如線性最小二乘法等,但此類算法對參數(shù)初值要求較高,而且容易出現(xiàn)局部極小值等問題,從而使擬合的參數(shù)失去準(zhǔn)確性。

遺傳算法(Genetic Algorithm,簡稱GA)是一種宏觀意義下的仿生算法,它模仿的機(jī)制是一切生命與智能的產(chǎn)生與進(jìn)化過程。它通過模擬達(dá)爾文“優(yōu)勝劣汰、適者生存”的原理鼓勵產(chǎn)生好的結(jié)構(gòu),通過模仿孟德爾遺傳變異理論在迭代過程中保持已有的結(jié)構(gòu),同時尋找更好的結(jié)構(gòu)[2]。與傳統(tǒng)的優(yōu)化算法相比,遺傳算法適用于高度非線性的不連續(xù)多峰函數(shù)的優(yōu)化,可以有效的避免出現(xiàn)局部極小值, 而且遺傳算法對初值參數(shù)的依賴性不高,在所設(shè)定的參數(shù)范圍內(nèi)通過人工進(jìn)化的方式獲得最優(yōu)解,因而具有較強(qiáng)的可操作性和簡便性。

由于GA在大量問題求解過程中獨(dú)特的優(yōu)點(diǎn)和廣泛的應(yīng)用,許多基于MATLAB的遺傳算法工具箱相繼出現(xiàn),其中出現(xiàn)較早、影響較大、較為完備者當(dāng)屬英國設(shè)菲爾德(Sheffield)大學(xué)推出的遺傳算法工具箱[3]。本文便是基于此遺傳算法工具箱,在MATLAB平臺上設(shè)計(jì)了根據(jù)工作面任意監(jiān)測點(diǎn)觀測數(shù)據(jù)求取基于概率積分法的地表移動預(yù)計(jì)參數(shù)程序。

1概率積分法預(yù)計(jì)公式

由于X軸正方向逆時針旋轉(zhuǎn)到斜向觀測線的角度為44°,所以預(yù)計(jì)的斜向曲線在三維圖形中顯示,并通過MATLAB函數(shù)view調(diào)整視角,使擬合曲線所在的平面正對觀察者,便于觀察。從圖3可知,曲線的擬合效果良好,預(yù)計(jì)曲線和實(shí)測值基本吻合。

遺傳算法預(yù)計(jì)的走向觀測線下沉值和水平移動值的中誤差分別為28.15 mm和15.03 mm,它們分別占最大值的1.2%和1.7%,預(yù)計(jì)的斜向觀測線下沉值和水平移動值的中誤差分別為42.30 mm和33.56 mm,它們分別占最大值的1.8%和3.4%。文獻(xiàn)[5]13-16中預(yù)計(jì)的走向觀測線下沉值和水平移動值中誤差分別占最大值的1.3%和4.4%,預(yù)計(jì)的斜向觀測線下沉值和水平移動值中誤差分別占最大值的2.1%和6.0%。通過與文獻(xiàn)[5]13-16中采用的線性最小二乘法求參的精度比較,可知遺傳算法是一種適應(yīng)能力更強(qiáng)且求參精度更高的方法。

4結(jié)論

1) 遺傳算法對參數(shù)的初值要求不高,只需在運(yùn)算之前為地表移動預(yù)計(jì)參數(shù)設(shè)置合理的范圍,然后通過人工進(jìn)化地方式從此范圍內(nèi)獲得最優(yōu)解即可。

2) 遺傳算法是一種高效的全局尋優(yōu)算法,不像傳統(tǒng)的線性最小二乘法那樣易出現(xiàn)局部極小值,在求取預(yù)計(jì)參數(shù)的過程中能夠避免出現(xiàn)病態(tài)問題。

3) 地表觀測站實(shí)測數(shù)據(jù)往往會受到測量誤差、粗差、檢測點(diǎn)缺失等各種不利因素的影響,從而增加求取概率積分法預(yù)計(jì)參數(shù)的難度,而遺傳算法具有較強(qiáng)的抗干擾能力,可以很好地?cái)M合出地表移動預(yù)計(jì)參數(shù)。

參考文獻(xiàn):

[1]查劍鋒,馮文凱,朱曉峻. 基于遺傳算法的概率積分法預(yù)計(jì)參數(shù)反演[J]. 采礦與安全工程學(xué)報(bào),2011,28(4):655-658.

[2]周明,孫樹棟. 遺傳算法原理與應(yīng)用[M]. 北京:國防工業(yè)出版社,2002:8-150.

[3]雷英杰. MATLAB遺傳算法工具箱及應(yīng)用[M]. 西安:西安科技大學(xué)出版社,2005:62-94.

篇2

關(guān)鍵詞:C++;辯證法;認(rèn)識論;案例教學(xué)

程序設(shè)計(jì)貫穿于計(jì)算機(jī)專業(yè)教學(xué)的全程,是培養(yǎng)學(xué)生計(jì)算機(jī)能力的出發(fā)點(diǎn)和落腳點(diǎn)。對于計(jì)算機(jī)專業(yè)的學(xué)生來講,不掌握程序設(shè)計(jì),就不能算真正地學(xué)習(xí)了計(jì)算機(jī)。C++語言是應(yīng)用最為廣泛的程序設(shè)計(jì)語言之一,它功能強(qiáng)大,使用靈活,是大學(xué)計(jì)算機(jī)專業(yè)程序設(shè)計(jì)類課程的首選語言。但是C++語言過于靈活,被公認(rèn)為是最難學(xué)的程序設(shè)計(jì)語言,尤其是指針、對象等概念的引入更進(jìn)一步增加了C++語言教和學(xué)的難度。

作為認(rèn)識世界和改造世界的有力工具,辯證法和認(rèn)識論已用來闡釋計(jì)算機(jī)科學(xué)和技術(shù)領(lǐng)域的某些問題[1-3],并用來指導(dǎo)計(jì)算機(jī)專業(yè)的課程教學(xué)[4-5]。本文將辯證法和認(rèn)識論用于C++程序設(shè)計(jì)教學(xué),對教學(xué)內(nèi)容進(jìn)行整合,闡述C++自身存在的辯證規(guī)律;同時,按照認(rèn)知規(guī)律和實(shí)踐第一的觀點(diǎn),提出一種新的案例教學(xué)模式。通過以上教學(xué)方法,力圖解決C++教與學(xué)中存在的難題,從而達(dá)到良好的教學(xué)效果。

1辯證法指導(dǎo)下的教學(xué)內(nèi)容設(shè)計(jì)

1.1課程的知識點(diǎn)及其關(guān)系

本門課程的知識點(diǎn)及相互間關(guān)系如圖1所示。數(shù)據(jù)類型中的簡單類型包括整型、實(shí)型、字符型、布爾型和枚舉型等,復(fù)合類型包括數(shù)組、向量、字符串和文件等。流程控制由順序、選擇和循環(huán)三種結(jié)構(gòu)完成。

數(shù)據(jù)類型和流程控制的集成形成函數(shù),函數(shù)進(jìn)一步發(fā)展形成對象,封裝性、繼承性和多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的三要素。模板編程和異常處理可以保證程序的重用性和健壯性。在求解復(fù)雜問題時,需要對程序結(jié)構(gòu)進(jìn)行組織,如采用多文件編程等;如果同一問題的求解有多種算法,則需進(jìn)行性能測試,選擇運(yùn)行效率最高的算法。

圖1C++語言的知識結(jié)構(gòu)

1.2內(nèi)容整合

C++語言與C語言、數(shù)據(jù)結(jié)構(gòu)等課程緊密相關(guān)。合理安排每門課程的內(nèi)容,科學(xué)地處理好三者的關(guān)系對課程教學(xué)具有重要意義。

1.2.1C語言與C++語言內(nèi)容的整合

在傳統(tǒng)的教學(xué)方法中,通常是先進(jìn)行C語言教學(xué),然后再進(jìn)行C++語言教學(xué),造成了部分教學(xué)內(nèi)容的重復(fù)。因?yàn)镃語言是C++語言的一個子集,因此完全可以直接進(jìn)行C++語言教學(xué),將其分為C++(上)和C++(下),C++(上)側(cè)重于基礎(chǔ)語法和結(jié)構(gòu)化程序設(shè)計(jì);C++(下)側(cè)重于面向?qū)ο蟪绦蛟O(shè)計(jì)和簡單算法。整合前后的效果如表1所示,整合后的效果明顯好于整合前,體現(xiàn)了整體大于部分之和的系統(tǒng)論思想。

1.2.2與數(shù)據(jù)結(jié)構(gòu)課程的銜接

C++程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)一脈相承,C++程序設(shè)計(jì)是數(shù)據(jù)結(jié)構(gòu)教學(xué)的基礎(chǔ),數(shù)據(jù)結(jié)構(gòu)可以促進(jìn)C++程序設(shè)計(jì)水平的提高,將二者資源進(jìn)行整合與共享對兩門課程建設(shè)均有好處。為了使二者更好的銜接,在C++程序設(shè)計(jì)語言中主要介紹簡單的排序和查找算法及線性鏈表的基本操作。

1.2.3教材的選擇

基于前述的知識點(diǎn)及整合后的教學(xué)內(nèi)容。我們選用了清華大學(xué)出版社出版的三本書作為教材和參考書。第一本是錢能編寫的《C++程序設(shè)計(jì)教程(第二版)》(以下簡稱“錢版”),該書重于編程技能的培養(yǎng),講解純粹的C++語言;第二本是譚浩強(qiáng)編寫的《C++程序設(shè)計(jì)》(以下簡稱“譚版”),該書講解細(xì)致,在講解C++語言的同時也講解了C語言的內(nèi)容,適合初學(xué)者;第三本是鄭莉編寫的《C++語言程序設(shè)計(jì)(第三版)》(以下簡稱“鄭版”),該書引入案例教學(xué),知識講解逐層深入,思路清晰。此外,鄭版以國家精品課為支撐,配套資源豐富。

在具體教學(xué)中,我們以錢版作為教材,同時汲取譚版和鄭版的部分內(nèi)容,并融入我們的經(jīng)驗(yàn),形成具有自身特色的內(nèi)容組織與安排。整本教材分為兩個學(xué)期講授:上學(xué)期講授第一部分“基礎(chǔ)編程”和第二部分“過程化編程”,下學(xué)期講授第三部分“面向?qū)ο缶幊獭焙偷谒牟糠帧案呒壘幊獭薄?/p>

1.3C++語言自身存在的辯證規(guī)律

1.3.1變量的時空性

變量是程序設(shè)計(jì)語言中最重要的元素之一。而生存期與作用域是變量的兩個重要屬性,體現(xiàn)了變量的時空性,如圖2所示。

圖2變量的時空模型

下面是一個C++程序,記為代碼段1,對該程序進(jìn)行分析,可得圖3所示的時空模型。

//代碼段1

#include

using namespace std;

void test();

int n=2;//n是全局變量

int main( ){

int a=4,b=-6;//a,b是局部變量

test();

test();

}

void test( ){

static int c=1;//c是靜態(tài)局部變量

int d=3;

c=c+5;d=d+7;//c,d是局部變量

n=n+9;

}

圖3代碼段1中變量的時空表示

1.3.2循環(huán)的遞進(jìn)性

循環(huán)是C++程序設(shè)計(jì)的一個難點(diǎn),循環(huán)的初始條件、終止條件和步長是理解循環(huán)的三個關(guān)鍵因素。循環(huán)的執(zhí)行具有遞進(jìn)性,按圖4的標(biāo)識有助于學(xué)生理解循環(huán)的運(yùn)行過程。

圖4循環(huán)的遞進(jìn)模型

例如,求1至100的和,有如下代碼,記為代碼段2。

//代碼段2

sum=0;

for(i=1;i

sum=sum+i;

其循環(huán)過程如圖5所示。

圖5代碼段2的循環(huán)遞進(jìn)模型

1.3.3函數(shù)的控制性

函數(shù)是程序的基本要素。函數(shù)由輸入、輸出及函數(shù)體組成。輸入相當(dāng)于原材料,函數(shù)體相當(dāng)于一個加工廠(控制體),輸出相當(dāng)于最終產(chǎn)品,如圖6所示。

圖6函數(shù)的控制模型

例如,已知圓的半徑r,設(shè)計(jì)一個函數(shù)求圓的面積與周長,有如下代碼,記為代碼段3。

//代碼段3

Void circle(double r, double& Area, double &Circ )

{

Area=pi*r*r;

Circ=2*pi*r;

}

代碼段3所對應(yīng)的函數(shù)模型如圖7所示。

圖7代碼段3中的函數(shù)模型

1.3.4類的封裝性

在結(jié)構(gòu)化程序設(shè)計(jì)中,一個問題是由多個函數(shù)相互協(xié)作完成的,程序=數(shù)據(jù)結(jié)構(gòu)+算法。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,一個問題是由多個對象相互協(xié)作解決的,程序=對象1+…+對象n。協(xié)作的主要方式是繼承與組合。

封裝性是類的基本特征,一個對象是由屬性和行為組成的。一個對象就是一個黑箱。

例如,用類描述一個在光滑平面上運(yùn)動的物體,其屬性包括:初速度v0和加速度a,其行為包括:求某一時刻t的速度velocity和距離Distance。有如下代碼,記為代碼段4。

//代碼段4

class move{

private://定義屬性為私有

double v0,a;

public://定義行為為公開

double move(v01,a1)//構(gòu)造函數(shù)

{v0=v01;a=a1;}

double Velocity(double t)//求t時刻速度

{ returnv0+a*t; }

double Distance(double t)//求t時刻距離

{ returnv0*t+0.5*a*t*t; }

}

該類可表示為一個黑箱,v0和a被封裝在黑箱內(nèi),外界不可訪問;Velocity(t)和Ditance(t)是對外接口,提供給外界調(diào)用,如圖8所示。

圖8move類的封裝性

2認(rèn)識論指導(dǎo)下的教學(xué)方法設(shè)計(jì)

認(rèn)識論認(rèn)為理論來源于實(shí)踐,并可用于指導(dǎo)實(shí)踐;從實(shí)踐到理論,再從理論到實(shí)踐,這是一個否定之否定的過程,每進(jìn)行一次實(shí)踐,認(rèn)識就會前進(jìn)一步;理性認(rèn)識來源于感性認(rèn)識,實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。

基于以上思想,我們在教學(xué)中堅(jiān)持實(shí)踐第一的觀點(diǎn),以“問題導(dǎo)向,興趣驅(qū)動,項(xiàng)目貫穿”為基本原則,在例題和習(xí)題的選取、案例教學(xué)、實(shí)踐教學(xué)等方面提出了自己的方法。

2.1例題和習(xí)題的選取

例題和習(xí)題主要有以下四個來源。

1) 經(jīng)典趣題。

如雞兔同籠、百錢百雞、猴子吃桃、約瑟夫問題,等等[6]。

2) 物理學(xué)方面的工程問題。

C++程序設(shè)計(jì)課程在大學(xué)一年級上、下學(xué)期開設(shè),同期已開設(shè)大學(xué)物理課程。把物理學(xué)里面的相關(guān)工程問題引入教學(xué)符合實(shí)際,能夠調(diào)動學(xué)生學(xué)習(xí)的積極性。

3)ACM程序設(shè)計(jì)大賽中的題目[7]。

將ACM引入教學(xué)有兩個目的:一是通過趣味性和實(shí)用性較強(qiáng)的ACM題目訓(xùn)練學(xué)生的程序設(shè)計(jì)技巧,激發(fā)學(xué)生的成就感;二是幫助學(xué)生熟悉ACM大賽,并吸引部分學(xué)生投入到ACM競賽中,形成一個良好的學(xué)習(xí)氛圍,達(dá)到以賽代練、在賽中學(xué)的目的。

4) 教師在教學(xué)實(shí)踐和科研實(shí)踐中的項(xiàng)目。

學(xué)生成績管理是教學(xué)實(shí)踐的例子,精準(zhǔn)施肥決策是科研實(shí)踐的例子。在實(shí)際教學(xué)中,我們正是利用這兩個例子進(jìn)行案例教學(xué)。

2.2一種新的案例教學(xué)模式

我們發(fā)現(xiàn),在教學(xué)過程中直接向?qū)W生進(jìn)行理論知識的灌輸,學(xué)生往往不知道學(xué)這些東西有何用,而且純粹的理論教學(xué)也易使學(xué)生產(chǎn)生枯燥情緒,教學(xué)效果并不好。因此我們在教學(xué)中實(shí)施了一種以問題為導(dǎo)向的案例驅(qū)動教學(xué)方法。

具體來說,在每門課程講述之前首先由教師設(shè)計(jì)并實(shí)現(xiàn)一個案例,并將案例演示給學(xué)生,告訴學(xué)生為了完成這個案例必須要學(xué)習(xí)哪些知識。在具體的教學(xué)中,教師將理論講授融入于案例中,引導(dǎo)學(xué)生一步一步完成這個案例。通過這種方式,學(xué)生首先就有了一個目標(biāo),對所學(xué)的理論知識既看得見又摸得著,每前進(jìn)一步,學(xué)生也會有一種成就感。為此,我們設(shè)計(jì)了兩個案例――源于教學(xué)實(shí)踐的學(xué)生成績管理和源于科研實(shí)踐精準(zhǔn)施肥信息管理。

2.2.1學(xué)生成績管理

學(xué)生在大學(xué)學(xué)習(xí)過程中最關(guān)心的就是自己各門課程的學(xué)習(xí)成績。因此以學(xué)生成績管理作為案例進(jìn)行講解,學(xué)生容易接受,易于引起學(xué)習(xí)興趣。對學(xué)生成績的管理主要包括計(jì)算總分和平均分、按姓名查找分?jǐn)?shù)、對成績按高低進(jìn)行排序、對各分?jǐn)?shù)段進(jìn)行統(tǒng)計(jì)分析等。

2.2.2作物精準(zhǔn)施肥管理

一個地塊由DGPS劃分成為了若干個40m×40m的網(wǎng)格(圖9)。每個網(wǎng)格都具有不同的土壤養(yǎng)分(主要是氮磷鉀),從而應(yīng)該具有不同的施肥量。

圖9劃分網(wǎng)格后的地塊

要求根據(jù)不同網(wǎng)格的養(yǎng)分含量計(jì)算每個網(wǎng)格的施肥量,施肥量的計(jì)算方法主要包括養(yǎng)分平衡法和養(yǎng)分豐缺指標(biāo)法。

1) 養(yǎng)分平衡法。

養(yǎng)分平衡法的公式如下:

F=(Y×C-S)/(N×E)

式中F是施肥量(kg/hm2);Y是目標(biāo)產(chǎn)量(kg/ hm2);C是單位產(chǎn)量的養(yǎng)分吸收量(kg);S是土壤供應(yīng)養(yǎng)分量(kg/ hm2);N是所施肥料中的養(yǎng)分含量(%);E是肥料當(dāng)季利用率(%) 。其中,S=土壤養(yǎng)分測定值×土壤有效養(yǎng)分換算系數(shù)。

養(yǎng)分平衡法適合于講解順序結(jié)構(gòu)和簡單數(shù)據(jù)類型等知識點(diǎn)。

2) 品種喜肥特性。

對某作物品種按喜肥特性分為高、中、低三個等級,每一級別對應(yīng)一個施肥量。一種喜肥特性法的例子如表2所示。品種喜肥特性法適合于講解選擇結(jié)構(gòu)。

3) 肥料效應(yīng)函數(shù)法。

肥料效應(yīng)函數(shù)法反映的是產(chǎn)量與施肥量之間的關(guān)系。一種常見的關(guān)系見以下表達(dá)式:

式中, 為產(chǎn)量, 為施肥量。為了求得最大產(chǎn)量施肥量,需要采用求極值和求導(dǎo)的方法。

肥料效應(yīng)函數(shù)法適合于講解循環(huán)結(jié)構(gòu)。

2.2.3案例和相關(guān)知識點(diǎn)的對應(yīng)

上述兩個案例貫穿于整個教學(xué)過程,每個案例有若干子問題組成,每個子問題對應(yīng)一個知識點(diǎn)。其對應(yīng)關(guān)系如表3所示。

3.3實(shí)踐教學(xué)

我們將C++程序設(shè)計(jì)的實(shí)踐教學(xué)分為課堂實(shí)驗(yàn)和課程設(shè)計(jì)兩個階段。

課堂試驗(yàn)側(cè)重語法,兼顧算法,分為驗(yàn)證性試驗(yàn)和設(shè)計(jì)性試驗(yàn)。驗(yàn)證性試驗(yàn)主要是對教師在課堂上講的程序進(jìn)行驗(yàn)證,注重于知識點(diǎn)的理解,題目來源于是學(xué)生成績管理案例。設(shè)計(jì)性試驗(yàn)主要是學(xué)生自己編

寫程序?qū)崿F(xiàn)問題的求解,注重于知識點(diǎn)的運(yùn)用,題目來源于作物精準(zhǔn)施肥案例。

課程設(shè)計(jì)側(cè)重算法,兼顧語法,主要任務(wù)是綜合運(yùn)用已掌握的語法和算法完成一個較實(shí)用的軟件系統(tǒng)。為了激發(fā)學(xué)生的學(xué)習(xí)興趣和發(fā)揮學(xué)生的創(chuàng)造性,部分課程設(shè)計(jì)題目由學(xué)生根據(jù)自己的生活實(shí)踐選取。

3教學(xué)內(nèi)容的課堂展現(xiàn)

3.1多媒體演示、板書和現(xiàn)場編程的統(tǒng)一

傳統(tǒng)的板書式教學(xué)效率較低,不夠直觀,不夠形象。因此現(xiàn)在普遍倡導(dǎo)多媒體教學(xué),多媒體教學(xué)確實(shí)克服了板書式教學(xué)的缺點(diǎn),但是也帶了一些問題。比如,講授速度加快,內(nèi)容增多,學(xué)生接受起來有一些困難;老師和學(xué)生可能都過分關(guān)注多媒體課件,缺少了相互的理解和溝通。另外,教師受制于多媒體課件限定的形式和內(nèi)容,很難進(jìn)行臨場發(fā)揮。在教學(xué)過程中經(jīng)常會碰到一些無法預(yù)料到的情況,比如針對某個學(xué)生理解不清的環(huán)節(jié),就需要老師在黑板上進(jìn)行講解。因此,多媒體教學(xué)并不能完全取代傳統(tǒng)的板書式教學(xué)方式,二者必須緊密結(jié)合。

具體說來,指針與鏈表、函數(shù)調(diào)用及參數(shù)傳遞、算法對應(yīng)的流程圖等宜采用多媒體教學(xué);而對于相關(guān)知識點(diǎn)的臨時擴(kuò)展和學(xué)生的隨機(jī)提問宜采用板書教學(xué)。多媒體和板書相結(jié)合,既能利用多媒體教學(xué)的生動性和形象性,又能利用板書教學(xué)的靈活性和擴(kuò)展性。

另外,C++程序設(shè)計(jì)教學(xué)的特殊性在于它的實(shí)踐性,學(xué)生的程序設(shè)計(jì)能力是否提高是衡量教學(xué)好壞的唯一標(biāo)準(zhǔn)。為此,在集成開發(fā)環(huán)境下現(xiàn)場講解代碼是提高教學(xué)效果的一個重要手段。我們在教學(xué)中采用現(xiàn)場編程的方式向?qū)W生講解相關(guān)知識。代碼講解有兩種方式:一種是“先編后調(diào)”,即教師在課前編寫好代碼,然后在課堂上調(diào)試講解;另一種是“即編即調(diào)”,即教師在課堂上現(xiàn)場編寫現(xiàn)場調(diào)試。我們采用“即編即調(diào)”的方式,這有助于學(xué)生理解和掌握程序的編寫過程,有助于訓(xùn)練學(xué)生的編程思維。

3.2從問題分析到程序設(shè)計(jì)

對于一個語法結(jié)構(gòu)的引出,我們采用從具體到抽象再到具體的方法。即先從一個簡單的例子抽象出語法規(guī)則,然后再使用一個稍復(fù)雜的例子加深對有語法規(guī)則的理解。

講解一個具體的應(yīng)用例子時,采用三階段法:第一階段為問題分析,采用流程圖描述;第二階段為算法設(shè)計(jì),采用偽代碼描述;第三階段為編程實(shí)現(xiàn),采用C++代碼描述。

下面以“判斷某個整數(shù)n是否是素?cái)?shù)?”這一問題進(jìn)行說明。

1) 問題分析。

本部分采用問題分析圖(Program Analysis Diagram),也稱為PAD流程圖[8],對問題進(jìn)行分析。PAD圖用二維的樹形結(jié)構(gòu)描述程序的邏輯,使用了結(jié)構(gòu)化的記號系統(tǒng),具有開放性。用PAD圖表示算法更直觀,易于理解。素?cái)?shù)問題的PAD圖如圖10所示。

圖10素?cái)?shù)問題的PAD圖描述

2) 算法設(shè)計(jì)。

為了使算法的書寫符合規(guī)范,主要采用Donald E.Knuth的算法書寫方式[9]。在該種方法中,每個步驟都以一個標(biāo)號進(jìn)行標(biāo)識,符號用來表示賦值,符號■作為算法結(jié)束的標(biāo)記。

輸入:n//n為輸入的某個整數(shù)

輸出:flag//flag為布爾變量,表示是否為素?cái)?shù)

算法:Prime

P1[初始化] i2,flagtrue

P2[判斷是否能被2至n之間的數(shù)整除]

For i=2 To n DO

IF n%i=0 THEN DO (flagfalse;break;)

P3[返回n是否為素?cái)?shù)]

RETURN flag■

3) 編程實(shí)現(xiàn)

為了保證程序的清晰性和易讀性,程序書寫采用層次遞進(jìn)方式,如代碼段5所示。

//代碼段5

bool prime(int n)

{

int i;

bool flag=true;

for(i=2;i

if(n%i==0)

{flag=false;break;}

return flag;

}

4結(jié)語

本文以辯證法和認(rèn)識論指導(dǎo)C++程序設(shè)計(jì)教學(xué),整合了相關(guān)教學(xué)內(nèi)容,提出了新的教學(xué)方法。在教學(xué)內(nèi)容方面,將C和C++作為整體進(jìn)行教學(xué),撇棄了重復(fù)內(nèi)容,精簡了學(xué)時;新方法便于學(xué)生在本質(zhì)上理解C++語言中變量、循環(huán)、函數(shù)和對象的基本特征和規(guī)律。突出實(shí)踐教學(xué),提出課堂實(shí)驗(yàn)、課程設(shè)計(jì)和畢業(yè)實(shí)習(xí)相結(jié)合的實(shí)驗(yàn)教學(xué)體系;將科研項(xiàng)目、經(jīng)典案例和大賽題目引入程序設(shè)計(jì)教學(xué),激發(fā)了學(xué)生的學(xué)習(xí)興趣和實(shí)踐動手能力。

辯證法和認(rèn)識論的內(nèi)容非常豐富,相關(guān)規(guī)律仍需通過教學(xué)實(shí)踐進(jìn)一步總結(jié)。同時,本文提出的教學(xué)方法對其他課程的教學(xué)也具有一定的借鑒意義。

參考文獻(xiàn):

[1] 陳次白,丁晟春. 淺談計(jì)算機(jī)科學(xué)技術(shù)應(yīng)用中的辯證思維[J]. 南京理工大學(xué)學(xué)報(bào):社會科學(xué)版,2000,13(2):20-23.

[2] 趙致琢. 關(guān)于計(jì)算機(jī)科學(xué)與技術(shù)認(rèn)知問題的研究簡報(bào)(I,II)[J]. 計(jì)算機(jī)研究與發(fā)展,2001,38(1):1-15.

[3] 于合龍,趙玉鑫. 計(jì)算機(jī)科學(xué)與技術(shù)中的系統(tǒng)論與辯證法[J]. 計(jì)算機(jī)教育,2010(4):76-79.

[4] 劉志芳. 哲學(xué)思想在計(jì)算機(jī)組成原理教學(xué)中的體現(xiàn)與作用[J]. 電腦知識與技術(shù):學(xué)術(shù)交流,2007(12):1765-1766.

[5] 王立柱. C++學(xué)習(xí)中的一個整體性問題[J]. 計(jì)算機(jī)教育,2007(20):74-76.

[6] 戴艷. 零基礎(chǔ)學(xué)算法[M]. 北京:機(jī)械工業(yè)出版社,2010:316-398.

[7] 李文新,郭煒,余華山. 程序設(shè)計(jì)導(dǎo)引及在線實(shí)踐[M]. 北京:清華大學(xué)出版社,2007:83-210.

[8] 張長海,陳娟. 以“PAD”為工具講授“程序設(shè)計(jì)”[J]. 吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2005,23(增刊1):44-48.

[9] DONALD E. Kunth. 計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)[M]. 3rd ed. 蘇運(yùn)霖,譯. 北京:國防工業(yè)出版社,2007:1-7.

C++ Language Teaching Method Based on Dialectics and Epistemology

YU He-long1, CAO Li-ying1, CAO Hong-bo2

(1.College of Information Technology, Jilin Agricultural University, Changchun 130118, China;

2.College of Computer , Jiangsu Teachers University of Technology, Changzhou 213001,China.)

篇3

關(guān)鍵詞:計(jì)算機(jī)教育;數(shù)學(xué)素養(yǎng);思維能力

一.前言

數(shù)學(xué)在人類文明的發(fā)展歷史中發(fā)揮著重要的作用,推動了重大的科學(xué)技術(shù)進(jìn)步。尤其是到了二十世紀(jì)中葉以后,數(shù)學(xué)的理論研究與實(shí)際應(yīng)用之間的時間差已大大縮短。當(dāng)前,隨著計(jì)算機(jī)應(yīng)用的普及,信息的數(shù)字化和信息通道的大規(guī)模聯(lián)網(wǎng),依據(jù)數(shù)學(xué)所作的創(chuàng)造設(shè)想已經(jīng)達(dá)到可即時試驗(yàn)、即時實(shí)施的地步。數(shù)學(xué)技術(shù)一直是一種應(yīng)用最廣泛、最直接、最及時、最富創(chuàng)造力的實(shí)用技術(shù)。

數(shù)學(xué)為計(jì)算機(jī)的發(fā)明和發(fā)展壯大提供了堅(jiān)實(shí)的理論基礎(chǔ)。早在1936年,英國數(shù)學(xué)家圖靈(Turing)發(fā)表了對計(jì)算機(jī)具有奠基意義的論文《論可計(jì)算數(shù)及其在判定問題上的應(yīng)用》,里面提出了計(jì)算的圖靈機(jī)模型,該模型即為現(xiàn)代計(jì)算機(jī)模型的原型。為紀(jì)念數(shù)學(xué)家圖靈,美國計(jì)算機(jī)學(xué)會于1966年設(shè)立了計(jì)算機(jī)界最負(fù)盛名的“圖靈”獎,以表彰那些對計(jì)算機(jī)事業(yè)做出重要貢獻(xiàn)的個人。數(shù)學(xué)是所有工科的基礎(chǔ),其中離散數(shù)學(xué)已經(jīng)成為計(jì)算機(jī)科學(xué)發(fā)展的理論基礎(chǔ)。圖靈獎的獲得者中有不少是學(xué)數(shù)學(xué)或者數(shù)學(xué)家出身。1974年獲獎的Donald E. Knuth 被稱為現(xiàn)代計(jì)算機(jī)之父,之前在加州理工獲得數(shù)學(xué)博士學(xué)位,著有經(jīng)典著作《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》4卷。Richard M.Karp 于1985年獲獎,之前在哈佛大學(xué)獲應(yīng)用數(shù)學(xué)博士學(xué)位。1986獲獎的Robert E.Tarjan在斯坦福大學(xué)同時獲得數(shù)學(xué)和計(jì)算機(jī)的博士學(xué)位,主要研究圖論、算法和數(shù)據(jù)結(jié)構(gòu)。

當(dāng)前計(jì)算機(jī)理論及應(yīng)用的壯大和發(fā)展更是離不開近代數(shù)學(xué)的發(fā)展。將計(jì)算機(jī)與數(shù)學(xué)的發(fā)展分割開來既不合理也不現(xiàn)實(shí)。和所有學(xué)科一樣,計(jì)算機(jī)領(lǐng)域也有自己的問題,比如什么是可計(jì)算的,什么是實(shí)際可計(jì)算的。這些計(jì)算模型本質(zhì)上是數(shù)學(xué)的應(yīng)用。離散結(jié)構(gòu)上的算法研究無疑是計(jì)算機(jī)科學(xué)中的重要領(lǐng)域。研究算法需有扎實(shí)的數(shù)學(xué)功底,就機(jī)器學(xué)習(xí)領(lǐng)域的研究而言,通常要對所處理的數(shù)據(jù)建立不同的數(shù)學(xué)模型如分類模型、回歸模型和排序模型。一般地,先針對這些問題建立特定的模型,然后采用有效的優(yōu)化算法來求解這些模型。應(yīng)用數(shù)學(xué)如矩陣論、多元統(tǒng)計(jì)分析和最優(yōu)化理論可以為深入地研究機(jī)器學(xué)習(xí)領(lǐng)域提供理論基礎(chǔ)。

在實(shí)際的工作中,會經(jīng)常看到數(shù)學(xué)基礎(chǔ)

好、具有一定數(shù)學(xué)素養(yǎng)的人解決問題會游刃有余且后勁足,學(xué)習(xí)新事物和新東西會比較快,會表現(xiàn)出一定的創(chuàng)造性。但是當(dāng)前大學(xué)的課程安排普遍存在對學(xué)生的數(shù)學(xué)學(xué)習(xí)的掌握程度不是很重視,導(dǎo)致學(xué)生對數(shù)學(xué)課的態(tài)度停留在學(xué)習(xí)時僅了解,一學(xué)完就全忘,到用時就迷惑的一知半解狀態(tài)。教師在教授專業(yè)課和專業(yè)基礎(chǔ)課的過程中,沒有引導(dǎo)學(xué)生深入地發(fā)掘理論背后的數(shù)學(xué)本質(zhì),導(dǎo)致學(xué)生對計(jì)算機(jī)科學(xué)理論的理解只能停留在表面,憑機(jī)械性記憶而沒有徹底理解。

鑒于上述數(shù)學(xué)在計(jì)算機(jī)的發(fā)明發(fā)展和實(shí)際工作中的重要作用,因此,在計(jì)算機(jī)教育的過程中,迫切地需要培養(yǎng)學(xué)生的數(shù)學(xué)素養(yǎng)以滿足現(xiàn)實(shí)工作和學(xué)習(xí)中解決實(shí)際問題的需要。

二、數(shù)學(xué)素養(yǎng)的培養(yǎng)

    《算法設(shè)計(jì)與分析》是計(jì)算機(jī)專業(yè)的一門重要的專業(yè)課,有利于培養(yǎng)學(xué)生分析問題和解決問題的能力,為學(xué)生學(xué)習(xí)后續(xù)課程打下堅(jiān)實(shí)的基礎(chǔ)。下面結(jié)合這門課程來談?wù)勗谟?jì)算機(jī)課程中如何培養(yǎng)學(xué)生的數(shù)學(xué)素養(yǎng)。

(一)結(jié)合算法的發(fā)明史來講解算法

深入學(xué)習(xí)計(jì)算機(jī)科學(xué)需要有良好的數(shù)學(xué)

基礎(chǔ),對于算法的學(xué)習(xí)更是如此。研究算法的圖靈獎獲得者中有很多是數(shù)學(xué)家或者學(xué)數(shù)學(xué)出身,如圖論中有很多算法是以前面提到的Robert E.Tarjan的名字命名的,著名的Dijkstra最短路徑算法由Edsger W.Dijkstra發(fā)明,而他2000年退休前一直是美國Taxas大學(xué)的計(jì)算機(jī)科學(xué)和數(shù)學(xué)教授。前面提到的Donald E. Knuth則是字符串匹配算法KMP算法的發(fā)明人。給學(xué)生講解算法的發(fā)明歷史一方面幫助學(xué)生了解發(fā)明算法的背景和發(fā)明過程,激發(fā)學(xué)生的創(chuàng)新欲望;另一方面讓學(xué)生認(rèn)識到數(shù)學(xué)的重要性和其在該課程所涉及的領(lǐng)域中發(fā)揮的重要作用。

(二)結(jié)合學(xué)生所掌握的數(shù)學(xué)知識來講解算法

修讀該門課程的對象一般為大學(xué)高年級

學(xué)生,他們之前應(yīng)該修過其他的數(shù)學(xué)課程,如高等數(shù)學(xué)(數(shù)學(xué)分析)、線性代數(shù)和離散數(shù)學(xué)。通常教師在講授該課程的過程中會認(rèn)識到離散數(shù)學(xué)在其中發(fā)揮的作用,會有意識地提及離散數(shù)學(xué)的知識,但實(shí)際上學(xué)生學(xué)習(xí)的高等數(shù)學(xué)或線性代數(shù)的知識對理解該門課程也是有幫助的。下面通過一個例子來說明數(shù)學(xué)知識對理解算法正確性的重要作用。

設(shè)計(jì)完算法如何證明算法的正確性呢?對于順序結(jié)構(gòu)和選擇結(jié)構(gòu)比較好驗(yàn)證,而對于循環(huán)結(jié)構(gòu)就使用循環(huán)不變量(Loop Invariant)來證明。而循環(huán)不變量的證明實(shí)際上借鑒了數(shù)學(xué)歸納法的思想:循環(huán)發(fā)生前某個循環(huán)不變量為真,循環(huán)進(jìn)行的過程中保持為真,那么循環(huán)結(jié)束時,該循環(huán)不變量仍然為真。循環(huán)發(fā)生前相當(dāng)于時,而循環(huán)進(jìn)行的過程保持為真,相當(dāng)于斷言:如時為真,那么為真。因此可以斷定:無論循環(huán)體循環(huán)多少次,該循環(huán)不變量總為真。

其他的例子,包括:比較算法的時間復(fù)雜度時可以引入高等數(shù)學(xué)中的無窮小量來講解;計(jì)算時間復(fù)雜度也會涉及到利用無窮級數(shù)的估計(jì)等等。

(三)結(jié)合數(shù)學(xué)工具來可視化算法

理論的發(fā)明通常是從簡單直觀的例子中歸納得來的。數(shù)學(xué)工具可以幫助我們理解和

可視化算法。

   圖1  時間復(fù)雜度的比較:線性、平方、指數(shù)、

       

  對數(shù)的時間復(fù)雜度函數(shù)

圖1使用 Matlab工具語言直觀地給出了幾種常用的時間復(fù)雜度的比較,便于學(xué)生理解不同的復(fù)雜度隨著問題規(guī)模增長的快慢。學(xué)生從該圖中可以很容易地得出:在這幾種復(fù)雜度函數(shù)中,指數(shù)復(fù)雜度隨增長最快,而對數(shù)復(fù)雜度增長最慢。

(四)結(jié)合數(shù)學(xué)抽象思維來幫助學(xué)生理解算法

數(shù)學(xué)的抽象思維可以幫助學(xué)生站在更高的角度來看待問題和算法之間的聯(lián)系。算法通常是針對某一類問題的,而如何對問題進(jìn)行歸類,如何選擇合適的算法解決是值得學(xué)生去探究的問題。講解算法時,應(yīng)該幫助學(xué)生抽象出問題的本質(zhì),同時注意算法之間的聯(lián)系與區(qū)別。

計(jì)算點(diǎn)對之間的距離是算法設(shè)計(jì)中一個

經(jīng)典問題,如果源點(diǎn)單一,可采用Dijkstra最短路徑算法,而計(jì)算圖中任意點(diǎn)之間的最短路徑,使用Floyd-Warshall最短路徑算法會合適一些,但是如果圖上的權(quán)重存在負(fù) 值,那就要用帶松弛操作的Bellman-Ford算法求解。了解了這些知識后,學(xué)生在把問題抽象成特定的算法模型時,就可以正確地使用合適的算法了。

其他問題包括使用矩陣胚理論來證明貪心算法的正確性以及靈活應(yīng)用動態(tài)規(guī)劃來求解離散結(jié)構(gòu)上的最優(yōu)化問題等等。

三、總結(jié)

     數(shù)學(xué)在計(jì)算機(jī)的發(fā)展和應(yīng)用中的重要作用表明了數(shù)學(xué)素養(yǎng)的培養(yǎng)在計(jì)算機(jī)教育中的重要性。通過算法設(shè)計(jì)與分析課程的例子,第二節(jié)給出了4種方法闡述了如何在教學(xué)中培養(yǎng)學(xué)生的數(shù)學(xué)素養(yǎng)。然而,方法的最終目標(biāo)是通過數(shù)學(xué)這個工具培養(yǎng)學(xué)生的自學(xué)能力,如同著名的教育家陶行知指出的那樣:“我以為好的先生不是教書,不是教學(xué)生,而是教學(xué)生學(xué)”。因此,通過學(xué)生的數(shù)學(xué)素養(yǎng)的培養(yǎng)能起到鍛煉學(xué)生思維能力和自學(xué)能力的目的。從這個意義上講,在計(jì)算機(jī)教育中培養(yǎng)數(shù)學(xué)素養(yǎng)具有一定的積極作用和參考價值。

[參考文獻(xiàn)]

[1] 范輝,余雪麗,邱宜坪,李晉江,在計(jì)算機(jī)教育中必須加強(qiáng)現(xiàn)代數(shù)學(xué)教育[J],太原理工大學(xué)學(xué)報(bào)(社科版),2001(19).