V. Kiểu dữ liệu có cấu trúc 5.1 Tệp định kiểu
Chương II Các kiểu dữ liệu có cấu trúc 1.2 Khai báo
1.2. Khai báo Type bangluong = Record STT: Integer; Hoten: String[25]; Ngaysinh: String[10];
Hso, Luong, BHXH, Tong: Real; End;
Bộ nhớ dành cho các trường: STT: 4, Hoten: 26, Ngaysinh: 11, Hso: 4, Luong: 4, BHXH: 4, Tong: 4
Write(Sizeof(bangluong)) = 65 (Bytes) Ví dụ tổng hợp
Chương II Các kiểu dữ liệu có cấu trúc
1.2. Khai báo
Pascal cho phép khai báo trực tiếp biến kiểu bản ghi
Cú pháp:
Var Tên_biến: Record
Tên_trường1: Kiểu_dl; Tên_trường2: Kiểu_dl; ……… End;
Chương II Các kiểu dữ liệu có cấu trúc
1.3. Truy nhập vào các trường của bản ghi
<Tên_biến>.<Tên_trg_mẹ>.<Tên_trg_con>…. 1.4. Câu lệnh With..Do
Cú pháp: With <Tên_biến_BG> Do <Các lệnh>;
Chương II Các kiểu dữ liệu có cấu trúc
1.5. Bản ghi có cấu trúc thay đổi a. Xây dựng kiểu dữ liệu
Đối tượng mà thuộc tính bao gồm:
Thuộc tính chung cho mọi xuất hiện
Thuộc tính riêng cho 1 số xuất hiện đặc biệt Ví dụ
Chương II Các kiểu dữ liệu có cấu trúc
1.5. Bản ghi có cấu trúc thay đổi b. Các bước định nghĩa
Khai báo thuộc tính chung trước
TT phân loại gồm 1 hoặc 1 số chỉ tiêu phân loại, các chỉ tiêu của thuộc tính phân loại phải đặt trong cặp dấu ()
Sử dụng toán tử Case..of để phân loại
Có thể khai báo tên 1 số trường thay đổi hoặc khai báo 1 bản ghi con với cấu trúc thay đổi
Chương II Các kiểu dữ liệu có cấu trúc
1.5. Bản ghi có cấu trúc thay đổi b. Các bước định nghĩa
Trường cùng kiểu dữ liệu, tên trường cách nhau bởi dấu phẩy
Dữ liệu trường phân loại phải thuộc kiểu đơn giản: nguyên, thực, logic, chuỗi, liệt kê, khoảng con
Để phân loại dùng Case of (không có End)
Chương II Các kiểu dữ liệu có cấu trúc
1.5. Bản ghi có cấu trúc thay đổi c. Nhận xét
Trong 1 kiểu record, trường cố định khai báo trước, trường phân loại khai báo sau
Mỗi kiểu record có cấu trúc thay đổi chỉ được phép có duy nhất 1 trường phân loại, không thể có 2 toán tử case…of ngang hàng khi khai báo
Bên trong trường phân loại có thể chưa các trường phân loại khác
Ví dụ khai báo lỗi
Chương II Các kiểu dữ liệu có cấu trúc
1.5. Bản ghi có cấu trúc thay đổi c. Nhận xét
Truy nhập vào các trường cố định của bản ghi giống như bản ghi thường
Không dùng phép gán hoặc nhập dữ liệu từ bàn phím cho các trường phân loại
Chương II Các kiểu dữ liệu có cấu trúc
2. Dữ liệu kiểu tệp 2.1. Khái niệm
Tệp là một dãy các phần tử có cùng kiểu được sắp xếp một cách tuần tự
Tệp có kiểu
Tệp văn bản
Tệp không kiểu
Chương II Các kiểu dữ liệu có cấu trúc
2.2. Tệp văn bản a. Khai báo
Var biến_tệp: TEXT; b. Truy nhập
Assign(biến_tệp, đường dẫn\Tên_tệp);
Reset(biến_tệp); -> mở đọc
Rewrite(biến_tệp); -> mở ghi mới
Chương II Các kiểu dữ liệu có cấu trúc
2.2. Tệp văn bản
c. Ghi dữ liệu vào tệp
Write(biến_tệp, giá_trị1, giá_trị2,…);
Writeln(biến_tệp, giá_trị1, giá_trị2,…);
Sự khác nhau giữa Write và Writeln
Write: Ghi dữ liệu liên tục trên các ô nhớ
Writeln: Đưa vào cuối dòng các kí tự điều khiển CR, LF
d. Đóng tệp
Close(biến_tệp); -> đưa thêm vào cuối tệp dấu hiệu kết thúc EOF
Chương II Các kiểu dữ liệu có cấu trúc
e. Ví dụ
Chương II Các kiểu dữ liệu có cấu trúc
2.3. Tệp có kiểu
Tệp mà mọi phần tử có cùng độ dài và cùng kiểu (nguyên, thực, kí tự, chuỗi, mảng hoặc bản ghi)
a. Đọc và ghi
Ghi dữ liệu vào tệp
Write(biến_tệp, biến1, biến2,…);
Đọc tệp
Read(biến_tệp, biến1, biến2,…);
Biến1, biến2, …, biếnn có kiểu dữ liệu cùng với kiểu của phần tử của tệp
Chương II Các kiểu dữ liệu có cấu trúc
b. Truy nhập tệp
Seek(biến_tệp,i); -> Đưa con trỏ tệp trỏ tại phần tử thứ i+1 của tệp c. Các hàm xử lý tệp Filesize(biến_tệp); Filepos(biến_tệp); Eof(biến_tệp) d. Ví dụ
Chương II Các kiểu dữ liệu có cấu trúc
2.4 Tệp không kiểu a. Khai báo biến tệp
Var biến_tệp: File; b. Mở tệp Mở ghi: Assign(biến_tệp, tên_tệp); Rewrite(biến_tệp, n); Mở đọc: Assign(biến_tệp, tên_tệp); Reset(biến_tệp, n);
Chương II Các kiểu dữ liệu có cấu trúc
2.4 Tệp không kiểu
Trong đó:
n là độ dài tính theo Byte do NLT quy định
n = 1, mỗi phần tử 1byte (Byte, char)
n = 2, mỗi phần tử 2Byte (Integer, Word) n = 6, 6 byte (Real)
Chương II Các kiểu dữ liệu có cấu trúc
2.4 Tệp không kiểu
c. Đọc và ghi tệp không định kiểu
Đọc tệp không định kiểu
BlockRead(biến_tệp, biến_nhớ, i, j);
Đọc từng khối (vùng nhớ lưu trữ dữ liệu), khối có thể là 1 biến, 1 chuỗi, 1 bản ghi hay 1 mảng
Biến_nhớ: Có cùng kiểu với các phần tử của tệp, biến_nhớ đóng vai trò vùng nhớ đệm
i: Số phần từ quy định cho mỗi lần đọc
j: Biến kiểu Word dùng để ghi lại số phần tử đã được đọc
Chương II Các kiểu dữ liệu có cấu trúc
c. Đọc và ghi tệp không định kiểu
Ghi tệp không định kiểu
BlockWrite(biến_tệp, biến_nhớ, i); d. Truy nhập tệp không định kiểu
Dùng thủ tục Seek(biến_tệp, n); -> Truy nhập phần tử thứ n+1 của tệp