跳轉至內容

A-level 計算機科學/OCR/單元 2.2 問題解決與程式設計

來自華夏公益教科書,開放的書籍,開放的世界

計算機專業人士已經開發出各種技術來解決現實世界中的問題,並建立基於計算機的解決方案。計算思維是指利用這些技術來解決問題,無論是否使用計算機。其原理是將一個複雜的問題轉化為可以理解、正式表示和解決的問題。這種思維過程很重要,因為世界上一些最大的問題非常複雜,難以理解。軟體編寫也具有挑戰性,希望從軟體開發中吸取的教訓可以更廣泛地應用於提供解決方案。

程式設計結構

[編輯 | 編輯原始碼]

順序

按順序執行一條語句。

迭代

多次執行一組語句。

迭代可以是“計數控制”或“條件控制”。計數將重複該部分 n 次,條件將在滿足條件之前停止迭代。

分支/選擇

根據條件執行一組指令,例如 If ... Else。

全域性變數和區域性變數

[編輯 | 編輯原始碼]

區域性

在模組/函式/子例程中宣告,僅在其中可用。子例程結束時被銷燬。

全域性

在程式頂部,子例程之外宣告。可以在程式中的任何位置使用。程式結束時被銷燬。

在宣告它的子例程中使用時,與全域性變數同名的區域性變數優先使用。

因此,應儘可能使用區域性變數,因為它們使用更少的記憶體,因為它們是在其子例程中建立和銷燬的。

函式和過程

[編輯 | 編輯原始碼]

函式和過程接受零個、一個或多個引數,並執行一項特定任務。然後函式返回一個值,而過程不返回任何值。

傳遞引數

按值:傳遞將用於函式的值。

按引用:傳遞將用於函式的值的位置。

按引用傳遞的變數可能會在處理過程中被程式的另一部分更改。

在考試中,除非另有說明,否則虛擬碼中的值按值傳遞。

IDE(整合開發環境)

[編輯 | 編輯原始碼]

幫助程式設計師進行程式設計的程式。

IDE 可以提供許多功能,例如

  • 偵錯程式
  • 程式碼編輯器
  • 翻譯器
  • 整合執行時環境
  • 自動文件
  • 語法高亮
  • 語法檢查
  • 自動程式碼補全
  • 自動縮排
  • 專案導航面板
  • 錯誤診斷

遞迴是指子例程(例如函式)呼叫自身。

它必須包含一個停止條件,如果沒有停止,它必須呼叫自身,停止條件必須在有限數量的迴圈中可達。

遞迴與迭代

  • 遞迴的記憶體效率不高
  • 遞迴發生的地方必須儲存在一個堆疊中,以便在滿足停止條件後可以“展開”。這可能會佔用大量記憶體,甚至會導致計算機記憶體不足,並導致程式崩潰。

數學方法

[編輯 | 編輯原始碼]

從歷史上看,許多問題都是透過應用數學解決的,無論是否已知物理規律。例如,繪製飛往月球的路線,或估計建造一艘船所需的金屬。在這些情況下,可以使用計算和收集的資料獲得相當準確的解決方案。如果資料的質量很差或應用的數學無法反映現實世界,就會出現問題。

複雜問題

[編輯 | 編輯原始碼]

許多必須解決的問題不太可能接受可靠的解決方案。由於對潛在問題理解不正確,資料不足或不正確,或潛在問題過於複雜,並非所有問題都易於描述。當人們認為自己理解了這些問題時,它們就會造成麻煩。這會導致糟糕的解決方案,這些解決方案無法解決問題,甚至可能使情況變得更糟。複雜問題包括生物和生態系統、氣候和社會模型。

在所有這些情況下,純粹的複雜性都克服了正常的科學和數學方法。解決複雜問題的幫助將來自計算思維,並且它已經做到了——使用鳥槍法測序演算法拼湊人類基因組的結構就是一個例子。

分解問題

[編輯 | 編輯原始碼]

更常見的是,可以透過應用演算法來解決難題。這些演算法很有幫助,因為教計算機解決問題的方法有助於理解問題。現代計算機系統可以快速執行演算法解決方案,並且可以採用試錯法。演算法思維遵循四個階段

  1. 理解問題——這可能是一個嚴重的問題——我們如何判斷一個問題是否已被充分理解?
  2. 擬定問題——生成問題的簡潔表示。通常涉及抽象和數學解決方案。
  3. 設計算法——一旦獲得明確的表示,就可以設計一個演算法來應用這種表示。
  4. 實現演算法——編寫一個可以實現該演算法的程式。
  5. 執行並解決問題——執行程式碼並檢視它是否有效。根據要求評估輸出。
自頂向下問題解決

自頂向下問題解決

[編輯 | 編輯原始碼]

這是一種問題解決方法,它從更大的圖景開始。然後將其分解為子問題,這些子問題可以表示為黑盒子——細節留到以後處理。

這是一種將大型程式劃分為模組的方法。每個模組解決一個問題,然後將所有模組組合在一起。這種方法得到了以下認識的支援:所有程式都傾向於由序列、迭代和選擇組成。

面向物件程式設計

[編輯 | 編輯原始碼]

OOP 是另一種經常使用分解來解決程式設計問題的途徑。物件由包含程式碼和資料的獨立程式單元組成。然後可以將這些單元組合在一起形成完整的解決方案。這些物件是抽象的示例,可以在修改或不修改的情況下使用。

演算法

[編輯 | 編輯原始碼]

編寫演算法的目的是產生一個能夠解決問題泛化表示的過程,使其能夠解決類似的問題。為了生成一個好的演算法,必須確定它是正確且有效的。證明演算法不正確可能很簡單——只需要在一個案例中證明它失敗即可。證明它是正確的則要困難得多。有時問題過於複雜,必須接受一個足夠好的解決方案。

華夏公益教科書