歡迎來到演算法的世界!
你好!在本章中,我們將學習如何設計、編寫和修正演算法。你可以把演算法想像成一份食譜:一套明確的、按部就班的說明,用來完成某項任務或解決問題。無論你是要烤一片多士,還是要編寫下一個熱門應用程式,你都需要一個計畫。讓我們開始吧!
快速回顧:演算法只是一個計畫。它還不是程式碼——它是程式碼背後的邏輯。
1. 三大支柱:輸入、處理與輸出
在你開始編寫演算法之前,你需要找出三件事:輸入 (Input)、處理 (Process) 和 輸出 (Output)(簡稱 IPO)。這能幫助你準確理解問題的要求。
- 輸入:什麼數據進入了系統?(例如:輸入你的姓名)。
- 處理:該數據發生了什麼事?(例如:將兩個數字相加)。
- 輸出:最後產生了什麼結果?(例如:顯示「你好」的消息或計算總和的結果)。
比喻:一台榨汁機。水果是輸入,旋轉的刀片是處理,而美味的果汁就是輸出!
重點提示:隨時問自己:「我有什麼?」、「我需要對它做什麼?」以及「最終結果應該是什麼樣子?」
2. 結構圖 (Structure Diagrams)
有時候問題太大,無法一次解決。結構圖能幫助我們將大問題拆解成較小、易於管理的區塊(這稱為分解 (Decomposition))。
結構圖看起來像一棵倒過來的樹。主要問題在頂端,較小的子任務則連接在它下方。這顯示了問題的層級 (hierarchy)以及不同部分是如何連結在一起的。
快速回顧:
- 顯示問題如何被拆解。
- 每個方塊代表任務的一小部分。
- 幫助團隊同時處理專案的不同部分。
3. 流程圖 (Flowcharts):直觀呈現邏輯
流程圖是一種使用特定形狀來視覺化呈現演算法的方法。每個形狀都有特殊的含義,你必須為 OCR 考試記住它們。
重要的流程圖符號:
- 終止符 (橢圓形):用於「開始」和「結束」。每個流程圖都需要它們!
- 輸入/輸出 (平行四邊形):用於程式要求數據或顯示結果時。
- 處理 (矩形):用於計算或設定變數等指令。例如:\( x = x + 1 \)。
- 決策 (菱形):用於「是/否」或「真/假」問題。這是路徑分岔的地方。
- 子程式 (兩側有直線的矩形):用於顯示在其他地方執行的獨立指令集。
- 線條 (箭頭):顯示「流程」的方向。
如果你的第一份流程圖看起來亂糟糟的,別擔心!請使用鉛筆,並記住箭頭必須始終指向下一個步驟。
4. 偽代碼 (Pseudocode):像電腦一樣思考
偽代碼是「假代碼」。它看起來像程式語言,但設計給人類閱讀。它沒有像 Python 那樣嚴格的「語法」規則,但應該要易於跟隨。
在 OCR 考試中,你會看到考試參考語言 (Exam Reference Language)。以下是一個登入系統的簡單偽代碼範例:
INPUT username
IF username == "Admin" THEN
PRINT "Welcome back!"
ELSE
PRINT "Access Denied"
ENDIF
記憶小撇步:把偽代碼想像成你程式的「草稿」。
5. 嵌套 (Nesting):盒中之盒
嵌套是指將一個程式結構放入另一個結構內。你可以嵌套選擇 (Selection)(IF 語句)或迭代 (Iteration)(迴圈)。
- 嵌套選擇:在 IF 語句內再嵌套一個 IF 語句。對於縮小選擇範圍很有用。
- 嵌套迭代:在迴圈內嵌套另一個迴圈。想像時鐘:每當「小時」迴圈運作一次,「分鐘」迴圈就會運作 60 次。
常見錯誤:忘記縮排你的嵌套程式碼。縮排(將程式碼向右移)能讓你更容易看出哪個「盒子」在哪個裡面。
6. 追蹤表 (Trace Tables):化身為電腦
追蹤表是一種用來一步步跟蹤演算法的工具。它能幫助你記錄程式執行時變數的變化。這通常被稱為「乾跑」(dry run)。
如何使用追蹤表:
1. 將每個變數列為欄標題。
2. 逐行跟隨演算法。
3. 每當變數發生變化,就在表格的下一行寫入其新值。
快速回顧:追蹤表是找出邏輯錯誤的最佳方法。如果表格中的最終值與你預期的不符,說明邏輯中有錯誤!
7. 修正與優化演算法
演算法有時會出現「錯誤」(bugs)。你需要能夠識別並修正兩類主要錯誤:
- 語法錯誤 (Syntax Errors):這是程式碼「語法」上的錯誤(例如,將 PRINT 誤拼成 PRITN)。程式將完全無法執行。
- 邏輯錯誤 (Logic Errors):程式可以執行,但給出的結果是錯誤的。例如,你本意要用 \( * \) 卻使用了 \( + \)。
優化 (Refining)意味著讓演算法變得更好。這可能意味著讓它更短、更快,或者更健壯 (robust)(更不容易出錯)。你可以透過使用迴圈來取代重複的行,或者使用更有意義的變數名稱來優化程式碼。
你知道嗎?第一個「電腦蟲」(computer bug) 真的是在 1947 年卡在電腦裡的一隻飛蛾!今天,我們只是用這個詞來指代程式碼中的任何錯誤。
重點總結:
- 使用 IPO 來釐清目標。
- 使用 流程圖 和 偽代碼 來規劃步驟。
- 使用 追蹤表 來測試你的計畫並找出錯誤。
- 優化你的工作,使其達到完美!