高鵬鴻 劉國(guó)
“算法與程序設(shè)計(jì)”是高中信息技術(shù)選修中的一門課程,但由于學(xué)科發(fā)展中的各種主客觀原因造成了程序設(shè)計(jì)在信息技術(shù)學(xué)科中的地位下滑。因?yàn)槌绦蛟O(shè)計(jì)入門比較難,而且學(xué)習(xí)一年后也難以掌握,更無(wú)法制作出一個(gè)成品,這樣會(huì)導(dǎo)致部分學(xué)生覺(jué)得選修程序設(shè)計(jì)不如選修多媒體應(yīng)用更實(shí)用,因此現(xiàn)在中學(xué)生的程序設(shè)計(jì)能力普遍較低。作為中學(xué)的一線信息技術(shù)教師,筆者嘗試引導(dǎo)學(xué)生用VB程序設(shè)計(jì)的基礎(chǔ)程序代碼語(yǔ)言,解決Excel中比較復(fù)雜的問(wèn)題,從而激發(fā)學(xué)生的學(xué)習(xí)熱情。Visual Basic for Applications(VBA)是Visual Basic中的一種宏語(yǔ)言。Applications中文翻譯為“應(yīng)用、運(yùn)用、適用”,在Word、Excel等Office辦公軟件中可以利用VBA使軟件的應(yīng)用更高效。打開(kāi)Excel軟件后,按Alt+F11快捷鍵可以打開(kāi)“Visual Basic編輯器”。
● VBA應(yīng)用緣起
當(dāng)學(xué)生學(xué)習(xí)了VB中的if語(yǔ)句后,筆者要求學(xué)生用VB來(lái)實(shí)現(xiàn)成績(jī)優(yōu)、良、中、差的評(píng)價(jià)。從課堂反應(yīng)看,大多數(shù)學(xué)生對(duì)編寫代碼毫無(wú)興趣,甚至有的學(xué)生提出運(yùn)用Excel中的判斷就能實(shí)現(xiàn),為什么還要學(xué)習(xí)編寫程序呢?縱使筆者解釋了原因,學(xué)生還是不以為然,不能引起重視。這時(shí)筆者想到可以用程序來(lái)解決學(xué)生熟悉但又不能實(shí)現(xiàn)的東西,這個(gè)問(wèn)題還必須是學(xué)生已有的編程水平可以駕馭的,Excel學(xué)生已經(jīng)很熟悉了,但有些功能還不能很好地實(shí)現(xiàn),而借助VBA來(lái)再開(kāi)發(fā),能使學(xué)生體會(huì)到編程的魅力,激發(fā)其學(xué)習(xí)熱情。
● 微案例過(guò)程:投票統(tǒng)計(jì)
在學(xué)習(xí)VB中的if語(yǔ)句前,筆者提出了僅用Excel課堂模擬來(lái)給5個(gè)候選班長(zhǎng)統(tǒng)計(jì)票數(shù),學(xué)生通過(guò)在人名下修改所得票數(shù)來(lái)計(jì)數(shù)(如圖1)。
通過(guò)手動(dòng)修改數(shù)字來(lái)計(jì)票還是很麻煩,學(xué)生學(xué)過(guò)VB中的if語(yǔ)句后,筆者提出問(wèn)題:同學(xué)們能不能通過(guò)編程來(lái)實(shí)現(xiàn),只要在人名下的單元格上單擊一次,就能自動(dòng)計(jì)票一次呢?
復(fù)習(xí)條件語(yǔ)句的基本格式:
If 條件 then 語(yǔ)句組1 else 語(yǔ)句組2
或:if 條件 then
語(yǔ)句組1
Else
語(yǔ)句組2
End if
同時(shí)筆者給出了如下代碼引導(dǎo)學(xué)生模仿完成:
If Target.Address = "$A$3" Then
Target.Value = Target.Value + 1
完整程序代碼如圖2所示。
從課堂完成情況看,大部分學(xué)生都能夠獨(dú)立完成作業(yè),而且?guī)缀鯖](méi)有學(xué)生不做作業(yè)的,筆者同時(shí)要求有能力的學(xué)生完成如圖3所示的拓展題。
微案例(拓展):成績(jī)優(yōu)、良、中、差評(píng)價(jià)。
功能要求:在B1單元格中輸入成績(jī)(分?jǐn)?shù)),點(diǎn)擊后,B2單元格按D1∶E5中條件顯示“優(yōu)秀”或“較差”等判斷結(jié)果。
提示代碼:
If Sheet1.Range("b1") >= 90 Then
Sheet1.Range("b2") = "優(yōu)秀"
筆者在給出了提示代碼后,部分學(xué)生自主學(xué)習(xí),套用多條件判斷語(yǔ)句的格式,獨(dú)立完成了拓展題。
具體代碼如下:
If Sheet1.Range("b1")>=90 Then
Sheet1.Rang("b2")="優(yōu)秀"
ElseIf Sheet1.Range("b1")>=80 Then
Sheet1.Rang("b2")="良好"
ElseIf Sheet1.Range("b1")>=70 Then
Sheet1.Rang("b2")="中等"
Else
Sheet1.Rang("b2")="較差"
End If
事實(shí)上,在一節(jié)課中很多學(xué)生獨(dú)立完成了拓展題,并且課下還有部分學(xué)生繼續(xù)提問(wèn)、討論。
● 思考
程序設(shè)計(jì)語(yǔ)言可以培養(yǎng)學(xué)生運(yùn)用算法來(lái)解決實(shí)際問(wèn)題的能力,這種解決問(wèn)題的方式是計(jì)算機(jī)所獨(dú)有的,也只有通過(guò)對(duì)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言和程序設(shè)計(jì)方法的學(xué)習(xí)才有可能獲得這種解決問(wèn)題的能力。而在常規(guī)教學(xué)中,教師如果按照課本中給的例子,無(wú)法有效激發(fā)學(xué)生解決問(wèn)題的興趣,所以筆者就想到依托學(xué)生熟悉的Excel軟件,借助VBA程序來(lái)實(shí)現(xiàn)Excel中的問(wèn)題,在課堂中以問(wèn)題導(dǎo)學(xué)為主,先提出問(wèn)題,引導(dǎo)學(xué)生和教師一起思考解決問(wèn)題的思路,發(fā)揮學(xué)生的主體作用,課堂教學(xué)一直在活躍的氣氛中進(jìn)行。這對(duì)教師也是一個(gè)挑戰(zhàn),要善于發(fā)現(xiàn)學(xué)生熟悉的但不易實(shí)現(xiàn)的教學(xué)實(shí)例。教師在講解if單判斷語(yǔ)句時(shí),以投票統(tǒng)計(jì)為引導(dǎo),讓學(xué)生在拓展中探討多條件判斷結(jié)構(gòu),培養(yǎng)學(xué)生自主學(xué)習(xí)解決問(wèn)題的能力。例如,在Excel表格中,第一列中輸入計(jì)算公式,實(shí)現(xiàn)結(jié)果是只要選中要計(jì)算的公式后,結(jié)果就輸出到第二列相應(yīng)位置(如圖4)。
這樣的功能在Excel中是不能直接實(shí)現(xiàn)的,我們可以借助Excel VBA語(yǔ)言中for循環(huán)來(lái)實(shí)現(xiàn),相信學(xué)生也會(huì)非常感興趣的。
從某種意義上說(shuō),用算法解決問(wèn)題的能力甚至比數(shù)值計(jì)算的能力更為重要。因此,信息技術(shù)教師應(yīng)該立足于學(xué)生的學(xué)習(xí)興趣,讓其體驗(yàn)程序設(shè)計(jì)的魅力,不斷培養(yǎng)創(chuàng)新型人才。