A-level 計算機科學/OCR/單元 2.2 問題解決與程式設計
計算機專業人士已經開發出各種技術來解決現實世界中的問題,並建立基於計算機的解決方案。計算思維是指利用這些技術來解決問題,無論是否使用計算機。其原理是將一個複雜的問題轉化為可以理解、正式表示和解決的問題。這種思維過程很重要,因為世界上一些最大的問題非常複雜,難以理解。軟體編寫也具有挑戰性,希望從軟體開發中吸取的教訓可以更廣泛地應用於提供解決方案。
順序
按順序執行一條語句。
迭代
多次執行一組語句。
迭代可以是“計數控制”或“條件控制”。計數將重複該部分 n 次,條件將在滿足條件之前停止迭代。
分支/選擇
根據條件執行一組指令,例如 If ... Else。
區域性
在模組/函式/子例程中宣告,僅在其中可用。子例程結束時被銷燬。
全域性
在程式頂部,子例程之外宣告。可以在程式中的任何位置使用。程式結束時被銷燬。
在宣告它的子例程中使用時,與全域性變數同名的區域性變數優先使用。
因此,應儘可能使用區域性變數,因為它們使用更少的記憶體,因為它們是在其子例程中建立和銷燬的。
函式和過程接受零個、一個或多個引數,並執行一項特定任務。然後函式返回一個值,而過程不返回任何值。
傳遞引數
按值:傳遞將用於函式的值。
按引用:傳遞將用於函式的值的位置。
按引用傳遞的變數可能會在處理過程中被程式的另一部分更改。
在考試中,除非另有說明,否則虛擬碼中的值按值傳遞。
幫助程式設計師進行程式設計的程式。
IDE 可以提供許多功能,例如
- 偵錯程式
- 程式碼編輯器
- 翻譯器
- 整合執行時環境
- 自動文件
- 語法高亮
- 語法檢查
- 自動程式碼補全
- 自動縮排
- 專案導航面板
- 錯誤診斷
遞迴是指子例程(例如函式)呼叫自身。
它必須包含一個停止條件,如果沒有停止,它必須呼叫自身,停止條件必須在有限數量的迴圈中可達。
遞迴與迭代
- 遞迴的記憶體效率不高
- 遞迴發生的地方必須儲存在一個堆疊中,以便在滿足停止條件後可以“展開”。這可能會佔用大量記憶體,甚至會導致計算機記憶體不足,並導致程式崩潰。
從歷史上看,許多問題都是透過應用數學解決的,無論是否已知物理規律。例如,繪製飛往月球的路線,或估計建造一艘船所需的金屬。在這些情況下,可以使用計算和收集的資料獲得相當準確的解決方案。如果資料的質量很差或應用的數學無法反映現實世界,就會出現問題。
許多必須解決的問題不太可能接受可靠的解決方案。由於對潛在問題理解不正確,資料不足或不正確,或潛在問題過於複雜,並非所有問題都易於描述。當人們認為自己理解了這些問題時,它們就會造成麻煩。這會導致糟糕的解決方案,這些解決方案無法解決問題,甚至可能使情況變得更糟。複雜問題包括生物和生態系統、氣候和社會模型。
在所有這些情況下,純粹的複雜性都克服了正常的科學和數學方法。解決複雜問題的幫助將來自計算思維,並且它已經做到了——使用鳥槍法測序演算法拼湊人類基因組的結構就是一個例子。
更常見的是,可以透過應用演算法來解決難題。這些演算法很有幫助,因為教計算機解決問題的方法有助於理解問題。現代計算機系統可以快速執行演算法解決方案,並且可以採用試錯法。演算法思維遵循四個階段
- 理解問題——這可能是一個嚴重的問題——我們如何判斷一個問題是否已被充分理解?
- 擬定問題——生成問題的簡潔表示。通常涉及抽象和數學解決方案。
- 設計算法——一旦獲得明確的表示,就可以設計一個演算法來應用這種表示。
- 實現演算法——編寫一個可以實現該演算法的程式。
- 執行並解決問題——執行程式碼並檢視它是否有效。根據要求評估輸出。

這是一種問題解決方法,它從更大的圖景開始。然後將其分解為子問題,這些子問題可以表示為黑盒子——細節留到以後處理。
這是一種將大型程式劃分為模組的方法。每個模組解決一個問題,然後將所有模組組合在一起。這種方法得到了以下認識的支援:所有程式都傾向於由序列、迭代和選擇組成。
OOP 是另一種經常使用分解來解決程式設計問題的途徑。物件由包含程式碼和資料的獨立程式單元組成。然後可以將這些單元組合在一起形成完整的解決方案。這些物件是抽象的示例,可以在修改或不修改的情況下使用。
編寫演算法的目的是產生一個能夠解決問題泛化表示的過程,使其能夠解決類似的問題。為了生成一個好的演算法,必須確定它是正確且有效的。證明演算法不正確可能很簡單——只需要在一個案例中證明它失敗即可。證明它是正確的則要困難得多。有時問題過於複雜,必須接受一個足夠好的解決方案。