歡迎來到計算思維與問題解決指南!
你好!歡迎來到計算機科學中最精彩的領域之一。如果這些術語起初聽起來有點「硬核」,別擔心——計算思維不僅僅是編寫代碼;它是關於訓練你的大腦,以計算機可以理解的方式來解決問題。無論你是要籌備派對還是開發應用程式,這些技能都能幫助你將大型挑戰拆解成簡單、易於管理的步驟。讓我們開始吧!
1. 計算思維技能
在我們編寫任何一行代碼之前,我們需要先思考。你需要掌握兩項「超能力」:抽象 (Abstraction) 和 分解 (Decomposition)。
抽象 (Abstraction)
抽象是指過濾掉不需要的資訊,以便專注於重要部分的過程。
例子: 想像一張地鐵路線圖。它不會顯示軌道的每一個彎曲或地面的樹木,它只顯示車站和路線。這就是抽象——只保留核心細節。
分解 (Decomposition)
分解意味著將複雜的問題拆解成更小、更容易解決的子問題。
類比: 如果你想「打掃房子」(這是一個艱鉅的任務),你可以將其分解為:1. 洗碗,2. 吸塵,3. 倒垃圾。將任務變小後,完成起來就輕鬆多了!
快速回顧:
- 抽象:隱藏不必要的細節。
- 分解:將大問題拆分成小部分。
2. 演算法與流程圖
演算法 (Algorithm) 就是解決問題的一系列定義明確的步驟。可以把它想像成製作蛋糕的食譜。
演算法的表示方式
你可以使用結構化英語 (Structured English)(簡明的句子)、流程圖 (Flowcharts)(視覺化圖形)或虛擬碼 (Pseudocode)(看起來像代碼但更容易閱讀的文字)來展示你的演算法。
識別符表 (Identifier Tables)
在開始之前,你應該列出你將使用的「容器」(變數)名稱。這稱為識別符表。它能幫助你追蹤正在儲存的數據(例如:PlayerScore, ItemPrice)。
逐步細化 (Stepwise Refinement)
這是將高層次的步驟不斷拆解成更多細節,直到可以進行編程為止的過程。
如果起初覺得有點棘手,別擔心! 只要記住:從「大局」出發,不斷增加細節,直到無法再拆解為止。
關鍵要點: 演算法必須合乎邏輯並遵循特定的順序。使用流程圖作為視覺化地圖,或使用虛擬碼作為文字規劃。
3. 數據類型與結構
計算機需要知道它正在處理什麼類型的數據,以便正確儲存。
常見數據類型
- 整數 (INTEGER): 整數(例如:\(5\), \(-10\), \(0\))。
- 實數 (REAL): 帶有小數的數字(例如:\(3.14\), \(19.99\))。
- 字元 (CHAR): 單個字元(例如:'A', '$')。
- 字串 (STRING): 字元的集合(例如:"Hello World")。
- 布林值 (BOOLEAN): True 或 False。
- 日期 (DATE): 日曆日期。
陣列 (Arrays)
陣列就像一排儲物櫃。每個櫃子都有一個索引 (index)(數字)並儲存一項數據。
- 一維陣列: 單行資料。
- 二維陣列: 像網格或試算表(有行和列)。
抽象數據類型 (ADTs)
這些是組織數據的特殊方式:
- 堆疊 (Stack): 想像一疊盤子。你從頂部加入,也從頂部取出。這是 LIFO(後進先出)。
- 佇列 (Queue): 想像商店排隊。排在最前面的人會最先獲得服務。這是 FIFO(先進先出)。
- 鏈結串列 (Linked List): 數據項的集合,其中每一項都「指向」下一項,就像尋寶遊戲一樣。
你知道嗎? 記錄 (Record) 是一種特殊的數據類型,允許你在一個名稱下儲存不同類型的數據(例如:「學生」記錄可以包含 姓名 (字串) 和 ID編號 (整數))。
4. 編程基礎與結構
在編寫虛擬碼或代碼時,你會用到三種基本結構:
1. 順序結構 (Sequence)
計算機按照指令順序,從上到下依次執行。
2. 選擇結構 (Selection)
- IF 陳述式: 用於有條件的情況(例如:IF Score > 50 THEN "Pass")。
- CASE 陳述式: 非常適合處理多個具體選項(例如:從選單中選擇一項)。
3. 重複結構 (Iteration)
- 計數控制 (FOR): 你確切知道需要重複多少次(例如:重複 10 次)。
- 前測條件 (WHILE): 在執行迴圈之前檢查條件。如果條件一開始就不成立,程式可能完全不會執行。
- 後測條件 (REPEAT...UNTIL): 程式碼會至少執行一次,然後在結束時檢查條件。
常見錯誤: 在應該使用 FOR 迴圈時使用了 WHILE 迴圈。如果你知道確切的重複次數,FOR 通常是你的最佳選擇!
5. 結構化編程
為了保持程式碼整潔,我們使用程序 (Procedures) 和 函數 (Functions)。它們是主程式內的迷你程式。
程序與函數的差異
- 程序: 執行某項任務(如「列印報告」),但不一定會回傳值。
- 函數: 執行計算並回傳單一數值(如「計算稅款」)。
記憶技巧: Function (函數) 總會帶回一個 Final (最終) 結果。
參數 (Parameters)
這是我們「傳遞」給程序或函數的數值。
- 傳值 (By Value): 計算機製作數據的副本。原始數據保持不變。
- 傳址 (By Reference): 計算機使用實際的數據。如果程序修改了它,原始數據也會隨之改變!
6. 軟體開發與測試
構建軟體是一個被稱為程式開發生命週期 (Program Development Life Cycle) 的旅程。
開發模型
- 瀑布模型 (Waterfall): 一步一步來。完成一個階段後才移動到下一個。
- 迭代模型 (Iterative): 構建一個版本,測試它,然後返回進行改進。
- 快速應用開發 (RAD): 專注於快速建立原型並儘快獲得反饋。
錯誤類型
- 語法錯誤 (Syntax Error): 程式碼中的「文法」錯誤(例如:忘記括號)。程式將無法運行。
- 邏輯錯誤 (Logic Error): 程式運行正常,但結果錯誤(例如:本該減法卻用了加法)。
- 執行階段錯誤 (Run-time Error): 程式運行時發生的錯誤(例如:試圖除以零)。
測試數據
測試程式時,應該使用:
1. 正常數據 (Normal data): 程式預期的典型數據。
2. 異常數據 (Abnormal data): 錯誤類型的數據(例如:要求輸入數字時輸入了 "Hello")。
3. 邊界/極端數據 (Boundary/Extreme data): 處於允許範圍邊緣的數據(例如:分數為 0-100,則 0 和 100 就是邊界數據)。
總結技巧:
- 白箱測試 (White-box testing): 測試程式碼內部的邏輯。
- 黑箱測試 (Black-box testing): 不看程式碼內部,只測試輸入和輸出。
恭喜!你已經掌握了計算思維和問題解決的核心概念。休息一下,嘗試寫一個製作三明治的簡單演算法,你很快就能成為專家!