運算思維( CT )的四大核心:
分解( Decomposition )
模式辨別 / 數據表示( Pattern Recognition / Data Representation )
抽象化( Abstraction )
演算法( Algorithms )
1. 分解( Decomposition ):
由上而下的過程( Top-Down )。
將一個大問題分解成數個小問題,當每個小問題都可以被解決,則合起來的大問題就可以被解決。
分解方式:(1) 從問題結構分解 ,例如汽車可以由結構分解為車體、引擎、底盤等部分;(2) 從問題流程分解,例如旅遊規劃可以從流程分解。
2. 抽象化( Abstraction ):
除去細節及與解決問題不相干的資訊,聚焦於重點。
即抽取基本的解題單元,以重複利用並擴展解題領域。
辨識與描述普遍化的性質(一般化)。從複雜的現實世界映射到簡化的抽象模型。
資料來源:Kramer, J. (2007). Is abstraction the key to computing?. Communications of the ACM, 50(4),36-42.
資料來源:教育部運算思維推動計畫
3. 模式辨別 / 數據表示( Pattern Recognition / Data Representation ) :
針對資料找出數據的樣式、規則
在適當的圖形、圖表、文字或圖像中描述和組織數據,產出共通的模式、規則。
圖片來源:J.Wong, USGS llustration by John M. Evans, USGS, Colorado District、教育部運算思維推動計畫
4. 演算法( Algorithms ):
設計解決問題的有序步驟或規則。
四大結構:循序、選擇(決策)、迴圈(重複)、函數。
演算法初探:什麼是演算法( Algorithms 怎麼念?)?
英國的小朋友如何設計自己的 Jam Sandwich Algorithm 。
演算法:
由有限個"定義良好的步驟"所構成的集合,可用於解決某一特定問題。(a step-by-step procedure for solving a problem )
輸入( Input ) => 演算法 ( Algorithms ) => 輸出( Output )
因此,在日常生活中「演算法」 隨處可見,例如pizza的製作(右圖)、玉米濃湯食譜:
1. 中小火融化奶油,奶油熔化後拌炒洋
蔥丁至呈現透明。
2. 再加入玉米粒一起拌炒。
3. 加入高湯,大火煮滾後,以果汁機攪
拌均勻,再過篩回鍋中續煮。
4. 再加入些許煮熟的玉米粒共煮。
5. 加入香料、鹽巴或黑胡椒調味,即可完成。
若按照食譜步驟操作,卻無法作出一樣美味的濃湯,代表其並非是一個優秀的食譜( 優秀的演算法),因此,可藉由後人不斷的改良至完善(優良的演算法)。
若按照食譜步驟操作,即可作出一樣美味的濃湯,代表其是一個優秀的食譜( 優秀的演算法)。
演算法的特徵:
輸入:一個演算法必須有零個或以上的輸入。
輸出:一個演算法應有一個或以上的輸出,輸出是演算法計算的結果。
明確性:演算法中每一個敘述都必須是明確定義的,以保證演算法的實際執行結果是精確地符合要求或期望,即不論是由人類或電腦執行結果均相同。( 例如「天氣太熱了,就吃冰。」這句話並不具備明確性,因為每個人對天氣冷熱的感覺並不相同。)
有限性:演算法必須在執行有限個步驟後能能夠完成任務。
有效性:又稱可行性。演算法中描述的操作都是可以透過「已經實現的基本運算」執行有限次來實現。( 具體可行,且在有限次數內獲得結果 )
是一種思考流程,可透過程式語言將思考流程中解決問題的步驟寫下來形成程式碼,提供予計算機依流程運行計算。例如相同的問題,相同的解法,可以使用不同的程式語言( C 、Python、Java 等 )來描寫。
使用文字敘述的方式,說明解決問題的步驟。
例:猜數字遊戲
步驟一、由1~100中任選一數字A。
步驟二、請遊戲者開始隨便猜一數字B。
步驟三、若B < A ,就提示遊戲者「數字再大一點」;若B > A ,就提示遊戲者「數字再小一點」,提示後再由步驟二重新開始。
步驟四、若B = A ,就告訴遊戲者「猜對了」。
2. 虛擬碼( Pseudocode ):
通常是以一般口語敘述,來描述問題的解決流程。虛擬碼並不是真的要在電腦上執行,因此只要能看得懂就可以了,沒有什麼語法要遵守,但也可以寫成更接近所要使用的程式語言般的程式碼樣貌。
例:判斷1到100的整數中,哪些是3的倍數,哪些是5的倍數。
迴圈 i = 1 ~ 100 (一個由1到100重複執行的迴圈,i就是那個數字,也就是我們的參數,程式將重複執行的動作稱為迴圈)
如果i可以被3整除,則:
印出 3的倍數
如果i可以被5整除,則:
印出5的倍數
如果i不能被3整除,也不能被5整除,則:
印出 i (那個數字)
繼續下一個i
3. 流程圖 ( Flow Chart ) 習題範例圖片
流程圖的優點:
流程步驟的可讀性較高
方便除錯
容易修改流程
流程圖繪製原則:
使用標準符號,以便閱讀和分析
文字簡潔且明確可行
繪製方向由上而下,由左至右
流程線條避免交叉或過長
流程圖繪製時,可以手繪製或使用其他文書軟體,例如word、powerpoint、visio等,或流程圖軟體,例如:Draw.io( 線上免費軟體 )。
在word內以繪圖畫布的方式來繪製流程圖。
( 繳交作業 )
請以流程圖表示高速公路上某一路段測速照相機的演算法:小客車通過測速照相機時 (1) 車速超過時速110公里,則照相;(2)車速未超過時速110公里(含時速110公里),則不拍照。
請以流程圖表示:任意輸入一個整數,並判斷輸入的整數為奇數或偶數 。
請以流程圖表示:輸入一任意整數,並判斷是否為2的倍數。
請以流程圖表示:輸入一個成績後,在成績單上列印出及格或不及格。
請以流程圖表示:輸入A、B、C三個不同的整數,比較其大小後,輸出最大的數。
請以流程圖表示輸入A之後,計算出 | A+2| 的答案。
請以流程圖表示出甲、乙兩數的總和。
破解遊戲關卡的方法或步驟,不論是誰使用都可以過關,因此遊戲攻略也可以說是一種破解遊戲的演算法。以下提供幾個經典遊戲與大家分享。
[ 遊戲連結 ]
程式語言可以分為低階語言與高階語言。
一、低階語言
1. 機器語言:
機器語言是由一連串的數字0與1組合而成,這也是電腦能夠直接執行的語言。對人而言,卻是非常不容易讀懂並了解的。
2. 組合語言:
因機器語言不容易撰寫與閱讀,因此後來發展出組合語言。將原本由0、1組成的機器語言改為簡短字串取代。工程師較能使用比較容易閱讀的組合語言來撰寫程式,最後,再由組譯程式轉換為機器語言去由電腦執行。
二、高階語言
使用近似人類自然語言的語法來敘述指令,也因接近人類常用的語句,故有較高的可讀性,學習與撰寫也變得更簡單。由於電腦看不懂高階語言,所以靠編譯程式( Compiler )或直譯程式( Interpreter ),將高階語言轉換為機器語言後,才能交由電腦執行。例如C、C++、Java、Python等。
高階語言目前又可再分為:( 1 ) 以輸入文字方式建構的高階程式語言 ;( 2 ) 採用圖形化元件設計的視覺化程式語言。
視覺化程式語言將許多以文字建構出某些功能的程式碼包裝成一片片具有特定功能的圖卡,再以圖卡拼接的方式去讓使用者設計、組合出屬於自己的程式。因此,可讓學習程式設計者有更容易上手、學習門檻較低、可轉注於程式架構訓練上等優點, 進而啟發學習興趣。目前常見的視覺化程式語言有Scratch、App Inventor、S4A、Mblock等。
1. 申請一個免費的電子郵件信箱 :
outlook.com ( Microsoft 提供的網路郵件服務 ) 有中文使用介面,較友善(須手機驗證)
google(需手機驗證)
Yandex mail ( 俄羅斯最大的網際網路企業,全英文介面,申請帳號時,請選擇"我沒有手機")
2. 使用Google Chrome瀏覽器進入Scratch 網站 https://scratch.mit.edu 。
3. 點選 " 加入Scratch" 新增一個使用者帳號。
4. 點選 " 創造 " 即可進入Scratch程式編環境。Scratch編輯環境如下圖所示。編輯區中所編寫的程式就是要控制
舞台區中所有角色或背景,使其能適時地完成工作或做出適當的回應。
各區域功能說明:
工具箱:依照圖卡(元件)功能做分類,並以不同顏色顯示。包含動作類、外觀類、音效類、事件類、控制類、偵測類、運算類、變數類、函式積木類,若不夠用,Scratch還另外提供許多擴展工具。
程式編輯區:由工具箱中可拖拉出各種不同的控制圖卡(元件),並在編輯區中組合出完整的程式。
舞台區:執行的程式即是用來控制舞台上的角色、背景執行不同的動作或表現出不同反應,所以,編寫的程式時須注意是針對哪個角色或背景所編寫。另外,舞台區中角色、背景的可利用繪圖工具作各種不同的更換、修改。
背包區:需登入後才會具有的功能。可以用來在程式之間交換程式碼。
角色、背景設定區:可添加許多不同的角色,設定它們各自不同的屬性,也可利用繪圖工具修改角色、背景圖案。
舞台區中若要安排角色位置時,須注意舞台上座標的配置,如右圖。
舞台區下方可顯示現在已被點選的角色名稱,及角色中心點在舞台上的位置座標。
角色圖案的中心點可在點選 " 造型 " 標籤後,進入造型編輯模式時修改。
程式編輯完畢後,如欲執行程式,只需以滑鼠游標點按舞台區左上角" 綠旗 " 圖案即可。
控制角色動作: 動作 類型
改變角色外觀: 外觀 類型
與使用者互動的常用元件:
事件(黃色)、偵測(淺藍) 類型