Các kiểu dữ liệu có cấu trúc

49 692 0
Các kiểu dữ liệu có cấu trúc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương Các kiểu liệu có cấu trúc Trong chương khơng trình bày chi tiết kiểu liệu có cấu trúc đơn giản kiểu mảng, chuỗi Nội dung trọng tâm chương kiểu ghi (Record) có cấu trúc thay đổi, kiểu tệp kiểu tập hợp Chương bạn ñọc cần nắm ñược vấn ñề sau:  Cách thức ñịnh nghĩa kiểu liệu  Khai báo biến với kiểu liệu người lập trình tự định nghĩa  Cách sử dụng toán tử CASE khai báo ghi có cấu trúc thay đổi  Cách thức ghi ñọc liệu cho ba loại tệp: tệp văn bản, tệp có kiểu tệp khơng kiểu, trọng cách ghi liệu kiểu số vào tệp văn lấy số liệu ñể xử lý  Xử dụng liệu kiểu tập hợp lập trình Trường ðại học Nơng nghiệp - Giáo trình Lập trình nâng cao - 20 Dữ liệu kiểu ghi (record) 1.1 Khái niệm Kiểu bố trí liệu thơng dụng mà người nghĩ bố trí dạng bảng Bảng ñược coi ñối tượng (ñể quản lý nghiên cứu), bảng bao gồm số cột số dòng Số cột, dòng bảng phụ thuộc vào phần mềm quản lý mà sử dụng Trong cột liệu có tính chất giống Các phần mềm quản trị liệu Excel, Foxpro ñều ứng dụng khái niệm bảng Pascal khơng phải ngoại lệ ðể có bảng trước hết Pascal xây dựng nên dòng gọi "bản ghi", tập hợp nhiều dòng cho bảng, bảng ñược ghi vào nhớ dạng tệp Bản ghi (Record) cấu trúc bao gồm số (cố ñịnh thay ñổi) phần tử có kiểu khác liên quan với Các phần tử gọi trường (Field) Ví dụ bảng điểm lớp học bao gồm trường Hoten, Ngaysinh, Gioitinh, Lop, Diachi, Toan, Ly, Hoa, , liệu điền vào trường hình thành nên ghi (Record) Có thể có trường ghi lại ghi, ví dụ trường Ngaysinh ghi ba trường Ngay, Thang, Nam Bản ghi kiểu liệu có sẵn Pascal mà người sử dụng tự định nghĩa chúng phải ñược khai báo phần TYPE Bản ghi bao gồm hai loại: * Bản ghi có cấu trúc khơng ñổi : loại ghi mà cấu trúc ñã ñược ñịnh nghĩa từ khai báo giữ nguyên suốt trình xử lý * Bản ghi có cấu trúc thay đổi: loại ghi mà cấu trúc (tên trường, số trường, kiểu trường) thay ñổi tuỳ thuộc vào ñiều kiện cụ thể Loại ghi khai báo khai báo đầy đủ song xử lý số trường giảm (so với cấu trúc khai báo) tăng lên ðiểm mạnh Bản ghi cho phép xây dựng cấu trúc liệu đa dạng phục vụ cơng việc quản lý, muốn lưu trữ liệu ñể sử dụng nhiều lần phải kết hợp kiểu Bản ghi với kiểu Tệp 1.2 Khai báo Kiểu liệu trường Record hồn tồn khác khai báo sau tên trường, trường có kiểu liệu khai báo dịng phân cách dấu phảy "," Cuối khai báo trường phải có dấu ";" Kiểu liệu Record ñược khai báo sau: TYPE = RECORD : Kiểu; : Kiểu; : Kiểu; END; Trường ðại học Nông nghiệp - Giáo trình Lập trình nâng cao - 21 Ví dụ 2.1 Khai báo kiểu liệu BANGDIEM bao gồm số trường nhằm phục vụ việc quản lý ñiểm TYPE BANGDIEM = RECORD Hoten: String[25]; Gioitinh: Char; Lop: String[5]; Diachi: String[30]; Toan,Ly,Hoa: Real; END; Với khai báo dung lượng nhớ dành cho trường (tính Byte) là: Hoten 26, Gioitinh 1, Lop 6, Diachi 31, Toan 6, Ly 6, Hoa (Các trường kiểu String cần thêm Byte chứa ký tự xác ñịnh ñộ dài chuỗi) Tổng ñộ dài Record 26+1+6+31+18=82 Bytes Có thể dùng hàm Sizeof(tên kiểu) để xác định độ dài kiểu liệu, ví dụ: Write(sizeof(bangdiem)) nhận số 82 Ví dụ 2.2 Xây dựng kiểu liệu quản lý hồ sơ công chức Chúng ta tạo bốn kiểu liệu ñặt tên Diadanh, Donvi, Ngay Lylich Type Diadanh = Record Tinh, Huyen, Xa, Thon: String[15]; End; Donvi = Record Truong: String[30]; Khoa, Bomon: String[20] End; Ngay = Record Ng: 31; Th: 12; Nam: Integer; End; Lylich = Record Mhs: Word; Trường ðại học Nông nghiệp - Giáo trình Lập trình nâng cao - 22 Hoten: String[25]; Ngaysinh: Ngay; Quequan: Diadanh; Coquan: Donvi; End; Trong cách khai báo trường Ngaysinh thuộc kiểu Ngay, Quequan thuộc kiểu Diadanh, Coquan thuộc kiểu Donvi, nói cách khác ba trường lại ba Record ðể khắc phục cách khai báo nhiều kiểu ghi sử dụng ghi lồng Kiểu ghi lồng khai báo trực tiếp, nghĩa khơng cần khai báo riêng rẽ ghi Ví dụ 2.3 Uses crt; Type Lylich=record Mhs:word; Hoten:string[25]; Ngaysinh:record Ng:1 31; Th:1 12; Nam:Integer; End; Quequan:record Tinh,Huyen,xa,thon:string[15]; End; Coquan:record Truong:string[30]; Khoa, Bomon:string[20]; End; End; Ngoài cách khai báo kiểu khai báo biến, Pascal cho phép khai báo trực tiếp biến kiểu ghi theo cú pháp sau: Var Tên biến:Record Tên trường 1:kiểu trường; Tên trường 2:kiểu trường; Trường ðại học Nông nghiệp - Giáo trình Lập trình nâng cao - 23 End; 1.3 Truy nhập vào trường ghi Sau ñã khai báo kiểu liệu ta phải khai báo biến, giả sử cần quản lý danh sách cán trường ñại học phải khai báo biến chứa danh sách viết tắt DS Khi ta phải khai VAR DS: Lylich; Giống hai kiểu liệu Mảng Chuỗi, việc xử lý ñược thực phần tử mảng chuỗi ñây DS biến xử lý biến mà xử lý trường biến DS ðể truy nhập vào trường cần viết: ..… Ví dụ để nhập liệu cho trường Hoten ta viết lệnh: Write(' Ho va ten can bo: '); Readln(DS.hoten); Lệnh Readln(DS.hoten); cho phép ta gán Họ tên cán vào trường Hoten ghi thời ðể nhập ngày tháng năm sinh phải truy nhập vào trường Readln(Ds.Ngay.Ngays); Readln(Ds.Ngay.Thang); Readln(Ds.Ngay.Nam); Lệnh viết liệu hình có cú pháp giống lệnh nhập Writeln(DS.Hoten); Writeln(Ds.Ngay.Ngays); Chú ý: Khi khai báo biến DS kiểu LYLICH nhập liệu vào biến DS nhập ñược ghi nghĩa nhập liệu ñược cho người Nếu muốn có danh sách gồm nhiều người phải có nhiều ghi, để thực ñiều xây dựng mảng ghi Trình tự bước sau: * ðịnh nghĩa kiểu liệu ghi * Khai báo biến mảng với số phần tử số người cần quản lý, kiểu phần tử mảng kiểu Bản ghi ñã ñịnh nghĩa (xem ví dụ 2.4) Với tất trường truy nhập ta phải ghi tên biến ñến tên trường mẹ, tên trường con, … điều khơng làm thời gian mà cịn khiến cho chương trình khơng đẹp, Pascal khắc phục nhược ñiểm cách ñưa vào lệnh WITH DO 1.4 Lệnh WITH DO Cú pháp lệnh: WITH DO Trường ðại học Nông nghiệp - Giáo trình Lập trình nâng cao - 24 Khi sử dụng lệnh WITH DO chuỗi lệnh viết sau DO cần viết tên trường có liên quan mà khơng cần viết tên biến Xét ví dụ nhập điểm cho lớp học với giả thiết lớp có nhiều 40 học sinh Ví dụ 2.4: Program Nhapdiem; Uses CRT; Type BANGDIEM = RECORD Hoten: String[25]; Gioitinh: ('T','G'); (* kiểu liệt kê, 'T' = Trai, 'G' = Gái *) Lop: String[5]; Diachi: String[50]; Toan,Ly,Hoa: Real; End; Var DS_LOP: Array[1 40] of BANGDIEM (*danh sách lớp mảng 40 phần tử*) i,j: Integer; lam: Char; BEGIN clrscr; lam:='C'; i:=1; Repeat With DS_LOP[i] Do Begin Write(' Ho va ten hoc sinh: '); Readln(Hoten); Write(' Trai hay gai T/G: '); Readln(Gioitinh); Write(' Thuoc lop: '); Readln(Lop); Write(' Cho o thuong tru: '); Readln(Diachi); Write(' Diem toan: '); Readln(Toan); Write(' Diem ly: '); Readln(Ly); Write(' Diem hoa: '); Readln(Hoa); End; i:=i+1; Write(' NHAP TIEP HAY THOI ? C/K '); Readln(lam); Until upcase(lam)='K'; clrscr; For j:=1 to i-1 With DS_LOP[j] DO Writeln(Hoten:15,' ',Gioitinh:2,' ',Lop:4,' ',Diachi:10,' Toan:', Toan:4:2,' Ly:',Ly:4:2,' Hoa:',Hoa:4:2); Trường ðại học Nông nghiệp - Giáo trình Lập trình nâng cao - 25 Repeat Until Keypressed; END Ví dụ 2.4 sử dụng mảng DS_LOP gồm 40 phần tử, phần tử Record Mỗi lần nhập xong liệu cho phần tử lại hỏi "Nhap tiep hay thoi?", số phần tử cụ thể mảng tuỳ thuộc vào câu trả lời C K Vấn ñề ñáng quan tâm ñây cách sử dụng lệnh With Do, ví dụ 2.4 sử dụng biến mảng DS_LOP trước tiên phải truy nhập vào phần tử thứ i mảng DS_LOP (1

Ngày đăng: 03/10/2013, 01:20

Hình ảnh liên quan

* Dữ liệu ñư a ra màn hình chưa ñẹ p - Các kiểu dữ liệu có cấu trúc

li.

ệu ñư a ra màn hình chưa ñẹ p Xem tại trang 17 của tài liệu.
màn hình mỗi thí sinh trên một dòng - Các kiểu dữ liệu có cấu trúc

m.

àn hình mỗi thí sinh trên một dòng Xem tại trang 49 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan