運算思維 - 第一章:問題擬定與分析

各位同學大家好!歡迎來到「問題擬定與分析」的學習筆記。這是編程與解難世界中最首要也最重要的一步。想像一下你是一位偵探:在破案之前,你首先要清楚了解案件的來龍去脈!

在本章中,我們會學習如何審視問題、將其拆解,並在編寫任何一行代碼之前規劃好我們的策略。只要把這一步做好,之後的一切都會變得輕鬆得多。我們開始吧!


1. 界定問題及其範疇

在解決問題之前,你必須清楚知道自己要達成什麼目標。這聽起來很顯然,但卻是很多人會匆匆略過的一步!

問題界定是指清晰、精準地闡述你希望解決的問題。主要目標是什麼?

範疇則是指界定問題的邊界。什麼應包含在內,而同樣重要的是,什麼應包含在內?這有助於避免項目變得過於龐大和複雜。

類比:策劃生日派對

想像一下你被要求「策劃一個生日派對」。這聽起來有點模糊!一個好的問題界定應該是:

問題:「為我的朋友陳大文籌辦一個驚喜生日派對。」
範疇:「派對將有15位賓客,於週六晚上舉行,預算為$2000。我們需要處理邀請函、食物和一個生日蛋糕。我們將不負責安排賓客的交通。」

看吧?現在任務就變得清晰明確了。在資訊及通訊科技(ICT)中,界定問題和範疇意味著你清楚知道你的程式應該做什麼,以及不應該做什麼。

**************************************************
快速回顧
**************************************************
- 界定問題:主要目標是什麼?要具體!
- 界定範疇:有哪些限制和邊界?我們不打算做什麼?
**************************************************


2. IPO模型:你的解難藍圖

一旦我們清楚問題所在,就需要找出解決方案的主要部分。我們會使用一個簡單而強大的模型,稱為IPO,它代表輸入(Input)處理(Process)輸出(Output)

類比:烘焙蛋糕

想想烘焙一個蛋糕。你不可能憑空變出一個蛋糕!你需要食材,你需要跟隨食譜,然後才能得到你的最終產品。

- 輸入:你需要的食材。(例如:麵粉、糖、雞蛋、牛奶)
- 處理:你所採取的步驟。(例如:混合食材、放入焗爐、烘烤30分鐘)
- 輸出:最終結果。(例如:一個美味的蛋糕!)

電腦程式的運作方式也完全一樣!

資訊及通訊科技(ICT)問題的IPO拆解

輸入:程式需要從用戶或感應器獲取什麼資訊或數據才能開始運作?

處理:程式需要對輸入數據執行什麼計算、步驟或操作?

輸出:程式向用戶顯示的最終結果是什麼?

課程大綱示例:BMI計算器

讓我們用IPO模型來分析「計算身體質量指數(BMI)以監測健康體重」這個問題。

- 輸入:要計算BMI,程式需要從用戶那裡獲取兩項資訊:
- 用戶的體重(例如:公斤)
- 用戶的身高(例如:米)

- 處理:程式獲取輸入數據並執行計算。BMI的公式是 體重 ÷ (身高 x 身高)。
- 計算:$BMI = weight / (height * height)$

- 輸出:程式顯示計算結果。
- 計算出的BMI值(例如:22.5)
- 給用戶的訊息(例如:「你的體重處於健康範圍。」)

重點歸納

永遠思考IPO!對於任何問題,問自己:我需要從什麼開始(輸入)?我需要做什麼(處理)?最終結果應該是什麼(輸出)?這個簡單的結構將幫助你整理思緒,應對任何編程任務。


3. 拆解:化大為小

如果一個問題一開始看起來很龐大、不可能解決,別擔心!我們會使用一種稱為拆解(decomposition)的技巧,這只是一個比較專業的說法,意思是將一個大問題分解成更小、更易於管理的子問題

類比:砌LEGO

當你砌一個大型LEGO汽車模型時,你不會嘗試一次過將所有500塊積木拼湊在一起。說明書會教你如何先砌小部分:

- 子問題1:砌底盤(車身底部)。
- 子問題2:砌車輪並安裝。
- 子問題3:砌車身。
- 子問題4:砌內部和車頂。

通過一個接一個地解決每個子問題,你最終就能解決砌整輛車這個大問題。

資訊及通訊科技(ICT)中的拆解

我們可以通過將問題分解成其IPO步驟,甚至進一步將這些步驟拆解,來進行問題拆解。

示例:一個簡單的自動售賣機程式

大問題:創建一個程式來模擬一個簡單的自動售賣機。

讓我們來拆解這個問題:

- 子問題1(輸入):顯示可選飲品並要求用戶做出選擇。 - 子問題2(輸入):要求用戶投入金錢。 - 子問題3(處理):檢查用戶是否投入足夠的金錢。 - 子問題4(處理):如果足夠,計算找贖。 - 子問題5(輸出):取出飲品(顯示訊息)。 - 子問題6(輸出):找回正確的零錢。

通過解決這六個小問題,整個任務就變得不那麼可怕了!

重點歸納

拆解是應對複雜任務的最佳利器。如果一個問題讓你感到不知所措,就把它拆解開來!先解決小部分,然後再把它們組合起來。


4. 模式識別:尋找相似之處

分析問題的最後一步是尋找模式。模式識別是指識別不同問題(甚至同一問題內部)中的共同元素或相似之處。

為什麼要這樣做?因為如果你以前解決過類似的問題,你就可以重用該解決方案的部分!這就是關於更聰明地工作,而不是更努力。

類比:學習食譜

一旦你掌握了炒菜的基本模式(熱油、加蒜、加蔬菜、加蛋白質、加醬汁),你就可以做出數百種不同的菜餚。模式是相同的;你只是更改具體的食材。你不需要為炒雞肉和炒牛肉學習一套完全不同的方法。

課程大綱示例:學生排序

- 問題A:身高將一群學生按升序(由矮至高)排序。 - 問題B:按考試分數將同一群學生按降序(由高至低)排序。

模式是什麼?
這兩個問題的核心處理過程是相同的:你一次比較兩名學生,如果他們的順序不正確就交換位置。

我們如何重用解決方案?
基本的排序演算法是相同的。唯一改變的是:
1. 你正在比較的數據(身高 vs. 分數)。
2. 比較邏輯(升序的「小於」 vs. 降序的「大於」)。

課程大綱示例:編程機械人

- 問題A:編程機械人以正方形路徑移動。 - 問題B:編程機械人以三角形路徑移動。

模式是什麼?
繪畫規則圖形的一般模式是:「重複N次:向前移動一定距離,然後轉動一個角度。」

我們如何重用解決方案?
- 對於正方形:重複4次(向前移動,轉90度)。 - 對於三角形:重複3次(向前移動,轉120度)。
通過識別這種模式,你只需改變重複次數和轉動角度,就能輕鬆修改你的正方形程式,讓機械人繪畫三角形、五邊形或任何其他多邊形。

你知道嗎?

模式識別是Netflix和Spotify等服務如何向你推薦電影和音樂的關鍵部分。他們會尋找你喜好的模式,並找出其他品味相似的用戶,從而推薦你可能喜歡的內容!

重點歸納

永遠尋找模式和相似之處。這能讓你重用現有的解決方案,節省時間和精力,並幫助你更有效地解決新問題。