Dữ liệu kiểu bản ghi (Record) và ứng dụng:

Một phần của tài liệu Giáo trình nhập môn tin học phần III ngôn ngữ lập trình pascal 1 (Trang 30)

1. Khái niệm: Khác với một số dữ liệu đã biếtở các phần trước như mảng, tập hợp là các phần tử phải cùng kiểu, Bản ghi là cách đơn giảnđể kết hợp nhiều dữ liệu có các các phần tử phải cùng kiểu, Bản ghi là cách đơn giảnđể kết hợp nhiều dữ liệu có các kiểu khác nhau thành một kiểu mới do người dùng tựđịnh nghĩa.

Đặc điểm của dữ liệu bản ghi :

- Mỗi bản ghi có một tên chung và mỗi mục dữ liệu trong BG được gọi là một trường (field). Mỗi trường có thể có kiểu bất kỳ.

- Mỗi bản ghi có thể có nhiều trường, trong các trường lại có thể có trường con. - Bản ghi có thể có cấu trúc không đổi hoặc thay đổi.

- Các bản ghi có thể lồng nhau (trong các trường lại là một bản ghi khác). - Trước khi làm việc với dữ liệu bản ghi, chúng ta phải khai báo chúng.

2. Khai báo dữ liệu kiểu bản ghi:

Khai báo trực tiếp Khai báo gián tiếp

Var

Tên_bản_ghi : Record Tên_trường_1: Kiểu; Tên_trường_2: Kiểu; . . .

Tên_trường_n: Kiểu; End; Type Tên_bản_ghi = Record Tên_trường_1: Kiểu; Tên_trường_2: Kiểu; . . . Tên_trường_n: Kiểu; End;

Var Danh_sách_biến_BG : Kiểu_bản_ghi;

Trong đó: tên của bản ghi và tên trường tuân theo qui địnhđặt tên của Pascal. Kiểu phải là một trong các kiểu vô hướng, mảng hoặc một kiểu mớiđã khai báo trướcđó.

- Minh họa: + Tạo và khai báo 1 bản ghi để lưu trữ dữ liệu cho từng cán bộ trong một cơ quan bao gồm các thông tin: Họ tên, Địa chỉ, năm sinh, lương, giới tính, tình trạng gia đình:

Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal- 1 GVC: Đào Tăng Kiệm Type TTHS = Record Ho_ten : string [ 25]; D_chi : string [ 40 ]; N_sinh: integer; Luong : real ; G_tinh : Char ; TTGD : integer End ;

+ Để lưu trữ dữ liệu cho cả cơ quan có m người, dùng một mảng Ho_so, trong đó mỗi phần tử của mảng là một record có cấu trúc TTHS và khai báo mảng qua Var như sau: Var Ho_so : Array [1.. m] of TTHS ; ( m là hằng số)

3. Truy nhập dữ liệu bản ghi:

Để truy nhập bản ghi cũng sử dụng các lệnh Read, Write và các lệnh chu trình. Muốn nhập hoặc xuất dữ liệu bản ghi, phải làm việc với từng trường thông qua các biến bản ghi. Cấu trúc lệnh như sau:

Read[ln] ( Biến_bản_ghi. Trường1. trường1_1…);

Write[ln] ( Biến_bản_ghi. Trường1. trường1_1…);

Biến bản ghi có thể là biếnđơn hoặc biến mảng.

- Nhập dữ liệu cho từng cán bộ vào mảng hồ sơ của cơ quan khai báo ở trên như sau: For i:= 1 to m Do

Begin

Writeln ( ’ Dua vao Ho ten, Dia chi … cua can bo thu’ , i , ’: ’ ); Readln (Ho_so [i] . Ho_ten, Ho_so[i] . D_chi… );

End;

- In lên màn hình danh sách cán bộ gồm Họ tên, Năm sinh, Lương của cả cơ quan : For i:= 1 to m Do

Writeln(Ho_so [i].Ho_ten :25, Ho_so[i].N_sinh :6, Ho_so[i].Luong :8:2);

4. Tính toán, xử lý dữ liệu bản ghi:

Để tính toán, xử lý các dữ liệu bản ghi, có thể dùng tất cả các lệnh của Pascal như các lệnhđiều khiển, lệnh chu trình, lệnh gán …

Tuy nhiên trong các câu lệnh với kiểu bản ghi thường xuyên phải nhắc lại tên của biến, tên trường làm câu lệnh dài, rườm rà… Trong Pascal có thể dùng câu lệnh With để khắc phục điều này. Khi sử dụng With < các tham số> thì các tham số không cần xuất hiện trong các câu lệnhđựoc phủ trong miền With.

Cấu trúc của lệnh With

WITH Tên_biến_bản_ghi . Tên_trường . [tên_trường . . .] DO

Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal- 1 GVC: Đào Tăng Kiệm

Viết lại các câu lệnh trên dùng With

For i:= 1 to m Do With Ho_so[i] Do Writeln (Ho_ten: 25,N_sinh: 6, Luong: 8:2);

5. Ví dụ:

 Các ví dụ minh hoạ cho câu lệnh:

Khai báo gián tiếp bản ghi đơn Khai báo bản ghi kép Type SV = Record HT : string [15]; D : array [ 1.. 50 ] of real ; TB : real; PL : Char; End ; VT = array [1..60] of SV ; Var DS1,DS2 : VT ; Type HT = Record Ho : String [15] ; Dem : String [10] ; Ten : String [15] ; End; SV = Record Hoten : HT; D : array [ 1.. 50 ] of real ; TB : real; PL : Char; End ; Var DS : array [1..60] of SV;  Các bài tập ví dụ:

- Bài tập 1: Cho một lớp học sinh, biết mã số SV, tên và điểm thi 3 môn của mỗi sinh viên. Viết chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của từng người và sắp xếp lại danh sách theo điểm trung bình tăng dần .

Program Vi_du_Ban_ghi_Sapxep;

type sinhvien = record masv:string[10]; tensv: string[30]; dt,dl,dh,dtb:real; end; var temp:sinhvien; sv:array[1..100] of sinhvien; n, i, j: integer; BEGIN

{Nhap du lieu n sinh vien}

write('Nhap so sinh vien:'); readln(n);

for i:=1 to n do begin

Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal- 1 GVC: Đào Tăng Kiệm

write('Ma sv:'); readln(sv[i].masv); write('Ten sv:'); readln(sv[i].tensv); write('Diem toan:'); readln(sv[i].dt); write('Diem ly:'); readln(sv[i].dl); write('Diem hoa:'); readln(sv[i].dh); sv[i].dtb := (sv[i].dt+sv[i].dl+sv[i].dh)/3; end;

{in ra danh sach sinh vien vua nhap}

writeln;

writeln(' Danh sach sinh vien vua nhap');

writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB'); for i:=1 to n do

writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1, sv[i].dtb:6:1);

{sap xep danh sach sinh vien theo diem trung binh tang dan}

for i:= 1 to n do for j:=i+1 to n do if (sv[i].dtb >sv[j].dtb) then begin temp:=sv[i]; sv[i]:=sv[j]; sv[j]:=temp; end;

{in ket qua sau danh sach sinh vien sau khi sap xep}

writeln;

writeln(' Danh sach sinh vien sap theo thu tu dtb tang dan'); writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB'); for i:=1 to n do

writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1, sv[i].dtb:6:1);

readln; END.

Một phần của tài liệu Giáo trình nhập môn tin học phần III ngôn ngữ lập trình pascal 1 (Trang 30)

Tải bản đầy đủ (PDF)

(36 trang)