Tuần 6. Ngày soạn: / / 2007 Ng y giảng: / / 2007 Tiết 12 : Đ 4 cáu trúc dữ liệu kiểu mảng I- Mục tiêu bài giảng: Học xong bài này HS cần nắm đợc: + Kiến thức: - Kiểu mảng là gì - Hiểu khái niệm mảng một chiều và hai chiều - Hiểu cách khai báo và truy cập đến các phần tử của mảng - Cài đặt đợc thuật toán của một số bài toán đơn giản với kiểu dữ liệu mảng 1 chiều. - Thực hiện đợc khai báo mảng, truy cập, tính toán đơn giản với kiểu dữ liệu. + Kĩ năng: - Rèn t duy, sáng tạo, nghiên cứu cho HS + Thái độ: - Cần cho học sinh thấy cần phải có một kiểu dữ liệu mới, ích lợi của kiểu dữ liệu đó, có thể minh hoạ. - Khi làm việc với mảng, học sinh khó hiểu nhất vẫn là cách truy xuất tới các phần tử của mảng. Cần làm rõ các khái niệm nh chỉ số, kiểu chỉ số II- Phơng tiện thực hiện GV: - Giáo án, tài liệu tham khảo, máy tính, thuyết trình, vấn đáp, máy chiếu III- Cách thức tiến hành - Lấy HS làm trung tâm IV- Tiến trình giờ dạy Hoạt động của Giáo viên & học sinh Hoạt động của học sinh 1- Tổ chức: Sĩ số: 9A Số HS vắng: Tên: 9B Số HS vắng: Tên: 9C Số HS vắng: Tên: 9D Số HS vắng: Tên: 2- Kiểm tra bài cũ: Câu 1: Kiểu số thực là gì? Câu 2: Xâu ký tự là gì ? Câu 3: Cách khai báo kiểu xâu? Gv: Nhận xét và cho điểm Gv; Chữa bài tập Trớc khi vào bài, Gv đa ra một số vấn đề cần giải quyết nh sau: - Lớp trởng báo cáo sĩ số HS lên bảng trả lời Gọi HS nhận xét bổ sung * HS nghe và ghi chép bài đầy đủ Gv: Kiểu mảng là gì. I. Khái niệm kiểu mảng: + Mảng là 1 kiểu dữ liệu có cấu trúc bao gồm một số cố định các phần tử có cùng kiểu, có cùng một tên chung. Mỗi phần tử của mảng chứa đợc một giá trị và đợc truy xuất thông qua các chỉ số. + Mảng cũng có các kiểu nh: Biến, Byte, Integer, Real, Char, String Gv: Khái niệm mảng một chiều và một số yếu tố liên quan trong lập trình nói chung. Gv: Đa ra cách khai báo mảng một chiều trong ngôn ngữ Pascal, giải thích ý nghĩa của các từ khoá mới. Một số ví dụ minh hoạ: Tìm phần tử lớn nhất của một dãy số nguyên. + Thuật toán: Input: Số nguyên dơng N và dãy số A1,A2, ,AN + Output: Chỉ số và giá trị của số lớn nhất trong dãy. + ý tởng: + Đặt số A1 là số lớn nhất Max + Cho i lặp từ 2 đến N, nếu A[i]>Max thì đổi Max=A[i] và lu lại vị trí i. Ch ơng trình nh sau. Program timmax; Var a : array[1 250] of integer; + Công dụng của mảng là: dùng để lu trữ một dãy số liệu có cùng 1 tính chất nào đó, ví dụ họ tên các nhân viên trong xí nghiệp. Trong lập trình thờng có 2 loại mảng: Mảng một chiều. Mảng hai chiều. 1. Kiểu mảng một chiều. Mảng một chiều là mảng dùng một chỉ số để xác định các phần tử của mảng, trớc khi dùng mảng phải khai báo kiểu của nó. Có 2 cách khai báo mảng 1 chiều. Cách 1: Khai báo trực tiếp Var <Tên mảng>: Array[ kiểu chỉ số] Of <kiểu phần tử>; Ví dụ Var A: Array[1 100] Of Integer; B: Array[1 50] Of Real; C: Array[1 100] of string; - Biến a là 1 mản số nguyên có tối đa 100 phần tử - Biến b là 1 mản số thực có tối đa 50 phần tử Cách 2: Khai báo qua định nghĩa kiểu của mang. Type <Tên kiểu mảng> =Array[<kiểu chỉ số>] of <kiểu phàn tử>; Var<Tên mảng> : <tên kiẻu mảng>; Ví dụ: + Trong đó - Type là định nghĩa kiểu của mảng, - Array là từ khoá để khai baó mảng. - Kiểu chỉ số thờng là đoạn số nguyên liên tục có n1 n2, với n1 là chỉ sô đầu và n2 là chỉ số cuối. Ví dụ 1: Type mang1=array[1 n] of real; Mang2=array[1 99 ] of interger; Var a:mang1; b:mang2; Ví dụ 2: Chơng trình sau sẽ xuất ra màn hình cái gì? Var A:Array[1 4] of Integer; I, n, max, csmax : integer; Begin Write(Nhap n=); Readln(n); For i: =1 to n do Begin Write(A[,i,]=);Readln(a[i]); End; Max:=A[1]; Csmax:=1; For i:= 2 to n do If a[i]>max then Begin Max:=a[i]; csmax:=i; End; Writeln(gia tri lon nhat:, max); Writeln( chi so phan tu lon nhat:,csmax); Readln; END. HS trả lời ví dụ 5 Gv. Kiểu mảng hai chiểu Ví dụ: in ra màn hình bảng cửu chơng Var a: array[1 9,1 9] of integer; I,j: byte; Begin For i:= 1 to 9 do For j:= 1 to 9 do A[i,j]:=i*j; For i:= 1 to 9 do Begin For j:= 1 to 9 do write(a[i,j]:4); End; End. Begin A[1]:=100; A[2]:=200; A[3]:=A[2]/A[1]; A[4]:=A[1] * A[2]; Writeln(A[3]); Writeln(A[4]); End. Kết quả: 2 và 20000 Ví dụ 3: mảng 1 chiều Hai cách khai báo sau có tơng đơng với nhau không ? a. Type Mang=array[1 100] Of integer; var A,B : Mang; b. Var A,B:array[1 100] of integer; + Có tơng đơng, vì a khai báo theo cách 2, b theo cách 1. Ví dụ 4: mảng 2 chiều Hai cách khai báo sau có tơng đơng với nhau không ? a. Type Mang=array[1 100] Of integer; var A,B : array[1 100] of mang; b. Var A,B:array[1 100,1 100] of integer; + Có tơng đơng, vì a khai báo theo cách 2, b theo cách 1. Ví dụ 5: Các khai báo sau đúng hay sai: a. Array[5 &] of real; b. Array[3.4 4.8] of integer; c. Array of array[1 3] of integer; d. Array[10,13] of integer; Trả lời. a. sai vì 5 và & không cùng kiểu b. sai vì 3.4 và 4.8 không phải là kiểu đếm dợc c. sai vì thiếu kiểu chỉ dẫn d. sai vì đoạn con phải viết là 10 13 + Mảng hai chiều. Là mảng có thể có nhiều hơn một chiều. + Cách khai báo mảng hai chiều. Cách 1: Khai báo trực tiếp Var < Tên mảng>:Array[kiểu chỉ số dòng, kiểu chỉ số cột] of<kiểu phần tử>; Ví dụ: Var: A: Array[1 5,1 4] of real; A chính là ma trận 5 hàng 4 cột Cách 2: khai báo gián tiếp Type Mang1=array[1 n,1 m] of real; Mang2=array[1 20,1 30] of integer; Var a: mang1; b:Mang2; IV- Cñng cè: - Nh¸c l¹i cÊu tróc c©u lÖnh c¸ch khai b¸o, truy xuÊt - Ra bµi tËp vÒ nhµ