歡迎來到邏輯推理與演算法的世界!

你有沒有想過,電腦是怎樣準確知道該做甚麼的呢?無論你是在玩電子遊戲、看動畫,還是在平板電腦上使用應用程式,電腦其實一直都在遵循著一套清晰的指令運作。在這份學習筆記中,我們將會化身為程式小偵探

你將會學會如何閱讀指令、運用邏輯推理來預測即將發生的事情,並找出那些隱藏在程式中的小錯誤(我們稱之為 Bug程式錯誤)。起初如果覺得有點難,千萬不用擔心——我們會一步一步把它拆解清楚!

重點提示:邏輯推理能幫助我們在電腦運行指令之前和之後,去理解、預測和修正這些指令。


1. 甚麼是演算法(Algorithm)?

演算法是一套明確、按部就班的指令或規則清單,用來達成特定目標或解決問題。

試想像演算法就像一張烘焙蛋糕的食譜,或者一套樂高(Lego)積木的組裝說明書。只要步驟清晰、次序正確,而且沒有任何模糊不清的地方,任何人跟著去做,每次都會得到一模一樣的成果。

演算法與程式:兩者有甚麼分別?

大家經常會混淆這兩個詞語,但它們其實並不相同:

演算法(Algorithm):即是計劃或設計。它可以用日常語言寫成、畫成流程圖(Flowchart),或者隨手記在紙上。演算法不需要依賴電腦也可以存在。

程式(Program):將演算法翻譯成程式碼(例如 Scratch、Blockly 或 Python),讓電子裝置能夠讀取並執行。

打個比方:演算法就像寫在紙上的樂譜;而程式就是電子琴真正把這首樂曲演奏出來!

重點提示:演算法是按部就班的計劃;程式則是將這個計劃轉化為給電腦運行的程式碼。


2. 甚麼是邏輯推理(Logical Reasoning)?

邏輯推理是一種運用清晰規則、事實和推論的系統化思考方式。這代表我們要看清楚寫下的內容,思考背後的規則,從而推導出下一步必定會發生的事。

你知道嗎?電腦其實不會「思考」或「猜測」!

一個很常見的誤解,就是以為電腦擁有常識。其實它們完全沒有!電腦無法猜測你原本想表達甚麼。它只會完全照單全收,精確執行你的指令——即使那些指令會讓它直接撞向牆壁!

正因為電腦只會按照字面規則執行,我們可以運用邏輯推理來:

解釋為甚麼螢幕上會出現某個結果。
• 在按下「開始」鍵之前,預測一組指令將會做出甚麼行為。
• 當事情沒有按計劃進行時,找出並修正當中的錯誤。

重點提示:邏輯推理就是一步一步遵循客觀規則,絕不憑空猜測。


3. 簡單演算法的基本組成要素

當你分析或解釋一個演算法時,通常會發現四個主要的基本要素。讓我們一起來看看:

A. 順序(Sequence,次序很重要!)

順序是指將指令由上而下,或由頭到尾按精確的次序排列。如果你改變了指令的次序,最終的結果也會跟著改變。

生活例子:想想穿鞋子和襪子的過程。
步驟 1:穿上襪子。
步驟 2:穿上鞋子。
如果你把順序倒轉為 步驟 1:穿上鞋子,步驟 2:穿上襪子,最後襪子就會套在鞋子外面了!

B. 選擇(Selection,作出抉擇)

選擇是指演算法根據一個問題(即「條件」)成立與否(真或假),來決定要走哪一條指令路徑。

我們通常會用如果(IF)那麼(THEN)否則(ELSE)來表示:
如果(IF)下雨,那麼(THEN)穿上雨衣,否則(ELSE)戴上太陽帽。
• 在遊戲中:如果(IF)分數 = \(10\),那麼(THEN)顯示「你贏了!」,否則(ELSE)繼續遊戲。

C. 重複(Repetition,迴圈 / 迭代)

重複是指將同一組指令重複執行多次,這樣你就不用一遍又一遍地重複寫出相同的內容。迴圈主要有兩種類型:

計數控制迴圈(Count-controlled loop):重複指定的次數(例如:重複 4 次:向前走 1 步,向右轉 90 度,這樣就能畫出一個正方形)。
條件控制迴圈(Condition-controlled loop):重複執行直到某個情況改變為止(例如:重複直到碰到邊緣:移動 10 步)。

D. 變數(Variables,記憶盒子)

變數是一個具有名稱的儲存空間,用來存放程式運行過程中可能會改變的數值。你可以把它想像成一個貼了標籤的盒子,裡面裝著一個數字或文字。
例子:一個名為 score(分數)的變數,每次你接到金幣時就會增加 \(1\);或者一個倒數至 \(0\) 的 timer(計時器)

重點提示:演算法是由順序(次序)、選擇(抉擇)、重複(迴圈)和變數(可變數值)所組成的。


4. 如何解釋和追蹤演算法

我們怎樣才能不靠胡亂猜測,就能解釋演算法的運作原理呢?我們會使用一種名為人工追蹤(或簡稱追蹤,Dry running / Tracing)的技巧。

步進追蹤(Step-by-Step Tracing)

追蹤的意思是讓自己化身為電腦!你拿起紙和筆,一行一行地跟著指令執行,並記錄每一步發生的變化。

讓我們一起追蹤這個控制機械人繪圖的演算法:

1. 下筆。
2. 向前移動 \(10\) 步。
3. 向右轉 \(90\) 度。
4. 將步驟 2 和 3 總共重複 \(4\) 次。

運用邏輯推理進行預測:
• 第 1 次迴圈:畫出第 1 條線(頂部),轉向 \(90^\circ\)。
• 第 2 次迴圈:畫出第 2 條線(右側),轉向 \(90^\circ\)。
• 第 3 次迴圈:畫出第 3 條線(底部),轉向 \(90^\circ\)。
• 第 4 次迴圈:畫出第 4 條線(左側),轉向 \(90^\circ\)。
邏輯推論:機械人會畫出一個完整的正方形,並且最後會面向它剛開始時的相同方向!

實用小貼士:在預測結果時,必須時刻看清楚指令實際上寫了甚麼,而不是去猜想你希望它做甚麼。

重點提示:在紙上按步驟追蹤,能幫助你在運行演算法之前,準確證實它到底會做出甚麼結果。


5. 偵測與修正錯誤(除錯 / Debugging)

演算法或程式中的錯誤稱為 Bug(程式錯誤)。找出並修復這些錯誤的過程就稱為 Debugging(除錯)

邏輯錯誤 vs. 隨機亂猜

當演算法沒有按照你的預期運作時,千萬不要胡亂點擊積木或隨意亂改數字(亂試)!相反,你應該發揮小偵探的邏輯推理能力:

步驟 1:找出問題所在:原本應該發生甚麼事?實際又發生了甚麼事?
步驟 2:追蹤步驟:逐行閱讀指令,直到找出問題究竟出在哪一步。
步驟 3:修正特定指令:修改錯誤的角度、調整順序次序,或調整迴圈的重複次數。
步驟 4:再次測試:重新運行演算法,確保它現在能夠成功達成目標。

錯誤範例:如果一個畫三角形的演算法寫著重複 3 次:移動 100 步,向右轉 60 度,追蹤後會發現機械人總共只轉了 \(180^\circ\),圖形無法閉合!運用邏輯思考,我們推論出外角轉動必須是 \(120\) 度(\(360^\circ \div 3 = 120^\circ\))。我們把 \(60\) 改為 \(120\),這個 Bug 就成功修復了!

重點提示:除錯是一個充滿邏輯性、按部就班的過程,目的是找出導致出錯的確切指令。


6. 常見陷阱與避免方法

陷阱 1:「電腦會明白我想怎樣做。」
事實:電腦只會按照字面指令執行。請確保你的指令清晰明確,沒有任何歧義。

陷阱 2:「只要包含了所有指令,次序並不重要。」
事實:改變順序就會改變結果。請務必由上而下仔細檢查次序。

陷阱 3:「我只要隨便改改內容,直到成功為止。」
事實:隨機亂試只會花費更多時間,並產生更多 Bug。用紙和筆一步一步追蹤,才能找出真正的錯誤。


快速溫習總結

演算法(Algorithm)是一套按部就班、用來解決問題的精確計劃。
程式(Program)是用電腦程式語言寫成的演算法。
邏輯推理(Logical reasoning)是指運用規則和事實來解釋、預測和修正演算法。
• 核心組成要素包括:順序(Sequence)(次序)、選擇(Selection)(運用 IF/THEN/ELSE 作出抉擇)、重複(Repetition)(迴圈)和變數(Variables)(儲存數值)。
追蹤 / 人工追蹤(Tracing / Dry running)是指逐行執行演算法,從而準確預測輸出結果。
除錯(Debugging)是系統化地偵測和修正錯誤的過程。