歡迎來到演算法表示法!
哈囉,未來的電腦科學家!在上一章中,我們學到演算法 (Algorithm) 就是一組用來解決問題的指令(就像詳盡的食譜一樣!)。
但我們該如何寫下這些指令,讓人類程式設計師或電腦本身都能完美地理解呢?
這正是本章要探討的主題!我們將會探索表示演算法的兩種主要方式:偽代碼 (Pseudocode) 和 流程圖 (Flowcharts)。
為什麼這很重要? 如果你能清晰地表示演算法,你就已經成功了一半,離寫出無錯誤的電腦程式更近一步了!
1. 結構化英文(偽代碼)
什麼是偽代碼?
偽代碼 (Pseudocode)(讀作 "SUE-doh-code")的意思是「虛擬代碼」。這是一種使用日常英語單字和標準程式設計關鍵字混合編寫演算法的方法。
它不是真正的程式語言,但它遵循程式語言的邏輯結構。
偽代碼的目標是讓人類容易理解,同時又具備足夠的格式,讓程式設計師可以將其直接翻譯成 Python、Java 或任何其他程式語言。
優秀偽代碼的關鍵特徵:
- 使用常見的程式設計術語(例如:INPUT, OUTPUT, IF, WHILE)。
- 使用縮排(空格)來顯示結構和程式碼區塊。
- 必須明確(沒有歧義,只有一種可能的解釋)。
記憶小撇步: 可以把偽代碼想像成你實際程式的草稿或藍圖。
演算法的三大基本結構
所有的演算法,無論多麼複雜,都是由三種基本結構組成的。你必須能夠在偽代碼中表示這三種結構。
A. 順序結構 (Sequence)
順序 (Sequence) 是最基本的結構。它僅指按照書寫順序,一個接一個地執行指令。
範例: 泡一杯茶。煮水、把茶包放入杯中、倒水、加牛奶。
偽代碼範例(順序):
1. INPUT student_name
2. INPUT score_1
3. INPUT score_2
4. total_score = score_1 + score_2
5. OUTPUT total_score
B. 選擇結構 (Selection)
選擇 (Selection)(或稱分支)允許演算法根據條件(真/假問題)做出決定。這通常透過 IF...THEN...ELSE 結構來實現。
比喻: 當你穿衣服時,你就在進行選擇:
IF (正在下雨) THEN 穿外套, ELSE 穿輕便夾克。
偽代碼範例(選擇):
INPUT age
IF age >= 18 THEN
OUTPUT "你有投票資格"
ELSE
OUTPUT "你尚未達到投票年齡"
ENDIF
重要提示: 請務必記得使用 ENDIF 來結束你的結構。縮排對於程式碼的可讀性至關重要!
C. 迭代結構 (Iteration)
迭代 (Iteration) 意味著重複執行一組指令,直到滿足特定條件為止。
這能讓你免於重複編寫相同的程式碼。
你在 GCSE 中會看到的兩種主要迭代類型為:
1. 計數控制迴圈 (FOR loop): 重複指定的次數。
2. 條件控制迴圈 (WHILE loop): 只要條件為 TRUE 就會持續重複。
偽代碼範例(WHILE 迴圈 - 條件控制):
password = ""
WHILE password != "secret"
INPUT password
ENDWHILE
OUTPUT "准許存取"
偽代碼範例(FOR 迴圈 - 計數控制):
FOR counter = 1 TO 5
OUTPUT "Hello!"
NEXT counter
快速複習:偽代碼關鍵字
- INPUT/OUTPUT: 取得資料輸入,輸出顯示結果。
- IF/THEN/ELSE/ENDIF: 選擇(決策)。
- WHILE/ENDWHILE: 根據條件進行重複。
- FOR/TO/NEXT: 重複指定的次數。
2. 流程圖 (Flowcharts)
什麼是流程圖?
流程圖 (Flowchart) 是一種使用標準圖形和連接箭頭來表示演算法的視覺化方法。相比於閱讀純文字,使用流程圖往往能更容易看清結構和控制流程(步驟是如何連接在一起的)。
你知道嗎? 流程圖早在幾十年前,現代程式語言出現之前,就已經被用來規劃業務流程和邏輯了!
必要的流程圖符號
你必須了解以下五個核心符號的用途與形狀:
1. 終止符號 (Terminator / Start/Stop)
形狀: 橢圓形或圓角長方形。
用途: 標記演算法的開始 (START) 和結束 (STOP)。每個流程圖都必須有一個起點和一個終點。
2. 處理符號 (Process Box)
形狀: 長方形。
用途: 代表動作、計算或改變資料的指令(例如:設定變數、計算總和)。
範例: Total = Price * Quantity
3. 輸入/輸出符號 (Input/Output Box)
形狀: 平行四邊形。
用途: 代表進入系統的資料 (INPUT) 或顯示/列印出來的資料 (OUTPUT)。
範例: Input Name 或 Output Result
4. 決策符號 (Decision Box)
形狀: 菱形。
用途: 代表一個必須以 YES/TRUE 或 NO/FALSE 回答的條件或問題。這就是選擇結構 (IF...THEN...ELSE) 發生的位置。
關鍵規則: 決策符號總是有一個進入箭頭和兩個離開箭頭(一個代表 YES,一個代表 NO)。
5. 流程線 (Flow Lines)
形狀: 箭頭。
用途: 連接各個圖形,並顯示演算法遵循的確切方向或路徑。
流程圖符號的記憶小技巧:
Oval(橢圓)結束流程 (O 代表 Oval 或 Out)。
Parallelogram(平行四邊形)用於 Putting(放入/輸出)資料。
Rectangle(長方形)用於 Routine(常規計算/處理)。
Diamond(菱形)進行 Decision(決策)。
製作簡單的流程圖(範例)
讓我們用流程圖來表示詢問分數並檢查該分數是否及格(選擇結構)的簡單序列。
(1) 橢圓形:START
(2) 向下箭頭連至
(3) 平行四邊形:Input Score
(4) 向下箭頭連至
(5) 菱形:Is Score > 50?
(a) 標示為 'YES' 的箭頭連至平行四邊形:Output "Pass"
(b) 標示為 'NO' 的箭頭連至平行四邊形:Output "Fail"
(6) 來自 "Pass" 和 "Fail" 的箭頭匯合並指向
(7) 橢圓形:STOP
剛開始繪製時如果覺得棘手,不用擔心。 專注於圖形符號及其用途。如果你連接了錯誤的圖形,邏輯就會中斷!例如,切勿畫出一條離開「處理」方框的箭頭,在沒有中間加設「決策」菱形的情況下,直接又連回同一個方框,因為那會變成無窮迴圈!
3. 比較兩種表示法
在編寫最終程式碼之前,偽代碼和流程圖都是設計演算法的絕佳工具。
| 表示法 | 優點 | 缺點 |
| 偽代碼 |
|
|
| 流程圖 |
|
|
表示法的關鍵要點
我們表示演算法的方式並不會改變演算法本身,只是改變了我們溝通它的方式。請確保你選擇的方法能清晰顯示:
1. 順序: 固定的步驟順序。
2. 選擇: 所有的決策點(IF / 菱形)。
3. 迭代: 所有演算法進行迴圈的點(FOR / WHILE / 形成迴圈的菱形)。
持續練習將簡單的問題轉換為偽代碼和流程圖,你就能掌握這項核心技能!