Giáo án lý thuyết Bài 11: Kiểu mảng (Tiết 4) I. Mục tiêu: 1. Kiến thức: - Biết đợc một kiểu dữ liệu mới là kiểu mảnghai chiều - Biết đợc cách tạo kiểu mảnghai chiều, cách khai báo biến, tham chiếu đến từng phần tử của mảng. 2. Kỹ năng: - Tạo đợc kiểu mảnghai chiều và khai báo biến mảnghai chiều trong ngôn ngữ lập trình Pascal. Sử dụng đúng biến mảng để giải quyết một số bài toán cụ thể II. Hoạt động dạy học: 1. ổn định tổ chức lớp: Kiểm tra sĩ số: Tổng số: Vắng: Có phép: Không phép: 2. Kiểm tra bài cũ: Câu hỏi: - a) Cách khai báo mảng một chiều và cách tham chiếu tới phần tử của mảng? (7đ) - b) Vận dụng: Cho dãy số A = (a 1 , a 2 , , a n ), (a i nguyên, i = 1, , n và 3 < n <= 100). Viết đoạn chơng trình khai báo biến cần sử dụng? (2đ) Trả lời: a) Cách khai báo mảng một chiều: Cách 1: Khai báo trực tiếp biến mảng một chiều: Var <tên biến mảng> : array [kiểu chỉ số] of <kiểu phần tử>; Cách 2: Khai báo gián tiếp biến mảng qua kiểu mảng một chiều: Type <tên kiểu mảng> = array [kiểu chỉ số] of <kiểu phần tử>; Var <tên biến mảng> : <tên kiểu mảng>; b) Var n : byte; A : array[1 n] of integer; 3. Bài mới: Đặt vấn đề: Trong bài trớc chúng ta đã đợc biết kiểu dữ liệu có cấu trúc và đã di tìm hiểu về mảng một chiều. Hôm nay chúng ta tiếp tục tìm hiểu về cấu trúc dữ liệu kiểu mảng và tìm hiểu về mảnghai chiều. Ta vào bài hôm nay: Kiểu mảnghai chiều Nội dung Hoạt động của thầy và trò t 1. Bài toán: Tính và đa ra màn hình bảng cửu chơng 1 2 3 4 5 6 7 8 9 10 2 4 6 4 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 GV: Sử dụng kiến thức về mảng một chiều, hãy đa ra cách sử dụng kiểu mảng đó để lu trữ bảng cửu chơng? HS: Sử dụng 9 mảng một chiều, mỗi mảng lu một hàng của bảng GV: Với cách lu trữ nh vậy ta phải khai báo bao nhiêu biến? HS: Khai báo 9 biến mảng một chiều GV: Với cách khai báo nh vậy thì chơng trình nhập xuất dữ liệu dài và phải khai báo nhiều biến. Để khắc phục khó khăn này, ta xem một mảng một chiều là một phần tử, ta ghép 9 mảng một chiều trên thành mảnghai chiều GV: Vậy có nhận xét gì về mảnghai chiều? HS: Nếu xem mỗi hàng của mảnghai chiều là 1 phần tử thì ta có thể nói mảnghai chiều là mảng một chiều mà mỗi phần tử là mảng một chiều. 2. Các yếu tố để xác định mảnghai chiều: Tơng tự nh với kiểu mảng một chiều, với kiểu mảnghai chiều, các ngôn ngữ lập trình cũng có quy tắc, cách thức cho phép xác định: - Tên kiểu mảnghai chiều - Số lợng phần tử của mỗi chiều - Kiểu dữ liệu của phần tử - Cách khai báo biến GV: Để mô tả kiểu mảnghai chiều ta cần xác định các yếu tố chính nào? HS: Các yếu tố để xây dựng mảnghai chiều: - Tên kiểu mảnghai chiều - Số lợng phần tử của mỗi chiều - Kiểu dữ liệu của phần tử - Cách tham chiếu đến phần tử 3. Tìm hiểu về kiểu mảnghai chiều: a. Khai báo: Tổng quát, khai báo biến mảnghai chiều trong Pascal nh sau: Cách 1: Khai báo trực tiếp biến mảnghai chiều: Var <tên biến mảng> : array [kiểu chỉ số hàng, kiểu chỉ số cột] of <kiểu phần tử>; Cách 2: Khai báo gián tiếp biến mảng qua kiểu mảnghai chiều: Type <tên kiểu mảng> = array [kiểu chỉ số GV: Với bài toán tính và đa ra màn hình bảng cửu chơng ta sử dụng biến mảnghai chiều B để l- u trữ, biến mảnghai chiều B lu trữ bảng nhân đợc khai báo trong Pascal nh sau: Var B : array [1 9] of array [1 10] of integer; Hoặc có thể khai báo ngắn gọn: Var B : array[1 9, 1 10] of integer; hàng, kiểu chỉ số cột] of <kiểu phần tử>; Var <tên biến mảng> : <tên kiểu mảng>; Chú ý: Các biến mảng thờng gồm số lợng lớn các phần tử nên cần lu ý phạm vi sử dụng chúng để khai báo kích thớc và kiểu dữ liệu sao cho tiết kiệm bộ nhớ. GV: Qua cách khai báo nh trên em hãy cho biết cách tạo kiểu dữ liệu mảnghai chiều (cách khai báo mảnghai chiều)? HS: Trả lời câu hỏi của GV Ví dụ: Các khai báo sau đây là hợp lệ: Type arrayReal = array[-100 200, 100 200] of real; arrayBoolean = array[-n+1 n+1, n 2*n] of boolean; Var arrayInt : array[1 10, 1 15] of integer; arrayLong : array[0 3*(n+1), 0 n] of Longint; trong đó n là hằng số GV: Hãy cho biết đâu là tên biến mảng, kiểu chỉ số hàng, kiểu chỉ số cột, kiểu phần tử của các khai báo trên? HS: Trả lời câu hỏi của GV GV: ý nghĩa của câu lệnh Type arrayReal = array [-100 200, 100 200] of real;? HS: Lệnh trên dùng để tạo một kiểu mảnghai chiều có tên là arrayReal gồm 300 dòng và 100 cột, các phần tử có kiểu dữ liệu là real. b. Cách tham chiếu tới từng phần tử của mảng: Tham chiếu tới phần tử của mảnghai chiều đợc xác định bởi tên mảng cùng với GV: Yêu cầu học sinh quan sát cấu trúc chung và suy nghĩ tìm ví dụ GV: Ví dụ a[i, j] là phần tử ở hai chỉ số đợc phân cách bởi dấu phẩy và viết trong cặp ngoặc [ và ] <tên biến mảng>[chỉ số hàng, chỉ số cột] dòng i, cột j của mảng a. HS: Ví dụ: a[2, 9] là phần tử ở dòng số 2, cột số 9 của mảng a 4. Rèn luyện kỹ năng sử dụng mảnghai chiều: Ví dụ 1: Chơng trình tính và đa ra màn hình bảng nhân Để nhập dữ liệu ta dùng hai vòng For: For i:=1 to 9 do For j:=1 to 10 do B[i, j] := i*j; In ra mảng: For i:=1 to 9 do Begin For j:=1 to 10 do Write(B[i, j]:4); Writeln; End; GV: Yêu cầu học sinh theo dõi ch- ơng trình trong SGK Tr61, 62 GV: Khai báo Uses crt; có ý nghĩa gì? HS: Khai báo th viện chơng trình con Crt để sử dụng đợc thủ tục Clrscr; GV: Giải thích chơng trình Để thực hiện chơng trình tính và đa ra màn hình bảng nhân ta phải sử dụng 3 biến, đó là: biến kiểu mảnghai chiều có tên là B gồm 9 dòng và 10 cột, các phần tử có kiểu dữ liệu là integer. Và 2 biến chỉ số i và j để lu trữ chỉ số hàng và chỉ số cột của mảnghai chiều B Hai vòng for với i, j lồng nhau để gán giá trị của bảng cửu chơng cho các phần tử của B Sau đó in bảng đó ra màn hình GV: ý nghĩa của lệnh Writeln; trong chơng trình này? HS: Để xuống dòng khi in đủ 10 cột. Ví dụ 2: Nhập vào từ bàn phím các phần tử của mảnghai chiều B gồm 5 hàng, 7 cột với các phần tử là các số nguyên và một số nguyên k. Sau đó đa ra màn hình các phần tử của mảng có giá trị nhỏ hơn k. GV: Nêu ví dụ 2 và yêu cầu học sinh về nhà chạy thử chơng trình 4. Củng cố: - Những nội dung đã học: + Cách khai báo mảnghai chiều + Cách tham chiếu đến từng phần tử của mảng + Nhập và in dữ liệu của mảng - Bài tập về nhà: + Viết chơng trình nhập vào từ bàn phím một mảnghai chiều A[1 10, 1 10] với các phần tử là các số nguyên và một số nguyên x. Đếm số lợng số trong A có giá trị bằng x. + Xem nội dung của bài thực hành số 4 (SGK Tr65). NhËn xÐt cña gi¸o viªn híng dÉn . kiểu mảng hai chiều - Biết đợc cách tạo kiểu mảng hai chiều, cách khai báo biến, tham chiếu đến từng phần tử của mảng. 2. Kỹ năng: - Tạo đợc kiểu mảng hai chiều và khai báo biến mảng hai chiều. đến phần tử 3. Tìm hiểu về kiểu mảng hai chiều: a. Khai báo: Tổng quát, khai báo biến mảng hai chiều trong Pascal nh sau: Cách 1: Khai báo trực tiếp biến mảng hai chiều: Var <tên biến mảng>. dụng chúng để khai báo kích thớc và kiểu dữ liệu sao cho tiết kiệm bộ nhớ. GV: Qua cách khai báo nh trên em hãy cho biết cách tạo kiểu dữ liệu mảng hai chiều (cách khai báo mảng hai chiều)? HS: