謝作如
算法教學和數(shù)學是密切聯(lián)系的。《普通高中技術課程標準》指出:算法教學要強調(diào)理論與實踐的結合,引導學生注意尋找、發(fā)現(xiàn)身邊的實際問題,進而設計出算法和計算機程序去解決這些問題。所以,教師選擇的實例最好來源于生活,讓學生深刻體會計算機是現(xiàn)代信息處理的基本工具。
本課是《信息技術基礎》(廣東版)的第四章《信息的加工與表達》第一節(jié)內(nèi)容,教材通過演示并剖析一段給文本文件加密和解密的計算機程序,來幫助學生了解利用高級語言解決實際問題的基本過程,然后以這段加密和解密的計算機程序為例,講解用計算機程序解決問題的基本過程,為學生學習選修模塊打下基礎。但對高一學生來說,在短時間內(nèi)用VB編寫加密解密的程序是很困難的,學生很難在一節(jié)課中完整地體驗“用計算機程序解決問題”這一過程。
教學目標
知識與技能:掌握Scratch的基本操作,能根據(jù)算法編寫簡單的Scratch程序;初步了解什么是算法和常見的編程語言。
過程與方法:能歸納利用計算機程序解決問題的基本思想方法——“分析問題、設計算法、編寫程序、調(diào)試運行、檢測結果”,能設計多種算法來實現(xiàn)分析“讀心術”;親歷用計算機程序解決問題的過程。
情感、態(tài)度與價值觀:引導學生了解程序設計的更多知識,體驗信息技術的強大魅力;激發(fā)學生對計算機編程解決現(xiàn)實問題的學習欲望,提高學習興趣。
教學重、難點
教學重點:體驗用計算機程序解決問題的基本過程。
教學難點:根據(jù)算法編寫程序。
教學流程
1.設置情境
教師打開一個“讀心術”的游戲。
師:這是吉普賽人的一個古老而神秘的游戲,游戲中的水晶球具有神奇的魔法。請大家先想好一個10 ~ 99之間的數(shù),把這個數(shù)的十位與個位相加,再把想好的數(shù)減去這個和。例如:你想的數(shù)是78,7+8=15,78-15=63。然后,在圖表中找出與最后得數(shù)相對應的符號。請把這個符號牢記心中,然后點擊水晶球,奇跡就出現(xiàn)了……
設計意圖:通過演示“讀心術”游戲,讓學生在驚訝中產(chǎn)生疑問,激發(fā)探究原理的好奇心。
2.分析問題
(1)出示具體問題,引導學生分析
師:看起來大家都很驚訝,因為水晶球真的顯示出大家心里所記住的符號。但是,水晶球真的會“讀心術”嗎?全班這么多同學,想好的數(shù)字肯定不會完全相同,為什么記住的符號卻一樣?
師生討論。
通過師生討論,教師推薦一個看上去很“笨”卻很有效的辦法:將所有的二位數(shù)逐一計算,根據(jù)結果來分析其中是否存在某種規(guī)律,最終找出原因。計算機因為其運算速度快、運算精度高和可靠性高等特點,最適合來進行重復的計算工作。這種看起來很“笨”的方法,在計算機的幫助下,就變得很有效了。那么,如何編寫一個計算機程序,來解決這個問題呢?
(2)分析問題
師:要讓計算機來完成這一計算工作,我們得告訴它要做哪些事,并且要有明確的步驟。那么,計算機如何完成一次計算過程呢?
教師引導學生一步一步寫出步驟:
① 給出一個數(shù)i,i=26;
② 取出i的個位上的數(shù)字;
③ 取出i的十位上的數(shù)字;
④ 結果=(i-十位上的數(shù)字-個位上的數(shù)字);
⑤ 輸出結果;
計算所有的二位數(shù),步驟為:
⑥ 給出一個數(shù)i,i=10;
⑦ 取出i的個位上的數(shù)字;
⑧ 取出i的十位上的數(shù)字;
⑨ 結果=(i-十位上的數(shù)字-個位上的數(shù)字);
⑩ 輸出結果;
把i的值加上1;
重復執(zhí)行①-⑥,直到i=100。
(3)小結
現(xiàn)在,我們已經(jīng)把抽象的問題分析成為具體步驟或方法。在程序設計中,我們把解決問題的方法和步驟稱之為算法。它是“用計算機程序解決問題”的一個重要步驟。
設計意圖:在討論中,學生能得出“二位數(shù)經(jīng)過計算后,得到的結果中存在某種規(guī)律”的結論。逐一計算的方法雖然有效,卻需要進行大量的計算工作。這時,教師引出用計算機程序來解決問題,讓學生對計算機計算快且準確的特點有了更深的理解。
3.編寫程序
(1)介紹編程軟件(Scratch)
師:剛才我們已經(jīng)完成了算法的步驟,接下來就要開始編程了。計算機編程語言分為機器語言、匯編語言和高級語言,我們一般使用高級語言。 常見的編程語言如下表所示:
C、C++:經(jīng)典的編程語言之一;
VB:一種可視化的編程語言;
JAVA:著名的跨平臺編程語言;
C#:微軟為.net環(huán)境設計的語言;
Pascal:第一個結構化的編程語言;
Delphi:著名的快速應用程序開發(fā)工具。
教師介紹常見的編程語言后,給學生推薦一個簡單的圖形化編程語言——Scratch。教師運行Scratch,簡要介紹編程界面,按照剛才總結出來的算法,以計算78這個數(shù)字為例,演示如何編寫程序。
(2)學生實踐
教師將分析“讀心術”的程序分解為兩個部分,讓學生實踐。
① 計算一個二位數(shù)78;
② 計算所有的二位數(shù)。
鼓勵學生自主探究,并有所創(chuàng)新(即采用和教師不同的流程圖),同桌之間要互助。參考代碼如下:
(3)解決問題
師:在剛才的編程過程中,估計大家已經(jīng)明白了這個神奇的魔法水晶球的奧秘所在。說出來其實很簡單,所有的二位數(shù)經(jīng)過計算后,得到的結果都是9的倍數(shù)。這時,我們可以拿出數(shù)學公式,來分析讀心術的數(shù)字原理了:
一個二位數(shù)可以看作10x+y;
二位數(shù)減去十位和個位上的數(shù)字,也就是:
(10x+y)-x-y=9x;
9x當然就是9的倍數(shù)了。
教師重新展示魔法水晶球的Flash動畫,讓學生仔細觀察,數(shù)字為9的倍數(shù)所對應的圖標是否總是相同。
設計意圖:讓學生嘗試自己編程解決問題,在有意義的任務驅(qū)動下,學生的學習興趣變得更高,不知不覺中進入了學習的最佳狀態(tài)。
4.課堂總結
師:今天,我們在這節(jié)課中研究了魔法水晶球的奧秘。其實,我們這節(jié)課的學習過程,就是一個典型的“用計算機程序解決問題”的過程。
教師歸納“用計算機程序解決問題”的一般過程,即“分析問題→設計算法→編寫程序→調(diào)試運行→解決問題”,在介紹的同時,逐步用課件展示板書。
師:從解決問題的過程中可以發(fā)現(xiàn),程序編寫是很重要的。因為我們至少要掌握一門編程語言,才能夠?qū)崿F(xiàn)算法。但是編寫程序也有前提,那就是設計算法,因為算法才是程序的靈魂。編程語言很多,Scratch僅僅是其中的一種。我們只有掌握一門編程語言以后,才能真正讀懂程序、讀懂算法、讀懂問題,學會真正的“讀心術”,成為計算機的主人。
設計意圖:在探索了魔法水晶球奧秘后,教師引導學生進行回顧,總結出“用計算機程序解決問題”的一般過程,有效地完成了教學任務。
5.布置作業(yè)
(1)通過網(wǎng)絡了解常見的編程語言,并用Scratch編寫“韓信點兵”
韓信帶1500名士兵打仗,戰(zhàn)死四五百人。他讓士兵站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人,然后馬上說出剩余的士兵人數(shù)。
(2)自學教材4.1節(jié),調(diào)試書中關于文本加密解密的VB范例
設計意圖:作業(yè)環(huán)節(jié)是不可缺少的,不僅僅是鞏固知識,還能繼續(xù)引導學生如何解決類似的問題,從而對編程產(chǎn)生濃厚的興趣。
教學反思
這是我2011年參加全國高中信息技術優(yōu)質(zhì)課展評活動獲得特等獎的課例。教學目標明確,主線清晰,環(huán)環(huán)相扣,連預設的教學意外都沒有發(fā)生。那節(jié)課雖然是上午的最后一節(jié),但是因為教學內(nèi)容新穎有趣,學生的學習興趣還是很高。
1. 程序設計是信息技術教育的重要組成內(nèi)容
《普通高中技術課程標準》強調(diào)要“培養(yǎng)解決問題的能力,倡導運用信息技術進行創(chuàng)新實踐”,因而,我認為程序設計的教學要盡量滿足以下兩點:一是選擇的例子(載體)盡可能貼近學生實際,既要達到吸引學生的目的,又能體現(xiàn)技術的真實內(nèi)涵;二是要讓學生理解計算機解決問題的基本過程,即把抽象的問題分析成為具體步驟或方法,從而形成算法,然后根據(jù)算法設計進行編制程序。最終讓學生體驗到信息技術的強大魅力,親歷利用編程來解決現(xiàn)實中的問題這一過程。所以,我選擇編寫程序來分析“讀心術”游戲作為教學任務,該任務貼近生活、數(shù)學味兒濃、趣味性強,對學生具有一定的吸引力。
2. 基礎模塊的教學中可以適當采用圖形化編程語言
因為這節(jié)課的教學必須要讓學生初步嘗試編程。但實際上在一節(jié)課中無論讓學生用QB還是VB來編程,都顯得太難,尤其是這節(jié)課的內(nèi)容中還涉及循環(huán)。為此,我選擇Scratch作為程序設計語言。因為教材強調(diào)的是通過算法與程序設計解決實際問題的方法,對程序設計語言的選擇不作具體規(guī)定。Scratch是MIT推出的圖形化編程軟件,編程界面充滿童趣,流程圖即代碼,能夠減少學生對編程的神秘感,有效地突破了教學難點。
讓高中生用積木式的非代碼編程工具是否合適?聽課的評委是否會有異議?我曾經(jīng)猶豫不定。后來,我看到美國的哈佛大學《計算機科學cs50》課程中都使用了Scratch,臺灣幾所大學的研究生還在研究如何使用Scratch來幫助大學生學習C語言后,下定了決心。因為這節(jié)課畢竟屬于基礎模塊,是引導學生對算法和編程產(chǎn)生興趣的一節(jié)課。
(作者單位:浙江溫州中學)