Chương 3
DỮ LIỆU
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
11
Nội dung
Các khái niệm cơ bản
Các kiểu dữ liệu cơ bản
Các kiểu dữ liệu có cấu trúc
Chương trình con
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
2
3.1. Các khái niệm cơ bản
Đối tượng dữ liệu (Data objects)
Kiểu dữ liệu (Data types)
Khai báo (Declaration)
Kiểm tra kiểu (type checking)
Sự tương hợp về kiểu (type compatibility)
Chuyển kiểu (conversion)
Phép gán và khởi tạo (assignment and initilisation)
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
3
Đối tượng dữ liệu
Đối tương dữ liệu đại diện cho nơi chứa giá trị dữ liệu.
Đối tượng dữ liệu đươc biểu diễn bởi khối lưu trữ trong
bộ nhớ máy tính (block of storage). Giá trị dữ liệu được
biểu diễn bởi một mẫu biểu thị (pattern of bits)
Đối tượng dữ liệu A:
Mẫu bít giá trị dữ liệu 17:
0 0 0 1 0 0 0 1
Đối tượng dữ liệu A chứa
0 0 0 1 0 0 0 1
giá trị dữ liệu 17
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
4
Đối tượng dữ liệu (tiếp)
Đối tượng dữ liệu có thể được định nghĩa bởi người lập
trình (Programmer - defined) hoặc định nghĩa bởi hệ
thống (System - defined)
Thời gian sống (lifetime) của đối tượng dữ liệu kéo dài từ
lúc khối lưu trữ đươc cấp phát để tạo ra đối tượng dữ liệu
(“sinh ra”) cho đến khi khối lưu trữ được giải phóng
(“chết đi”)
Đối tượng dữ liệu cơ bản (elementary data object) chỉ
chứa giá trị dữ liệu đơn, không thể phân chia được nữa
Đối tượng dữ liệu cấu trúc (structured data object) được
tạo thành từ sự kết hợp của nhiều đối tượng dữ liệu
khác.
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
5
Đối tượng dữ liệu (tiếp)
Biến (variable) và hằng (constant): là các đối tượng dữ
liệu đặc biệt
– Biến là các đối tượng dữ liệu được đặt tên và giá trị của
nó có thể thay đổi trong thời gian sống
– Hằng là các đối tượng dữ liệu được đăt tên và giá trị
của nó không thay đổi trong thời gian sống
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
6
Kiểu dữ liệu (Data type)
Kiểu dữ liệu là một lớp các đối tượng dữ liệu có cùng
các tính chất nào đó.
Kiểu dữ liệu cơ bản: đối tượng dữ liệu cơ bản
Kiểu dữ liệu có cấu trúc: đối tượng dữ liệu có cấu trúc
Mối ngôn ngữ đều trang bị sẵn các kiểu dữ liệu nguyên
thủy (primitive data types) và cơ chế để định nghĩa
các kiểu dữ liệu mới
Nghiên cứu kiểu dữ liệu ở 2 cấp độ
– Cấp độ đặc tả (specification)
– Cấp độ hiện thực (implementation)
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
7
Đặc tả dữ liệu
Đặc tả dữ liệu bao gồm các yếu tố cơ bản sau
– Các thuộc tính
– Các giá trị
– Các tác vụ: tác vụ nguyên thuỷ, tác vụ định nghĩa bởi
người lập trình
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
8
Ví dụ: Arrays
Thuộc tính:
– Số chiều
– Kích thước mỗi chiều
– Kiểu thành phần của dãy
Giá trị: các giá trị hợp lệ của các thành phần
Tác vụ:
– Đánh địa chỉ để lựa chọn từng thành phần
– Khởi tạo
– Các phép toán số học trên dãy
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
9
Hiện thực kiểu dữ liệu
Các yếu tố cơ bản trong việc hiện thực một kiểu dữ liệu là:
– Dạng lưu trữ (storage representation) trong bộ nhớ của các
đối tượng dữ liệu thuộc kiểu dữ liệu đó
– Cách hiện thực các tác vụ của kiểu dữ liệu, thông qua các
giải thuật xử lý dạng lưu trữ đã chọn cho các đối tượng dữ
liệu thuộc kiểu dữ liệu đó.
Các cách hiện thực tác vụ kiểu dữ liệu
– Tác vụ phần cứng
– Tác vụ phần mềm như chương trình con
– Đoạn mã trực tiếp (in-line code) hiện thực tác vụ bằng một
chuỗi ngắn các tác vụ phần cứng
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
10
Khai báo(declaration)
Cung cấp các thông tin về các đối tượng dữ liệu cho
chương trình dịch
– Số lượng và kiểu
– Tên và vị trí
– Thời gian sống
– Giá trị của hằng hoặc giá trị khởi động cho biến
Mục đích
– Chọn dạng lưu trữ
– Quản lý bộ nhớ
– Giúp chương trình dịch xác định cách thực thi các tác
vụ chung
– Cho phép kiểm tra kiểu tĩnh thay cho kiểm tra kiểu động.
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
11
Khai báo
Khai báo kiểu dữ liệu
– Bằng tên kiểu
var A: integer;
– Bằng đặc tả kiểu
var A: array [1..20] of integer;
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
12
Khai báo
Khai báo tác vụ
– Số lượng, thứ tự và kiểu của các đối số
– Số lượng, thứ tự và kiểu của kết quả trả về
function SUB(X: integer; Y: real) : real;
SUB: integer x real → real
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
13
Khai báo
Khi khai báo biến một vùng nhớ được chỉ ra để lưu trữ
biến
Vùng nhớ này được tham chiếu thông qua tên biến
Dung lượng bộ nhớ cấp phát tùy vào kiểu dữ liệu của
biến
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
14
Kiểm tra kiểu
Kiểm tra kiểu là kiểm tra xem mỗi tác vụ được thực
hiện trong chương trình có nhận được các đối số thích
hợp thuôc các kiểu dữ liệu thích hợp hay không.
Ví dụ:
X=A+B*C
Kiểm tra kiểu:
– Kiểm tra kiểu tĩnh (static type checking): ở thời gian dịch
chương trình
– Kiểm tra kiểu động (dynamic type checking): ở thời gian
thực thi chương trình
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
15
Kiểm tra kiểu động
Để kiểm tra kiểu động cần phải lưu trữ thông tin về kiểu của
mỗi một ĐTDL cùng với ĐTDL đó. Trước khi thực hiện một
phép toán thông tin về kiểu của mỗi một đối số sẽ được kiểm
tra
Ưu điểm: mềm dẻo khi viết chương trình, không cần khai
báo kiểu dữ liệu và kiểu của ĐTDL có thể thay đổi trong quá
trình thực thi chương trình
Nhược điểm: có khả năng bỏ sót lỗi về kiểu; yêu cầu bộ nhớ
lớn do phải lưu trữ thông tin kiểu dữ liệu trong quá trình thực
hiện chương trình; làm chậm quá trình thực thi do vừa phải
tính toán vừa phải kiểm tra kiểu
Các ngôn ngữ kiểm tra kiểu động: SNOBOL4, LISP, APL…
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
16
Kiểm tra kiểu tĩnh
Thông tin về kiểu của các ĐTDL phải được cung cấp cho bộ
dịch. Bộ biên dịch tập hợp thông tin từ khai báo trong
chương trình vào trong bảng danh biểu (symbol table) nơi
chứa thông tin về kiểu của các biến và chương trình con
Ưu điểm: tất cả các nhánh chương trình, các phép toán đều
được kiểm tra nên không bỏ sót các lỗi về kiểu. Mặt khác
thông tin về kiểu không gắn với ĐTDL tại thời điểm thực thi
chương trình nên tiết kiệm bộ nhớ và tăng tốc độ chạy
chương trình
Nhược điểm: không mềm dẻo, cụ thể người lập trình phải
cân nhắc và xác định kiểu cho ĐTDL một cách rõ ràng
Các ngôn ngữ kiểm tra kiểu tĩnh: Pascal, C, …
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
17
Chuyển đổi kiểu (type conversion)
Trong quá trình kiểm tra kiểu nếu không có sự tương
thích về kiểu thì có 2 lựa chọn có thể:
– Báo lỗi không tương thích kiểu
– Thực hiện chuyển đổi kiểu
Có 2 cách chuyển đổi kiểu
– Bằng tập hợp các hàm đã được xây dựng. VD Lệnh
ROUND trong Pascal chuyển số thực số nguyên
– Ép kiểu tự động. VD trong Pascal các đối số của phép
toán số học ‘+’ có lẫn số thực và số nguyên thì số
nguyên được chuyển đổi tự động sang kiểu số thực
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
18
Sự tương hợp về kiểu
Hai kiểu T1 và T2 gọi là tương hợp với nhau nếu đối tượng
dữ liệu kiểu T1 có thể xuất hiện ở vị trí của đối tượng dữ
liệu kiểu T2 trong các tác vụ, và ngược lại. Cụ thể là:
– Gán đối tượng dữ liệu kiểu T1 cho đối tượng kiểu T2 và
ngược lại
– Đối tượng dữ liệu kiểu T1 có thể tham gia vào các tác vụ
nguyên thủy ở vị trí mà kiểu qui định là T2, và ngược lại.
– Các thông số thực kiểu T1 có thể tương ứng với các thông
số hình thức kiểu T2 trong chương trình con, và ngược lại.
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
19
Sự tương hợp về kiểu
Hai qui tắc xác đinh sự tương hợp kiểu
– Tương đương tên (A, C.B)
– Tương đương cấu trúc (A, B, C.B)
Type T1 = array [1..20] of integer;
T2 = array [1..20] of integer;
Var A: T1;
B: T2;
C: record
A: integer;
B: T1;
end;
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
20
Phép gán
Là tác vụ cơ bản để thay đổi giá trị của đối tượng dữ
liệu.
Đặc tả tác vụ gán
:= : type1 x type2 → void
= : type1 x type2 → type3
Z = X + (Y = W ∗ 2)
Z := X + Y
A=B=C
Ngôn ngữ Pascal
Ngôn ngữ C
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
21
Phép gán
Các NNLT khác nhau thì có phép gán khác nhau
– Khác nhau về cú pháp
– Khác nhau về kết quả trả về của phép gán giá trị
(pascal trả về kiểu void; C/C++ trả về một kiểu giá trị
mới)
– Khác nhau về cách thức tiến hành gán giá trị: sao chép
ĐTDL khi gán, sao chép tự trỏ đến ĐTDL khi gán
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
22
Khởi tạo giá trị
Khởi tạo một biến là gán cho biến đó một giá trị đầu
tiên
Nếu các biến chưa được khởi tạo thì sẽ có giá trị NULL
Khởi tạo biến ngay sau khi nó vừa được tạo ra. VD
trong ngôn ngữ Pascal khởi tạo biến có giá trị ban đầu
còn gọi là hằng định kiểu.
Khi một biến được cấp phát ô nhớ mà chưa được khởi
tạo thì trong ô nhớ của nó cũng có một giá trị ngẫu
nhiên nào đó thường là một giá trị rác. Các giá trị rác
thường gây ra lỗi
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
23
3.2. Các kiểu dữ liệu cơ bản
Kiểu số
Kiểu luận lý
Kiểu kí tự
Kiểu liệt kê
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
24
Kiểu số nguyên
Các kiểu số nguyên: Byte (1 byte),ShortInt (1 byte),
Integer (2 byte), Word(2 byte), LongInt (4byte),..
Dạng lưu trữ cũng như các phép toán số học và phép
toán quan hệ của kiểu nguyên thường được cung cấp
trực tiếp bởi phần cứng. Giá trị số nguyên được lưu trữ
trong một word hoàn chỉnh như một số nhị phân có giá
trị bằng với giá trị nguyên đó.
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT - ĐH SPHN
25