跳轉到內容

A-level 計算機科學/CIE/高階理論/資料表示

來自華夏公益教科書,開放書籍,為開放世界
A-level 計算機科學
資料表示 通訊和網際網路技術
規範連結

使用者定義的資料型別

  • 理解為什麼需要使用者定義的型別
  • 定義和使用非複合型別:列舉,指標
  • 定義和使用複合資料型別:集合,記錄和類/物件
  • 為給定問題選擇和設計適當的使用者定義的資料型別

檔案組織和訪問

  • 瞭解檔案組織方法:序列,順序(使用鍵欄位)和隨機(使用記錄鍵)
  • 瞭解檔案訪問方法
    • 序列檔案和順序檔案的順序訪問
    • 順序檔案和隨機檔案的直接訪問。
  • 為給定問題選擇適當的檔案組織和檔案訪問方法

實數和歸一化浮點表示

  • 描述二進位制浮點實數的格式
  • 將二進位制浮點實數轉換為十進位制,反之亦然
  • 歸一化浮點數
  • 瞭解歸一化的原因
  • 瞭解在浮點表示中改變尾數和指數的位分配的影響
  • 瞭解下溢和上溢是如何發生的
  • 瞭解為什麼計算機無法表示數學實數,如√2或π,只能表示近似值
  • 瞭解二進位制表示只是它所表示的實數的近似的後果
  • 瞭解二進位制表示會導致舍入誤差

使用者定義的資料型別

[編輯 | 編輯原始碼]

使用者定義的資料型別是程式設計師為在程式中使用而設計的,與內建資料型別不同。非複合型別是在不引用其他資料型別的情況下定義的,而複合資料型別則是從其他資料型別構建的。

列舉資料型別

[編輯 | 編輯原始碼]

列舉資料型別是一種非複合資料型別,從一個有序的值列表中定義。變數可以透過此資料型別宣告,並分配列表中的一個值

例如,以下虛擬碼聲明瞭一個月份的列舉資料型別,

TYPE TMonth = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) // The TMonth data type is declared

DECLARE ThisMonth : TMonth // A variable is declared with the TMonth enumerated data type.

ThisMonth ← May // The variable ThisMonth

ThisMonth > Feb // This is True, as May is later in the list than Feb

注意:列舉資料型別中的值不是字串值;不要用引號括起來。

指標資料型別

[編輯 | 編輯原始碼]

指標資料型別引用記憶體位置。因此,它必須與它指向的資料型別相關。

例如,此虛擬碼聲明瞭一個指標資料型別,一個指標,並使用該指標。

TYPE TMyPointer = ^Integer // This declares TMyPointer as a pointer data type which points to Integers.

DECLARE IntegerPointer : TMyPointer // This declares a variable with the TMyPointer data.

ValuePointedTo  IntegerPointer^ // This accesses the data stored at the address which IntegerPointer points to. This is known as dereferencing.

指標通常用於構建複雜的資料結構,例如連結串列和二叉樹。這些資料結構將在稍後討論

記錄資料型別

[編輯 | 編輯原始碼]

記錄資料型別儲存關於一個共同主題的資訊集合,類似於資料庫中的記錄。它由多個欄位構成,每個欄位都有自己的資料型別;因此,記錄資料型別是一種複合資料型別。

例如,以下虛擬碼定義了一個學生記錄的記錄型別

TYPE
TStudentRecord                    // The record consists of several fields
  DECLARE FirstName : STRING      // Each field has its own data type
  DECLARE LastName : STRING
  DECLARE Absences : INTEGER
  DECLARE Class : STRING
ENDTYPE

DECLARE Student1 : TStudentRecord // The variable is declared as a record

Student1.FirstName ← "John"       // Fields can be accessed using dot notation
Student1.LastName ← "Doe"
Student1.Absences ← 0
Student1.Class ← "A2 Level"

集合資料型別

[編輯 | 編輯原始碼]

集合資料型別是一種複合資料型別,允許程式設計師將集合論運算應用於程式中的資料。

這些操作通常包括

  • 並集
  • 差集
  • 交集
  • 包含一個元素
  • 排除一個元素
  • 檢查一個元素是否在一個集合中

物件資料型別

[編輯 | 編輯原始碼]

物件資料型別是面向物件程式設計中用來定義類的複合資料型別。

本質上,物件只是包含對它們包含的資料起作用的函式的記錄。

資料物件是一個儲存區域,包含一個值或一組值。每個值都可以透過其識別符號或引用該物件的更復雜的表示式訪問。此外,每個物件都有一個唯一的資料型別。

檔案組織

[編輯 | 編輯原始碼]

檔案是記錄的集合。每個記錄是欄位的集合。每個欄位都包含一個值。

序列檔案

[編輯 | 編輯原始碼]

序列檔案是記錄的集合,沒有定義的順序。記錄按時間順序進入檔案。所有記錄都有一個定義的格式,以便它們可以被正確地輸入和輸出。

文字檔案可以被認為是序列檔案的例子:一系列字元按時間順序輸入,生成一個檔案。

序列檔案的一個常見用途是即時處理。記錄可以即時輸入,儘可能快地輸入,因為它們不需要排序。這使得序列檔案效率很高。

順序檔案

[編輯 | 編輯原始碼]

順序檔案按鍵欄位的順序儲存記錄。為了能夠按鍵欄位排序記錄,該欄位需要是唯一的和順序的,但不需要是連續的。

在順序檔案中,可以透過讀取所有鍵欄位直到找到要查詢的欄位來找到特定記錄。

直接訪問檔案

[編輯 | 編輯原始碼]

直接訪問檔案是記錄的集合,可以直接訪問,而無需檢查每個記錄。這是透過雜湊表實現的。

雜湊表是一個數據表,它不是按鍵欄位排序,而是按鍵欄位的雜湊值排序。因此,可以透過對鍵欄位進行雜湊來直接訪問資料,而不是逐個檢查每個記錄。

訪問檔案

[編輯 | 編輯原始碼]

有兩種方法可以訪問檔案中的特定記錄:順序訪問和直接訪問。序列檔案和順序檔案可以使用順序訪問,而直接訪問檔案可以使用直接訪問。

順序訪問是指逐個讀取檔案中的每個記錄,直到找到所需的記錄。

直接訪問是指使用雜湊演算法跳到檔案中的特定記錄。

刪除和編輯資料

[編輯 | 編輯原始碼]

在順序訪問的檔案中,刪除和編輯資料需要建立一個新檔案。資料從舊檔案移動到新檔案,直到到達需要編輯記錄的部分。

但是,在直接訪問檔案中,資料可以在原地刪除或編輯:不需要新檔案。

浮點數

[編輯 | 編輯原始碼]

浮點表示法是一種用相同數量的位來表示非常小或非常大的數字的方法。它類似於科學計數法

一個浮點數由三個部分組成:符號位、尾數和指數。要找到數字的值,我們使用 ,其中 ± 由符號位決定,M 是尾數,E 是指數。

A representation of the binary value of 0.15625 in a 32-bit system with 8 bits for the exponent and 23 bits for the mantissa
一個在IEEE 754 中的浮點格式示例

尾數-指數權衡

[編輯 | 編輯原始碼]

在建立浮點格式時,設計者必須選擇分配給尾數和指數的位數。如果分配給尾數的位數更多,則浮點值將更加精確;而如果分配給指數的位數更多,則浮點系統可以表示更大的值範圍。

規範化

[編輯 | 編輯原始碼]

規範化是指選擇數字的浮點表示,使得浮點系統中可以表示的每個數字都只有一個有效表示。

如果沒有規範化,同一個數字可能有多個有效的表示。例如,數字 2.0 可以表示為 0 0010000 01000 0100000 00110 1000000 0010。因此,我們需要一種標準方法來引用給定的數字。

這就是規範化的作用:規範化意味著數字的唯一正確形式是符號位和尾數最高有效位不同的形式。因此,對於 2.0,0 1000000 0010 將是有效的表示。

浮點錯誤

[編輯 | 編輯原始碼]

下溢是指數字太小而無法使用浮點系統表示。

例如,在一個尾數為 8 位、指數為 4 位的系統中,可能的最小指數為 1000,即十進位制的 -8。如果系統是規範化的,那麼最小的正尾數值為 0 1000000。因此,該系統中最小的正數為 0 1000000 1000,等於 1/512。如果該系統中的計算結果小於 1/512,則會發生下溢錯誤,因為數字太小而無法儲存。

上溢類似於下溢,但它發生在數字太大而無法儲存在系統中時。

例如,在一個尾數為 8 位、指數為 4 位的系統中,可以表示的最大值為 0 1111111 0111,等於 127。如果計算結果大於 127,則會發生上溢錯誤,數字將無法儲存。

上溢和下溢都可能發生在太大或太小的負值上。

舍入誤差

[編輯 | 編輯原始碼]

舍入誤差是指數字無法精確表示,需要近似表示的情況。

例如,數字 1/3 只能用二進位制表示為迴圈位(0.0101)。浮點格式不允許迴圈位,因為系統中只有有限的記憶體。因此,它需要被舍入,因此它將被表示為 0 1010101 1111

問題

由值列表定義的哪種使用者定義的資料型別?

回答

列舉資料型別

由欄位集定義的哪種使用者定義的資料型別?

回答

記錄資料型別

哪種使用者定義的資料型別用於建立動態資料結構?

回答

指標資料型別

哪種型別的檔案應該用於即時處理?

回答

序列檔案

哪種型別的檔案將資料儲存在雜湊表中?

回答

直接訪問檔案

哪種型別的檔案根據記錄的鍵欄位儲存記錄?

回答

順序檔案

直接訪問和順序訪問有什麼區別?

回答

使用直接訪問,您可以直接跳到所需的記錄,而使用順序訪問,您需要逐個遍歷每個記錄。

在尾數為 8 位、指數為 4 位的系統中,找到 +1.625 的規範化浮點值。

回答

尾數:01101000 指數:0001

尾數為 10011100、指數為 0100 的規範化浮點數表示什麼值?

回答

-12.5

華夏公益教科書