Tải bản đầy đủ (.ppt) (74 trang)

Bài giảng ngôn ngữ lập trình chương 3 dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (231.69 KB, 74 trang )

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


×