靜網PWA視頻評論

例談「優化思想」 在初中VB教學中的運用

2023年10月29日

- txt下載

劉浩
在目前初中學習階段,程序設計已經納入了信息技術學科教學的範疇,而在以Visual Basic(以下簡稱VB)為主要軟體的程序設計教學框架中,「優化思想」已經隨著教師的教學活動的開展逐步被潛移默化地運用。「優化思想」是在有限種或無限種可行方案(決策)中挑選最優的、最合理的方案(決策)的思想。問題的規模越大、複雜性越高,「優化思想」在解決問題的過程中應用的價值也就越明顯。全國大多數區域初中信息技術課中安排了程序設計教學內容,這部分知識在現階段教材中大多採用VB軟體作為教學用軟體。以這個軟體為例,教師在教學中需要不斷啟發學生對「優化」一詞進行體會,並且通過優化以達到節約代碼量、高效解決問題的目的。本文就以日期格式這個實際問題來看「優化思想」在初中VB教學中的運用。
● 問題的提出
在生活中,我們常用某年某月某日這樣的格式來表示日期,而在計算機中提供了許多種不同的格式。但在一些特殊情況下需要將年月日全部提取出來組合為一個8位日期,如2018年10月18日對應的8位日期值是「20181018」,2019年7月8日對應的8位日期值是「20190708」。根據學生的學習進度,VB提供的函數只能獲取指定日期的月份和日期,但是當月份和日期為一位數的時候並不會加以處理。例如,2019年7月8日利用函數實際獲得的內容是「201978」,這就是一個常見的日期格式問題,如果不去引導學生運用「優化思想」來解決,將會給整個程序的運行和後續學習的理解帶來麻煩。
● 問題的解決
在程序設計中,由於算法不同、程序語句的選擇與編寫不同,程序執行的效果與效率也不同。為了能夠使解決問題的一般程序語句最少、占用內存量少、處理速度最快、外部設備使用效率最高,於是便產生了通過對幾個不同的程序進行比較、修改、調整或重新編寫,把一般程序變換成最優程序的思想。當問題被提出以後,學生開始思考是否有相應的函數可以直接得出對應的格式日期,但是小組之間討論了很久都沒有得出結論,於是我提醒學生,當沒有指定功能的函數時,我們可以利用函數構造新的更高級的函數。在我的指導下,學生找到了VB軟體提供的year、month、day、now等基礎函數,並且嘗試利用這些函數構造8位完整的年月日數據。假設我們用變量SDate表示結果,再考慮到代碼的易讀性,就會有代碼1產生(如圖1)。
這樣的代碼可讀性較高,在編寫過程中學生也比較容易掌握賦值語句的寫法,但是過於繁冗。多出的3個變量,雖然不會影響程序的整體運行效率,但是從軟體開發的整體設計思路來說,需要進行精簡,減少不必要的變量調用,那麼我們的代碼可以優化為代碼2(如上頁圖2)。
假設now()函數取得的時間數據是「2019-7-8 12∶20∶20」,year函數用於獲取括號內日期的年份,month函數用於獲取括號內日期的月份,day函數用於獲取括號內日期的日期。那麼變量a的值是2019,b的值是7,c的值是8,構造的SDate變量值為201978。因為函數功能的限制,我們無法取得月份、日期兩個數據的兩位數寫法,也就是20190708。如b的值我們希望是07,而不是7。至此我們就需要在不足兩位數的月份和日期前補上一個「0」,才能滿足數據要求。
此刻學生開始分組研討該如何給需要補上「0」的數據補上「0」。學生在討論中得出結論:最重要的就是要判斷哪些日期需要加「0」。從月份和日期數據上看,1~9月都需要補一個「0」,1~9日也需要補一個「0」。此刻我一步步引導學生去觀察數據特徵,得出只要判斷其長度即可找到需要補「0」的數據解決方法。在我的不斷引導下,學生找到了判斷字符長度的len函數,結合已經學習的IF判斷語句即可解決問題。按照常規的代碼編寫方法,我逐步引導學生將代碼改寫為代碼3(如圖3)。
代碼3就是可以完整實現程序功能的代碼,運行後可以輸出「20190708」這樣的結果。於是我讓學生在黑板上幫我繪製了本代碼的流程圖,多個判斷語句的存在使得流程圖非常複雜,代碼中使用了IF和多重IF判斷語句,增加了代碼的複雜性,且過多的判斷語句和多次運用函數獲取月份和日期的做法,降低了代碼的運行效率。於是在這裡,我繼續引導學生思考如何再優化代碼。上述代碼中SDate的構成次數太多,而且判斷次數也多,我們可否將判斷放在最前面,構造一個新的變量,然後將符合要求的變量進行組合?在我的啟發下,學生找到了代碼4所示的解決方案(如圖4),進一步提升了運行效率。
代碼4比起代碼3已經有了很大的優化,結構簡單而且可讀性增加,重複調用的問題已經被解決。在我的引導下,學生也在黑板上幫我將原先的流程圖簡化了許多,但是依舊存在多個判斷語句。這部分代碼在實際教學中,學生在教師的引導下基本可以達到,「優化思想」也不斷啟發著學生如何才能進一步優化代碼段。這段代碼在實際運行中,還會建立兩次判斷語句,運用b、c兩個新的變量。於是我進一步引導學生,充分運用優化的思想去剖析代碼:如何不用IF語句也能達到判斷或者解決長度為1的月份、日期變成兩位數呢?
在教學的過程中我不斷啟發學生思考數學的借位算法,於是我將1到12月的12個數字在黑板上向下排開,一位數的前面加上「0」的時候,分組討論的學生瞬間想到了解決方案,即不去判斷變量長度,所有月份都在前面補一位「0」,然後直接從右向左取兩位數即可。於是學生立刻用Right函數將代碼4優化為代碼5(如圖5)。
最終的代碼不但實現了要求,解決了日期格式問題,而且大大提升了運行的效率。學生在繪製完流程圖後驚奇地發現,流程圖也被精簡到了最大程度。從代碼1到代碼5,體現的是運用計算機軟體解決問題的一般過程,同時也體現了「優化思想」在VB教學中的運用,而通過本案例也總結了初中VB教學中「優化思想」的教學建議。
● 問題的解決引發關於「優化思想」運用的思考
首先,將算法作為信息技術「優化思想」的核心,讓學生運用算法思維去優化程序設計。不同的算法會影響程序編寫的方法、程序編寫的語言及程序編寫的難易程度,所以,算法的優劣將直接影響所編程序的質量,可以說算法是程序的靈魂。我們對程序進行優化,實際上就是對算法進行優化,在教學中,我為了解決這個實際問題,在代碼4已經解決了問題後,又重新進行了代碼的算法選擇,極大地提升了解決問題的效率。
類似的問題還出現在數學計算上,如求「1+2+…+100=」的值。對於這道題,我們可以採取循環結構程序進行設計,分析過程如圖6所示。
如果用VB程序進行編寫,最後得到的程序語句如圖7所示。如果我們採用高斯算法進行編寫,則該程序的編寫就更加簡單、高效,參考程序如圖8所示。
很顯然,採用第二種算法,程序編寫更加簡單,運行起來也更加高效。因此,程序優化要優化程序編寫的過程與語句,使程序更容易編寫。
要想讓學生能夠在進行程序編寫時將所編寫出來的程序最優化,培養學生的算法思維必不可少。祝智庭教授在《新世紀 新理念 新教材》中提出,算法思維通常被認為是解決問題的過程性思維方法,但我們可進一步把算法思維看作是人與機器共通的思維形式。算法思維就是要能夠清楚地說明其規則。能將一個複雜的問題轉化成幾小塊並將其進一步簡化,這才是其本質所在,也是數學、科學和設計領域的一項重要技能。在程序設計教學中,教師應通過對學生進行算法思維訓練與培養,使學生能夠清楚地懂得其中的規則,將一個複雜的問題轉化成幾小塊並將其進一步簡化。而對學生進行算法思維的培養,則主要看重一個人是否具有條理化、反思性的思維習慣,能否將問題的細枝末節與總體規劃相結合地考慮問題,這是決定其是否能夠成功地解決問題的一個關鍵性因素。
其次,結合現實,提出問題,探討優化策略,滲透「優化思想」。在學科領域,針對學科核心思想的優化研究,研究得比較多的是數學學科,其「優化思想」主要集中在如何解決數學問題上。而在信息技術學科中,我們應該結合現實問題,與學生展開探討,在解決實際問題的過程中讓學生體悟解決該類問題的方法,從中提煉出相關的優化規則與思想,形成知識結構,這樣的過程對知識的掌握和理解程度甚至學科素養的培養都大有益處。
本文用日期格式的問題展現了「優化思想」如何在教師的運用下,逐步引導學生去思考解決問題並用更優化的方式解決。生活中我們常見的泡茶問題,將兩種解決方法放在一起,也會出現更優的選擇:
方法一:
N1:準備泡茶材料(茶杯、茶葉、水壺);
N2:在茶杯中放茶葉;
N3:將水壺中的水燒開;
N4:泡茶。
方法二:
N1:取水壺燒開水;
N2:在燒水的等待中取茶杯、茶葉;
N3:水開後,泡茶。
從上面的例子中可以看出方法二明顯優於方法一。日期格式問題只是我們在編程解決實際問題中遇到的其中一個,還有許多問題值得研究和探索。比如計算星期幾、計算閏年等題目類型,都需要結合我們的現實情況給出相對應的引導策略,一步步地吸引學生去開展更高效的學習。
最後,結合實踐操作,充分利用流程圖,感悟「優化思想」。在程序編寫的過程中,帶領學生繪製對應代碼的流程圖,依託流程圖去優化代碼並且感悟「優化思想」。這一點在本節課中有較多體現,從原來使用了IF語句的代碼結構到後來最終的代碼,結構發生了巨大的變化。不斷優化的過程中隨之帶來的是效率的提升和代碼量的減少,甚至解決問題的思路都發生了巨大變化,在這個過程中學生也能充分感受到「優化思想」的巨大價值。
「優化思想」對學生的影響是非常大的,今後他們在運用信息技術解決問題時,會去主動尋找各種優化的方法,從這個角度上講,「優化思想」的掌握也有利於學生信息素養的提升。在信息技術學科的教學中,尤其是VB程序設計的教學,我們不能僅局限於優化方法的講授,而是應著重對學生進行「優化思想」的滲透,積極引導學生運用「優化思想」去嘗試解決遇到的問題,這對師生的教與學來說都是很有價值的。

收藏

相關推薦

清純唯美圖片大全

字典網 - 試題庫 - 元問答 - 简体 - 頂部

Copyright © cnj8 All Rights Reserved.