


摘?要:高中信息技術新課標將培養學生的信息技術學科核心素養作為了課程目標。計算思維是信息技術學科核心素養中非常重要的一個維度,本文以查找算法為例,初步探討了基于問題解決為核心的計算思維培養。
關鍵詞:高中信息技術新課標;核心素養;計算思維;基于問題
浙江省在2014年頒布了新的高考方案,將信息技術和通用技術合二為一,組成了技術學科作為高考七選三中的一門學科,成績計入高考總分。信息技術的考試方式也由上機考試轉變成紙筆考試,而信息技術學科中的重要學科內容《算法與程序設計》也成為考查的重點,同時也是學生學習的難點。
一、 《算法與程序設計》模塊學習中學生的常見難點問題
(一)開關變量的設置與使用
例1?【2015年10月選考真題】n個數據的冒泡排序需要經過n-1遍加工,每一遍加工自下而上比較相鄰兩個數據,把較小者交換到上面。當某一遍加工過程中沒有數據交換,說明數據已經有序,無需進一步加工。為此對算法進行優化,編寫了一個VB程序,功能如下:運行程序時,在列表框List 1中顯示排序前數據,單擊“排序”按鈕Command 1,在列表框List 2中顯示這些數據按升序排序后的結果,在標簽Label 3中顯示排序過程的加工遍數。
實現上述功能的VB代碼如下,但加框處代碼有錯,請改正。
定義變量及初始化略
Private Sub Command1_Click()
Dim flag As Boolean?flag值為True表示一遍加工中發生過交換
i=1
flag=True
Do While i<=n-1 or flag=True
flag=False
For?j=n?To?i+1?Step-1
If a(j) k=a(j):a(j)=a(j-1):a(j-1)=k Flag=True End If Next?j i=i+1 Loop Label3.Caption=”排序過程的加工遍數為”+str(i) 輸出略 End Sub 分析:題目通過對教學大綱要求掌握的冒泡排序算法做了一定的改進,引入邏輯型變量作為開關變量使用來考查學生。由于外層循環從原來的For循環變化為Do while循環,并且使用了由邏輯運算符連接的關系表達式(方便使用開關變量),造成許多學生對算法的理解及知識的遷移出問題。這也體現出學生利用計算機解決問題的過程中缺乏對邏輯型變量的深入理解及算法遷移的能力。 (二)合理數據數據結構的抽象 例2?編寫解決如下問題的程序。一共十名士兵圍坐一圈。每人有一個編號分別為1,2……10。以數值n進行循環報數(該數值由排長決定),報到n的士兵出列,出列后下一個士兵以1開始繼續報數,循環往復直到全部士兵出列,求出列士兵的編號順序? 分析:該問題是一個典型的約瑟夫環問題。題目要讓士兵圍坐一圈,如何抽象士兵并使其圍坐一圈,是將實際問題抽象特征、建立結構模型、合理組織數據,并將實際問題處理成計算機能處理問題的重要環節。最直觀的可以使用鏈表數據結構存放士兵編號來抽象實際問題,但高中信息技術教學中一般不涉及鏈表。因此抽象并形成首尾相接的數據結構成為一個難點。這類問題也是學生遇到的常見問題之一。 (三)嵌套邏輯程序模塊的正確理解與應用 例3?【2019年6月杭州市統測信息試題】小強設計一個“文本編輯”程序,實現對字符串s進行插入和刪除操作,操作信息由操作符(“+”表示插入,“-”表示刪除)和操作字符串構成,以“#”結束。插入操作由插入位置和插入字符串(只包含英文字母)構成,刪除操作由刪除開始位置和刪除長度構成。例如:“+11abc”表示在字符串s第11個位置插入“abc”,“-4:3”表示刪除字符串s中第4個位置開始的連續3個字符。 小強編寫的“文本編輯”VB程序運行界面如圖所示,文本框Text 1中的內容是初始字符串,文本框Text 2中的內容是操作信息,單擊“操作”按鈕Cmd 1后,在標簽Label 4中顯示結果字符串。 (1)加框處的程序代碼有錯,請改正。 (2)在劃線處填入合適代碼。 Private Sub Cmd 1_Click() Dim s As String,t As String,ch As String Dim c As String,num As Integer,ss As String,f As String Dim n As Integer,n1 As Integer,i As Integer,k As Boolean s=Text 1.Text: t=Text 2.Text c="": num=0: ss=s: f="" For i=1 To Len(t) ch=Mid(t,i,1) If ch >="a" And ch <="z" Or ch >="A" And ch<="Z" Then c=c+ch ElseIf ch >= "0" And ch<="9" Then n=Val(ch) Else If ch=":" Then n1=n ElseIf f="-" Then If n1=1 Then 函數Mid(x,y)返回字符串x第y位到最后的子串 s=Mid(s,n+n1) Else ′(3)填空 End If ElseIf f="+" Then s=Mid(s,1,n-1)+c+Mid(s,n) End If If ch="+" Or ch="-" Or ch="#" Then f=ch If i <> 1 Then ss=ss + "→" + s End If n=0 c="" End If Next i Label 4.Caption = ss End Sub 分析:該試題的外層For循環是逐個處理操作信息字符串,這類操作比較常規。For循環中依據字符串內容的不同要分情況討論,并做相應的處理。這是一個相對復雜的判斷邏輯結構,這就要求學生具備通過判斷、分析與綜合各種信息,運用合理的算法解決問題的能力,而這也往往是學生缺乏的。 通過以上幾個學生存在思維困難的典型案例可知,在高中階段的信息技術學習中如何培養學生的計算思維能力是一個亟待解決的問題。 二、 新課程標準中的計算思維 國家高中信息技術教育的頂層設計者們已經看到了這個問題。2017版的《普通高中信息技術課程標準》中將信息技術學科核心素養是由信息意識、計算思維、數字化學習與創新、信息社會責任四個核心要素組成。新課標中描述計算思維是指個體運用計算機科學領域的思想方法,在形成問題解決方案的過程中產生的一系列思維活動。具備計算思維的學生,在信息活動中能夠采用計算機可以處理的方式界定問題、抽象特征、建立結構模型、合理組織數據;通過判斷、分析與綜合各種信息資源,運用合理的算法形成解決問題的方案;總結利用計算機解決問題的過程與方法,并遷移到與之相關的其他問題解決中。 三、 基于問題解決為核心的計算思維培養 那么在具體的教學過程中如何來培養學生的計算思維能力呢?筆者認為可以嘗試用基于問題解決的方式來進行。 問題解決從心理學的角度講是指一系列有目的的認知操作過程。一般有三個基本特征,第一,是一種思維活動,即在問題解決的過程中,必須有認知成分的參與。第二,具有目的指向性,問題解決過程具有明確的目的。第三,包含一系列的操作,即問題解決包含一系列的心理步驟。 基于問題解決的教學是指教師通過引發、促進、支持和指導學生的問題解決活動,來完成學科教學任務的一種教學方式。這種教學以問題的提出和解決為線索組織教學過程,問題和問題解決是它的兩個關鍵要素,教師就學習目標和內容設計問題,學生以類似問題解決的過程、方法和形式進行學習,在解決問題的過程中獲取和應用隱含于問題背后的學科知識與技能,解決問題的能力也得以發展。 筆者認為在基于問題解決教學中問題的設計是最為關鍵的環節,應該遵循以下幾個原則。第一,問題盡量符合現實生活實際,使學生有直觀感受。第二,問題設計要能緊扣學習內容和學習目標。第三,問題要能引導學生建構和發展學科知識、學科技能和學科思維。第四,問題的設計要適應當前的教學對象。 新課標的基本理念中提到要培育以學習為中心的教與學關系,在問題解決中提升信息素養。可見以學生為主體,以問題解決過程為主要的媒介來提升學生的認知能力和信息素養,應該是一種比較推薦的方法。下面以《算法與程序設計》模塊中的查找算法教學為例,設計一系列的問題,通過問題解決來提升學生的計算思維。以下描述問題及其解決過程主要分為問題設計,問題的探究與解決,計算思維的培養,核心素養水平分級,發展性問題這幾個方面。 (一)用程序設計的方法模擬實現Word中的查找、替換功能。 1. 問題設計 文檔編輯軟件Word大家經常使用,里面的查找、替換功能對于文檔編輯很有幫助。要求用程序設計的方法模擬該功能。 2. 問題探究與解決 3. 計算思維的培養 該問題解決過程中主要培養了學生的抽象問題中的數據特征,建立結構模型(形式化);運用合理的算法,形成解決問題的方案;利用計算機及高級語言處理問題等素養。 4. 核心素養水平分級 該問題達到分級水平1。 5. 發展性問題 順序查找算法與學過的什么算法是類似? (二)對分查找中查找范圍標志(L,R)的移動問題 1. 問題設計 假定數組中的數據已成升序排列,對分查找的標準程序如下(用自定義函數表達): Function search(key As Integer,L As Integer,R As Integer) As Integer Dim mAs Integer Do While L <= R m = (L + R) \\ 2 If key = a(m) Then search = m Exit Function ElseIf key < a(m) Then R=m-1?′① Else L=m+1?′② End If Loop search=0 End Function ①,②兩處是移動L、R,縮小查找范圍的代碼。現在的問題是,是否能將①處改成R=m,②處改成L=m,或者修改其中一處? 2. 問題探究與解決 3. 計算思維的培養 該問題解決過程中主要培養學生熟悉對分查找的基本方法。使用模型化的方法來分析數據,進一步研究算法的內在含義,提高對算法的理解程度和應用能力。 4. 核心素養水平分級 該問題達到水平分級1。 5. 發展性問題 循環條件是否能從L<=R改為L (三)順序查找與對分查找的效率比較問題 1. 問題設計 假定要查找的值都能在數組中找到的情況下,對分查找的效率一定比順序查找高嗎? 2. 問題探究與解決 3. 計算思維的培養 分析問題及信息,建立結構模型,合理組織數據并進行適當的歸納,進而得出結論。 4. 問題水平分級 該問題達到水平分級2。 5. 發展性問題 順序查找和對分查找的時間復雜度問題。 (四)利用對分查找思想設計的插入排序算法中數據插入位置的分析與討論 1. 問題設計 (1)給出利用對分查找思想設計的查找插入位置的主要程序段示例。 假設待插入數值存儲在變量Key中,數據存放在a數組中,且呈升序排列。程序的主要部分如下: Do While?L<=R m=(L+R)\\2 IF key<=a(m) Then R=m-1 Else L=m+1 EndIF Loop (2)如上算法所示,插入位置應該是哪個位置,如何表示? (3)如果數組內已有值與待插入的值相同,則新插入值的位置是在相同值的左邊還是右邊? 2. 問題探究與解決 3. 計算思維的培養 能提取問題的基本特征,運用基本算法解決問題。有分析數據,分析算法的能力。 4. 問題水平分級 該問題達到水平分級1。 5. 可遷移問題 如果降序排列如何設計類似算法? 四、 小結 計算思維的培養是學生信息技術學科核心素養培養的重要組成部分。本文試圖以查找算法為例,利用字符、字符串的查找、替換,對分查找中查找范圍標志(L,R)的移動問題,順序查找與對分查找的效率比較問題,利用對分查找思想設計的插入排序算法中數據插入位置的分析與討論這幾個問題的設置,說明如何通過問題的合理設計來組織與引導學生熟悉算法、探究問題,提高學生的學科認知能力,實施基于問題解決的計算思維的建構與培養。 參考文獻: [1]李藝,鐘柏昌.信息技術課程核心素養體系設計問題討論[J].理論探討,2016(4):5-10. [2]解月光,付海東.高中學生信息技術學科核心素養的描述與分級[J].中國電化教育,2015(5):8-14. [3]任友群,黃榮懷.高中信息技術課程標準修訂說明[J].中國電化教育,2016(12):1-3. [4]李慧桂.基于問題解決的高中信息技術新課程教學研究[D].金華:浙江師范大學,2006. 作者簡介:華驥良,浙江省杭州市,浙江省杭州第二中學。