Bài 13: Kiểubản ghi Ngày soạn: Ngày giảng: I. Mục đích, yêu cầu - Biết khái niệm kiểubản ghi. - Biết cách khai báo bản ghi, truy cập trờng của bản ghi. II. Nội dung cụ thể 1. ổn định tổ chức lớp (1) - Kiểm tra sĩ số: Tổng số: Vắng: CP: KP: 2. Kiểm tra bài cũ (5) Câu hỏi: Cho một số biến: họ tên, ngày sinh, giới tính, Tin, Toán , Lí, Hoá, Văn, Sử, Địa. Hãy khai báo kiểu dữ liệu hợp lí với các biến trên? Trả lời: Var hoten: string[30]; ngaysinh: string[10]; gioitinh: boolean; toan, tin, li, hoa, van, su, dia: real; 3. Triển khai bài mới. Đặt vấn đề: Trong các kiểu dữ liệu mà các em đã đợc học có kiểu dữ liệu nào dùng để khai báo chung cho tất cả các biến nh trên hay cha? HS: Cha có kiểu dữ liệu nào. Bài hôm nay cô sẽ giới thiệu cho các em một kiểu dữ liệu mới, cho phép chúng ta khai báo các đối tợng mà có cùng một số thuộc tính giống nhau. 1 Bài 13: Kiểubản ghi. Nội dung Hoạt động của giáo viên và học sinh Thời gian Xét VD: Chơng trình quản lí các thí sinh của một kỳ thi tuyển sinh cần quản lí đợc các thông tin sau: SBD của thí sinh, họ tên của thí sinh, ngày sinh, giới tính, và điểm thi của 7 môn: Toán , Tin, Lí, Hoá, Văn, Sử, Địa. GV: Làm thế nào để quản lí toàn bộ thông tin trên của học sinh? HS: Có thể quản lí mỗi dữ kiện trên là mảng một chiều. GV: Mỗi thông tin trên có kiểu dữ liệu là gì? HS: Trả lời. GV: Ngôn ngữ lập trình bậc cao có cách tốt hơn để quản lí dữ liệu trên. Đó là bản ghi. 4 * Khái niệm: Dữ liệu kiểubản ghi (record) dùng để mô tả các đối t- ợng có cùng một số thuộc tính mà các thuộc tính có thể có các kiểu dữ liệu khác nhau. - Mỗi một bản ghi sẽ lu trữ dữ liệu GV: Các em hãy quan sát bảng 2 về một đối tợng cần quản lí. - Mỗi một thuộc tính của đối tợng tơng ứng với một trờng của bản ghi. Các trờng khác nhau có thể có các kiểu dữ liệu khác nhau. kết quả thi (SGK Tr74). - Mỗi hàng ta gọi là một bản ghi. - Mỗi cột là một trờng. * Qui tắc, cách thức xác định: - Tên kiểubản ghi; - Tên các thuộc tính (trờng); - Kiểu dữ liệu của mỗi trờng; - Cách khai báo biến; - Cách tham chiếu đến trờng. 1. Khai báo - Cách khai báo kiểu: GV: Do dữ liệu kiểubản ghi thờng dùng để mô tả nhiều đối t- ợng nên ta thờng khai báo biến bản ghi thông qua khai báo kiểu bản ghi. GV: Các thông tin cần khai báo gồm: tên kiểubản ghi, tên các thuộc tính, kiểu dữ liệu của mỗi thuộc tính 15 Type <tên kiểubản ghi> = record <tên trờng 1> : <kiểu trờng 1>; <tên trờng 2> : <kiểu trờng 2>; <tên trờng k> : <kiểu trờng k>; End; GV: - Phần mô tả kiểubản ghi đợc bắt đầu bằng từ khoá record và kết thúc bằng từ khoá end;. - Giữa 2 từ khóa đó là phần khai báo các trờng gồm tên trờng, dấu hai chấm, rồi đến kiểu dữ liệu của trờng đó và kết thúc bởi 3 dấu chấm phẩy. - Cách khai báo biến: Var <tên biến bản ghi> : <tên kiểubản ghi>; Var <tên mảng> : array[1 N] of <tên kiểubản ghi>; VD: Khai báo 1 kiểubản ghi để xử lí bảng kết quả thi của các học sinh. Mỗi bản ghi bao gồm: họ tên, ngày sinh, giới tính, và điểm thi các môn của mỗi học sinh (toán, tin, lí, hoá, văn, sử, địa). Em hãy xác định kiểu dữ liệu cho các trờng trên? HS: Hoten: string[30]; Ngaysinh: string[10]; Gioitinh: boolean; toan, tin, li, hoa, van, su, dia: real; - Để truy cập vào từng trờng của bản ghi ta viết: <tên biến bản ghi> . <tên trờng> GV: Cũng giống nh dữ liệu kiểu mảng và kiểu xâu thì dữ liệu kiểubản ghi cũng có cách truy cập vào từng trờng của bản ghi. VD: A. Hoten B . Ngaysinh Lop[i] . Toan Với i là một chỉ số nào đó của mảng. - GV: Muốn tham chiếu đến tr- ờng Gioitinh của đối tợng A ta viết nh thế nào? - HS: A. Gioitinh - GV: Lop[10]. Hoten là để chỉ 4 thông tin gì? - HS: Thông tin về họ tên của phần tử thứ 10 của mảng Lop. - GV: Trong VD trên, em hãy cho biết tên kiểu dữ liệu của biến A? GV: Hai biến A, B có cùng kiểu dữ liệu hay không? HS: - Biến A có kiểu dữ liệu là Hocsinh. - Hai biến A, B có cùng một kiểu dữ liệu là Hocsinh. GV: Phần tử Lop[1] và Lop[6] của mảng Lop thuộc kiểu gì? Lop[1] và A có cùng kiểu hay không? HS: - Hai phần tử đó thuộc kiểu Hocsinh. - Lop[1] và A cùng kiểu dữ liệu. 2. Gán giá trị 15 GV: Vì bản ghi có nhiều trờng nên việc gán giá trị cho bản ghi phức tạp hơn các biến khác. Có 2 cách để gán giá trị cho bản ghi: - Cách 1: Dùng lệnh gán trực tiếp GV: Cách 1 đợc thực hiện trong điều kiện nào? HS: Khi hai biến A, B phải đợc 5 VD: A:= B; B:=A; - Cách 2: Gán giá trị cho từng tr- ờng: + Thực hiện bằng lệnh gán: VD: A. Hoten := B. Hoten; + Nhập từ bàn phím VD: Read (A. Hoten); khai báo cùng một kiểubản ghi. GV: - Các biến cùng cấu trúc nhng có tên kiểu khác nhau thì không áp dụng đợc phép gán. - Giữa hai biến bản ghi cùng kiểu thì chỉ có thể dùng phép so sánh = hoặc <>. VD: SGK (Tr 76) Chơng trình hoàn thiện: Program xep-loai; Uses crt; Const max = 60; Type hocsinh = record Hoten: string [30]; Ngaysinh:string [10]; Diachi: string [50]; Toan, Van: real; Xeploai: char; End; VD: SGK (Tr 76) - GV: Đọc đề bài. - GV: Em hãy xác định các thuộc tính (Trờng)? - HS: Các thuộc tính: họ và tên, ngày sinh, địa chỉ, điểm toán, điểm văn, xếp loại. - GV: Ta sử dụng kiểu dữ liệu nh thế nào để giải quyết bài toán này? 6 Var Lop : array [1 max] of hocsinh; N, i: Byte; Begin Clrscr; Write (Nhap so hoc sinh trong lop N = ); readln (N); For i:= 1 to N do Begin writeln(nhap so lieu ve hoc sinh thu ,i, :); write (Ho va ten:); readln (Lop [i]. Hoten); write (Ngay sinh:); readln (Lop [i]. Ngaysinh); write (Dia chi:); readln (Lop [i]. Diachi); write (Diem Toan:); readln (Lop [i]. Toan); write (Diem Van:); readln (Lop [i]. Van); If Lop [i]. Toan + Lop[i] . Van >= 18 Then Lop [i]. Xeploai := A; If (Lop [i]. Toan + Lop[i] . Van >= 14) and - HS: Sử dụng một mảng các bản ghi. - GV: Em hãy mô tả thông tin về một học sinh bằng kiểubản ghi? - HS: Type hocsinh = record Hoten: string [30]; Ngaysinh : string [10]; Diachi : string [50]; Toan, Van : real; Xeploai : char; End; - GV: Sau khi mô tả kiểu bản ghi ta cần phải khai báo các biến cần sử dụng. Hãy tạo mảng các bản ghi đó? - HS: Var Lop: array [1 60] of hocsinh; - GV: Sử dụng biến N để nhập số học sinh trong lớp, và biến i là biến chỉ số. Hai biến này có kiểu nguyên. - GV: sau phần khai báo là phần thân chơng trình. If (Lop [i]. Toan + Lop[i] . Van >= - GV: Giống nh mảng một chiều 7 10) and (Lop [i]. Toan + Lop[i] .Van< 14) Then Lop [i]. Xeploai := C; If Lop [i]. Toan + Lop[i] . Van < 10 Then Lop [i]. Xeploai := D; End; Clrscr; Writeln(Danh sach xep loai hoc sinh trong lop:); For i := 1 to N do Writeln (Lop [i]. Hoten:30, xep loai:, Lop[i]. Xeploai); Readln; End. để nhập dữ liệu cho các phần tử của mảng các bản ghi ta sử dụng câu lệnh nào? -HS: Sử dụng lệnh For to do - GV: Để nhập thông tin cho các trờng của bản ghi ta sử dụng lệnh nào? HS: Nhập trực tiếp từ bàn phím. Readln (Lop[i]. Hoten); Readln (Lop[i]. Ngaysinh); Readln (Lop[i]. Diachi); Readln (Lop[i]. Toan); Readln (Lop[i]. Van); GV: Trờng xếp loại không đợc nhập từ bàn phím mà đợc xác định dựa vào 2 thuộc tính điểm toán và văn theo 4 trờng hợp đã đợc quy định. - GV: Để tính giá trị trờng xếp loại ta sử dụng câu lệnh gì? - HS: Câu lệnh If Then - GV: Có thể sử dụng If Then Else đ ợc không? - HS: Sử dụng đợc. - GV: Sau khi nhập xong thì ta phải đa kết quả ra màn hình. Sử dụng lệnh lặp For do Writeln (biến). 8 - Câu lệnh with: cho ta tham chiếu đến trờng của bản ghi một cách ngắn gọn With <tên biến bản ghi> do <câu lệnh>; - GV: Ta thấy câu lệnh sauFor do mỗi khi truy cập đến một trờng của biến bản ghi Lop [i], ta viết: Lop [i] . <tên tr- ờng> Nh vậy cần xử lí bao nhiêu trờng thì cần phải viết kèm bấy nhiêu lần Lop [i]. Pascal cung cấp lệnh with để tham chiếu đến trờng của biến bản ghi một cách ngắn gọn: With <tên biến bản ghi> do <câu lệnh>; 3 4. Củng cố, dặn dò (2) Đặc điểm cơ bản giống và khác nhau cảu kiểubản ghi với 2 kiểu dữ liệu có cấu trúc là mảng và xâu: - Đặc điểm chung của kiểu dữ liệu có cấu trúc: Đợc tạo nên từ một số kiểu cơ sở, giá trị cảu một biến có nhiều thành phần. - Khác với mảng và xâu, các kiểu thành phần của một kiểu bản ghi có thể thuộc các kiểu dữ liệu cơ sở khác nhau. Các em về nhà đọc thêm câu lệnh with (SGK Tr 134). Bài tập về nhà: Chuẩn bị các bài tập trong SGK Tr 79 III. Rút kinh nghiệm 9