演算法與流程圖
進階演算法就是一步步解決問題的清晰步驟,就像食譜。流程圖用圖形畫出來:橢圓起止、矩形做東西、菱形判斷、平行四邊形輸入輸出。
- 演算法=有限、清晰、有次序的步驟
- 橢圓起止、矩形處理、菱形判斷、平行四邊形輸入輸出
- 菱形必有兩條出路;一圖一開始
§課文原文 Passage
1演算法是解決問題的一連串清晰步驟,就像一份食譜:先列出材料,再按部就班執行,便能完成菜式。合格的演算法必須清晰、有限且有次序,每一步都明確具體,步驟數量有限,先後次序固定,調換次序便可能出錯。流程圖則把演算法畫出來:橢圓形代表開始與結束,長方形代表處理,菱形代表判斷,箭嘴表示流程方向。
2實際寫程式之前,先設計演算法並繪畫流程圖,可以及早發現邏輯錯誤,減少日後除錯的時間。常見例子包括找出全班最高分的同學、計算各科平均分、把考試成績由高至低排序;這類題目都應先想清楚輸入、處理與輸出三個環節,再轉化為具體步驟,最後才動手編寫程式碼,出錯的機會便大大減低。
3香港日常應用隨處可見:港鐵路線搜尋器在幾秒內建議乘車方案,八達通系統自動計算最平車資,外賣平台為數以千計的訂單安排派送路線,背後全部是演算法在運作。學會有條理地分步思考,把大問題拆解成小步驟,正是所有編程與運算思維的共同基礎,對其他學科的解難同樣有幫助。
1重點摘要 Summary
演算法就是一步步解決問題的清晰步驟,就像食譜。流程圖用圖形畫出來:橢圓起止、矩形做東西、菱形判斷、平行四邊形輸入輸出。
2生字卡 Vocabulary
解決問題的一步一步清晰指令:步驟有限、次序明確。
用標準圖形和箭嘴把演算法畫出來的圖。
表示開始 Start 或結束 End。
表示一個動作或計算,例如「總分+10」。
表示一個判斷,分「是/否」兩條出路。
表示輸入資料或輸出結果。
表示流程進行方向的符號,每條線都要有箭頭。
用程式語言寫成的指令;流程圖想清楚後,譯做程式碼交給電腦執行。
3逐步講解 Steps
- 演算法三個要求合格的演算法必須符合三個要求。第一,清晰:每一步都明確具體,不含糊,任何人照著做也得到同一結果。第二,有限:步驟數量有限,一定會做完,不會無限循環。第三,有次序:先後次序固定,調換次序便可能出錯,例如先穿鞋再穿襪便行不通。可以用食譜來理解:一份永遠寫不完、或者「看心情」加鹽的食譜,就不是合格的演算法。答題時三個要求都要寫出來,並且各配一個簡短例子。
- 日常例子:沖檸檬茶演算法不一定需要電腦,日常生活到處都是。以沖檸檬茶為例:開始之後先燒水;然後判斷「有檸檬嗎?」如果有,便放入檸檬;如果沒有,便先去買檸檬再繼續;最後加入茶,完成。這個過程有一步一步的指令,還有一個判斷分支,已經是一個演算法。由此可見,演算法只是「解決問題的一連串清晰步驟」,寫程式之前的設計、甚至教同學摺紙鶴的步驟,都符合這個定義。
- 流程圖符號流程圖用五種標準符號表達演算法:橢圓代表開始或結束;矩形代表處理,即進行動作或計算;菱形代表判斷,分「是」和「否」兩條路;平行四邊形代表輸入或輸出;箭頭表示流程方向。五種符號各司其職,畫圖時不可混用,例如判斷絕不能畫成矩形,輸入也不應畫成矩形。記憶方法:想「問問題」就用菱形,想「做事情」就用矩形,想「資料進來或出去」就用平行四邊形。
- 畫圖規矩畫流程圖有幾條規矩:一個流程圖只能有一個開始;每條箭頭都必須標明方向;菱形必須有「是」和「否」兩條出路,不可以只有一條。例如判斷成績是否合格,菱形就要分出合格與不合格兩條路線,兩條路最後都要通向結束,流程圖才算完整。常見錯誤包括:忘記畫開始或結束的橢圓、箭頭沒有方向、判斷之後其中一條路懸空。畫完之後沿著箭頭由開始走到結束檢查一次,便能發現這些問題。
- 為什麼要先畫圖寫程式之前先畫流程圖,可以把邏輯想清楚,避免寫到一半陷入混亂;程式其實只是把流程圖翻譯成程式碼。例如先畫好成績分級圖,寫程式時就不會漏掉任何一個分數範圍,之後除錯也更快,因為可以直接對照流程圖檢查每一條分支。香港的例子:港鐵路線搜尋器在幾秒內建議乘車方案,背後正是設計好的演算法在運作。先設計後編程,是所有程式員的工作習慣,也是運算思維的核心。
- 循環在流程圖怎樣畫重複的工作在流程圖中用「返回箭頭」表達:把流程線由下方畫回上方,形成迴圈。例如砌 10 層積木:矩形「砌一層」之後,菱形問「砌夠 10 層嗎?」,答案為否時,箭頭折返「砌一層」繼續;答案為是時,箭頭通往結束。菱形的出路折返向上,就是流程圖裡循環的標誌。畫這類圖時,記得在菱形旁寫清楚判斷條件,並且確認循環最終有離開的出口,否則流程便會永遠繞圈。
4圖解 Diagrams
5例題示範 Example
例題:用文字描述「判斷一個分數是否合格(50 分或以上)」的流程圖。
- 第一步先畫開始的橢圓,然後用平行四邊形表示「輸入分數」,因為分數是由外面進入程式的資料。
- 接著畫菱形,寫上判斷條件「分數大於或等於 50?」,菱形必須有兩條出路,分別標明「是」和「否」。
- 「是」的一邊輸出「合格」;「否」的一邊輸出「不合格」,兩條分支不可以共用同一個輸出。
- 最後兩條分支都要用箭頭連到結束的橢圓,畫完後由開始沿箭頭走一次,確認沒有懸空的路線。
- 答案:畫圖次序是:開始(橢圓),輸入分數(平行四邊形),判斷「分數大於或等於 50?」(菱形),「是」輸出「合格」、「否」輸出「不合格」,最後兩條分支都到達結束(橢圓)。要點是菱形必須有「是」和「否」兩條出路,而且所有箭頭最後都要到達結束,流程圖才算完整。
6常見錯誤 Mistakes
75 題快測 Quick check
Q1流程圖裡面,菱形代表?A. 開始 B. 判斷 C. 輸入
Q2「輸入分數」應該用哪個圖形?
Q3一個演算法可以有多少個「開始」?
Q4「開始」和「結束」應該用哪個圖形?
Q5用文字寫出「計算 5 個科目總分」演算法的三個主要步驟。
8重點回顧 Recap
- 演算法=有限、清晰、有次序的步驟
- 橢圓起止、矩形處理、菱形判斷、平行四邊形輸入輸出
- 菱形必有兩條出路;一圖一開始
- 先畫流程圖後寫碼,邏輯先清楚
- 食譜、遊戲指引都是演算法 — 條理思想不用電腦也練到