Kiểu dữ liệu và bản ghi
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| data type/ˈdeɪtə taɪp/ | Kiểu dữ liệu |
| field/fiːld/ | trường |
| record/ˈrekɔːd/ | bản ghi |
| record structure/ˈrekɔːd ˈstrʌktʃə/ | cấu trúc bản ghi |
| dot notation/dɒt nəʊˈteɪʃn/ | ký hiệu dấu chấm |
Quyết định về kiểu dữ liệu đắt đỏ nhất trong lịch sử
- Vào thập niên 1960, bộ nhớ đắt hơn cả lập trình viên. Để tiết kiệm hai ký tự cho mỗi ngày tháng, năm được lưu dưới dạng hai chữ số:
99có nghĩa là 1999. - Nobody expected the code to outlive the century. It did, and on 1 January 2000 every one of those fields would read as 1900. Governments and companies spent an estimated $300 billion checking and fixing it.
- Lỗi không phải là sai chính tả. Đó là một kiểu dữ liệu được chọn cho bộ nhớ năm 1965 và được giữ lại cho các ngày tháng năm 2000.
- Bài học này hướng dẫn cách chọn kiểu phù hợp với dữ liệu, và cách đóng gói các giá trị thuộc về nhau vào một bản ghi.
Sáu kiểu cơ bản
| Kiểu | Lưu trữ | Sử dụng cho |
|---|---|---|
INTEGER |
một số nguyên, 42, -7 |
đếm, chỉ mục, ID |
REAL |
một số có phần thập phân, 3.14 |
đo lường, điểm trung bình |
CHAR |
một ký tự đơn lẻ, 'A' |
chữ cái điểm, lựa chọn menu |
STRING |
chuỗi ký tự trong dấu ngoặc kép, "Hello" |
văn bản |
BOOLEAN |
TRUE hoặc FALSE |
cờ |
DATE |
ngày tháng âm lịch | ngày sinh, hạn chót |

Giả mã cũng đặt tên cho hai kiểu có cấu trúc: ARRAY và FILE
Kiểu dữ liệu nào phù hợp nhất để lưu trữ cờ yes/no như "có hàng"?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Cờ có hai trạng thái, nên BOOLEAN (TRUE/FALSE) là lựa chọn chính xác — không phải chuỗi "yes"/"no".
Kiểu thực (floating-point) nên được dùng để lưu trữ một phép đo lường như nhiệt độ.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Các đếm nguyên sử dụng số nguyên; các phép đo lường sử dụng số thực.
Chọn dựa trên cách sử dụng giá trị
- Một kiểu được quyết định bởi những gì chương trình sẽ làm với giá trị, không phải bằng cách nó trông như thế nào.
- Số lượng học sinh là
INTEGER; điểm trung bình của lớp làREAL, vì nó có phần thập phân; liệu một học sinh đã trả tiền hay không làBOOLEAN. - Chỉ mục mảng luôn là
INTEGER. Một chữ cái điểm đơn lẻ làCHAR; địa chỉ email làSTRING. - Số điện thoại là một
STRING: nó bắt đầu bằng0, và không bao giờ cộng hai số điện thoại.
Nối mỗi giá trị với kiểu dữ liệu tốt nhất cho nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Chọn kiểu chính xác: BOOLEAN cho cờ, REAL cho giá trị phần thập phân, INTEGER cho số đếm nguyên, STRING cho văn bản.
Kiểu dữ liệu nào nên lưu trữ số điện thoại như 07700 900123?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một INTEGER sẽ loại bỏ số 0 ở đầu, và không chương trình nào cộng hoặc nhân số điện thoại. Các chữ số là văn bản.
Ví dụ minh họa: cung cấp kiểu dữ liệu thích hợp
| Dữ liệu | Kiểu | Lý do |
|---|---|---|
| số lượng mặt hàng trong kho | INTEGER |
đếm nguyên |
| giá của một mặt hàng | REAL |
có xu, phần thập phân |
| liệu mặt hàng đang có giảm giá hay không | BOOLEAN |
chỉ có hai trạng thái |
mã loại của mục, 'F' |
CHAR |
đúng một ký tự |
| tên nhà cung cấp | STRING |
văn bản |
| ngày nhận hàng | DATE |
một ngày trong lịch |
- Đưa ra tên giả thuật, không phải ngôn ngữ bạn đang biết:
BOOLEAN, không phảibool;REAL, không phảifloat.
Kiểu dữ liệu của chỉ số mảng luôn là ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một chỉ số đếm vị trí, nên nó là một số nguyên. Names[2.5] không có ý nghĩa.
Record
- Một record (cấu trúc record) chứa một tập các mục dữ liệu có kiểu khác nhau dưới cùng một định danh. Mỗi mục là một trường.
- Sử dụng khi nhiều giá trị luôn mô tả một đối tượng: một mặt hàng tồn kho, một khách hàng, một học sinh.
TYPE TStockItem
DECLARE ItemID : INTEGER
DECLARE Category : STRING
DECLARE ItemCost : REAL
DECLARE InStock : BOOLEAN
ENDTYPE

Một định danh, bốn trường, bốn kiểu
Một bản ghi được dùng để:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Một bản ghi gom các trường (có thể) khác kiểu mô tả một thứ gì đó. Một mảng chứa nhiều giá trị cùng kiểu.
Khai báo và sử dụng record
TYPE … ENDTYPExác định kiểu. Sau đó khai báo biến của nó, từng cái hoặc như một mảng:
DECLARE Item1 : TStockItem
DECLARE Items : ARRAY[1:100] OF TStockItem
- Truy cập một trường bằng kí hiệu chấm, để ghi và đọc:
Item1.Category ← "Fruit"
OUTPUT Item1.Category, " costs ", Item1.ItemCost
Items[7].InStock ← FALSE
Một bản ghi nhóm các trường dưới một tên duy nhất
Một bản ghi gom các trường liên quan lại với nhau. Mỗi trường là một nhãn có tên mà bạn truy cập bằng ký hiệu chấm — Item1.Category — chứ không phải bằng chỉ số số.
Để gán trường Category của biến bản ghi Item1, bạn viết:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Ký hiệu chấm record.field truy cập một trường của bản ghi.
Ví dụ đã giải quyết: tệp thành viên câu乐部
- Một câu乐部 lưu, cho mỗi học sinh, một ID học sinh (chuỗi), tên, ngày sinh và tối đa ba số câu乐部. Khai báo kiểu record, một mảng cho 3000 học sinh, và lưu tên vào phần tử đầu tiên.
TYPE Student
DECLARE StudentID : STRING
DECLARE Name : STRING
DECLARE DateOfBirth : DATE
DECLARE Club : ARRAY[1:3] OF INTEGER
ENDTYPE
DECLARE Membership : ARRAY[1:3000] OF Student
Membership[1].Name ← "Li Wei"
- Các điểm:
TYPEvới định danh vàENDTYPE; mỗi trường được khai báo với kiểu thích hợp; mảng với cận vàOF Student; truy cập trường bằng chỉ số và kí hiệu chấm.
Sắp xếp các dòng của khai báo hội viên câu lạc bộ theo thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Xác định kiểu, đóng nó, khai báo một biến hoặc mảng của nó, sau đó dùng chỉ số và dấu chấm để truy cập một trường.
Ví dụ đã giải quyết: nêu lỗi trong khai báo
TYPE TBooking
DECLARE Seats : INTEGER
DECLARE Price
DECLARE Total : STRING
- Ba lỗi, mỗi lỗi một điểm: kiểu thiếu
ENDTYPE; trườngPricekhông có kiểu dữ liệu; vàTotalsẽ chứaSeats * Price, một kết quả toán học, nên không thể làSTRING. - Ba lỗi mà giám khảo thường đặt: thiếu
ENDTYPE, trường không có kiểu, trường có kiểu sai so với việc sử dụng.
Trong những câu sau, cái nào là lỗi trong khai báo bản ghi? Chọn tất cả các đáp án áp dụng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Các kiểu khác nhau trong một bản ghi chính là mục đích của bản ghi. Ba cái còn lại là các lỗi mà giám khảo đặt vào.
Record, mảng hay biến thường
- Các giá trị luôn đi kèm nhau và có kiểu khác nhau: một record.
- Nhiều giá trị của cùng một kiểu dưới cùng một tên: một mảng (bài tiếp theo).
- Một bảng dòng mà mỗi dòng có các trường hỗn hợp: một mảng record,
Members[i].Name. - Các giá trị không liên quan: các biến riêng biệt. Việc nhóm chúng lại không mang lại lợi ích gì.
Một mảng bản ghi cho phép một định danh duy nhất chứa một bảng mà mỗi hàng đều có các trường khác kiểu.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Members[i] là một hàng (một bản ghi); Members[i].Name là một ô. Mảng cung cấp các hàng, bản ghi cung cấp các cột hỗn hợp.
Điểm số dễ mất
- Giá trị có/không là một
BOOLEAN, không phải chuỗi"yes"và"no". - Số điện thoại hoặc ID bắt đầu bằng
0là mộtSTRING, chưa bao giờ là mộtINTEGER. - Tiền tệ trong một
REALgây ra lỗi làm tròn; nhiều hệ thống lưu đồng xu nguyên vẹn như mộtINTEGER. - Mọi trường là một dòng
DECLAREvới một kiểu, và kiểu kết thúc bằngENDTYPE. Chỉ số nằm trên mảng, kí hiệu chấm nằm trên trường:Members[3].Name.
Bạn đã nắm vững
- sáu loại cơ bản,
INTEGER,REAL,CHAR,STRING,BOOLEAN,DATE, được chọn dựa trên việc chương trình làm gì với giá trị đó - Một record chứa các trường có kiểu khác nhau dưới cùng một định danh:
TYPE … DECLARE field : type … ENDTYPE - Khai báo biến hoặc mảng của kiểu đó, và truy cập trường bằng kí hiệu chấm:
Membership[1].Name ← "Li Wei" - Các lỗi mà giám khảo đặt: không có
ENDTYPE, một trường không có kiểu, một trường có kiểu sai so với việc sử dụng