Kiểu mảng hai chiều: ¯ Mảng hai chiều là một bảng các phần tử cùng kiểu Với mảng hai chiều ta quan tam đến: ¯ Tên kiểu mảng hai chiều ¯ Số lượng phần tử của mỗi chiều trong mảng ¯ Kiểu d[r]
(1)Bộ môn: Tin học Bài 11: KIỂU MẢNG Ngày soạn: / _/2007 Tiết CT: I MỤC ĐÍCH VÀ YÊU CẦU CỦA BÀI GIẢNG - Hiểu khái niệm mảng chiều và hai chiều Hiểu cách khai báo và truy cập đến các phần tử mảng Cài đặt thuật toán số bài toán đơn giản với kiểu liệu mảng chiều Thực khai báo mảng, truy cập, tính toán các phần tử mảng II PHƯƠNG PHÁP, PHƯƠNG TIỆN III Phương pháp: Thuyết trình, vấn đáp Phương tiện: Máy chiếu, máy tính, phông chiếu bảng LƯU Ý SƯ PHẠM - Cần cho HS thấy cần phải có kiểu liệu ích lởi kiểu liệu đó, có thể minh họa hình ảnh Khi làm việc với mảng, HS khó hiểu là cách truy xuất tới các phần tử mảng Cần làm rõ các khái niệm như: đánh số các phần tử mảng, số, kiểu số NỘI DUNG HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH NỘI DUNG BÀI GIẢNG Ổn định lớp: Chào thầy cô Cán lớp báo cáo sĩ số Chỉnh đốn trang phục Trước vào bài, GV đưa số vấn đề cần giải sau: Với kiểu liệu đã biết, làm nào để: Có thể sử dụng ví dụ SGK để HS dễ theo dõi, gõ trước chươngt trình Lưu trữ và xử lí dãy số? để có thể sử dụng cho các phần Lưu trữ và xử lí họ và tên người? Lưu trữ và xử lí bảng kết thi tốt nghiệp? HS: đưa phương án trả lời cho câu hỏi trên GV: các NNLT thường cung cấp số kiểu liệu GV: Võ Quốc Dũng Trang Lop11.com (2) Bộ môn: Tin học HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH NỘI DUNG BÀI GIẢNG xây dựng từ kiểu liệu chuẩn gọi là kiểu liệu có cấu trúc Chương này chúng ta tìm hiểu số kiểu liệu Trong lập trình thường có loại mảng: Mảng chiều ngôn ngữ Pascal để trả lời câu hỏi trên Mảng hai chiều GV: Đưa ví dụ, cần lập trình xử lí dãy số nguyên, hãy Kiểu mảng chiều: Mảng chiều là dãy hữu hạn các phần tử có cùng kiểu, mảng tìm cách lưu trữ dãy số nguyên lập trình? đặt tên va 2mỗi phần tử mang số Để mô tả mảng chiều ta cần Bằng cách nào để lưu trữ thông tin dạng bảng lập xác định kiểu phần tử và cách đánh số các phần tử Với mảng chiều ta quan tâm đến: trình? HS: Đưa ý kiến Tên mảng chiều Số lượng phần tử mảng GV: đánh giá ý kiến HS sau đó đưa mục đích việc Kiểu liệu phần tử sử dụng cấu trúc mảng chương trình Cách khai báo biến mảng chiều Cách truy cập vào phần tử mảng GV:Đưa khái niệm mảng chiều và số yêu cầu liên quan lập trình nói chung GV: Đi sâu và phân tích hai chương trình HS nhận Xét ví dụ: Nhập vào nhiệt độ trung bình ngày tuần Tính và thấy tiện lợi sử dụng mảng đưa màn hình nhiệt độ trung bình tuần và đém số ngày có nhiệt HS: GV phân tích hai chương trình, HS đưa ý độ lớn nhiệt độ trung bình này kiến nhận xét chương trình Quan sát hai chương trình viết nằng ngôn ngữ Pascal cùng để giải bài toán trên Chương trình 1: Không sử dụng kiểu mảng Chương trình : Sử dụng kiểu mảng chiều a) Khai báo mảng chiều: GV: Đưa cách khai báo mảng chiều ngôn ngữ Trong ngôn ngữ Pascal, mảng chiều khai báo hai cách Pascal, giải thích ý nghĩa các từ khóa sau: GV: Võ Quốc Dũng Trang Lop11.com (3) Bộ môn: Tin học HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH GV: Khai báo cách nào tiện lợi hơn? HS: Thường thì HS trả lời cách tiện lợi NỘI DUNG BÀI GIẢNG Cách 1: Var <Tên mảng> : Array[kiểu liệu số] of <kiểu phần tử>; Cách 2: GV: Tùy trường hợp cụ thể mà ta dùng cách hay cách Type<Tên kiểu mảng> = Array[<kiểu số>] of <kiểu phần tử>; thông thường ta dùng cách Var<Ten mảng>: <tên kiểu mảng>; GV: Sử dụng số hình ảnh trực quan để minh họa cho HS Trong đó Type là khóa dùng để khai báo biến, Array là từ khóa dùng để khai cấu trúc mảng và số phần tử báo mảng Chỉ Kiểu số thường là d0oạn số nguyên liên tục có n1…n2, với n1 là số số đầu và n2 là số cuối Giá 53 81 62 18 26 41 24 53 Kiểu thành phần là kiểu liệu phần tử mảng trị Để truy cập vào phần tử mảng, ta viết: <Tên biến mảng>[Chỉ sô] Ví dụ: A[20] Truy cập phần tử mảng số 20 mảng A Đưa số khai báo mảng Pascal Ví dụ: Khai báo biến mảng thông qua kiểu mảng: Type ArrayInteger = Array[1…100] OfInteger; ArrayReal = Array[1…50] Of Real; Var A : Arrayainteger; B : ArrayReal; Khai báo mảng trực tiếp: Var A : Array[1…100] OfInteger; B : ArrayReal = Array[1…50] Of Real; b) Một số ví dụ: Ví dụ 1: Tím phần tử lớn củamột dãy các số nguyên Input: Số nguyên dương N và dãy số A1, A2,…AN GV: Đưa ví dụ Output: Chỉ số và giá trị số lớn nhát dãy Ý tưởng HS: Xay dựng thuật toán để giải bài toán ( thuật toán đã học GV: Võ Quốc Dũng Trang Lop11.com (4) HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH lớp 10) NỘI DUNG BÀI GIẢNG Đặt số A1 là số lớn (max) Cho I lặp từ đến N, A[i] > max thì đổi max = A[i] và lưu lại vị trí i GV: soạn sẵn chương trình và cho HS quan sát chương trình Chương trình sau: Program timmax; Nếu có thời gian, GV tiến hành soạn chương trình từ đầu uses crt; để HS có thể dễ dàng nhận các thao tác cần phải thực Var a: array[1 250] of integer; N, I, max, csmax : Integer; viết chương trình Begin Clrscr; Write(‘Nhap n= ’); Readln(N); For i:= to N begin write (‘A[‘I’]=’); readln(a[i]); end; max := A[1]; csmax := 1; for I := to n 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 Ví dụ 2: Sắp xếp dãy số nguyên theo thuật toán trao đổi Input : Số nguyên dương N và dãy số A1, A2,…,AN Output : Dãy A xếp theo thứ tự không giảm Trang Lop11.com (5) Bộ môn: Tin học HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH GV: Đưa ví dụ, nhắc lại ý tưởng thuật toán HS: Xây dựng thuật toán để giải bài toán (thuật toán đã học lớp 10) GV: Soạn sẵn chương trình và cho HS quan sát chương trình Nếu có thời gian, GV tiến hành soạn chương trình từ đầu để HS dễ dàng nhận việc chuyển đổi ngôn ngữ từ ngôn ngữ thuật toán sang ngôn ngữ lập trình GV: Võ Quốc Dũng NỘI DUNG BÀI GIẢNG Ý tưởng: Đổi để đưa số lớn vị trí cuối cùng Làm tương tự số còn lại Chương trình sau: Program sapxep; Uses crt; Var A : Array[1 250] of integer; n, i , j, tg: integer; begin clrscr; write(‘nhap so phan tu mang n=’); readln (N); for I := to N begin write(A[‘i’]=’); readln(a[i]); end; for j := N downto begin for i:= to j-1 if a[i] > a[i+1] then begin tg := a[i]; a[i] := a[i+1]; a[i+1] := tg; end; end; writeln (‘day sau sap xep:’); for i:= to n write(a[i]:8); readln Trang Lop11.com (6) HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH NỘI DUNG BÀI GIẢNG End Ví dụ 3: Tìm kiếm nhị phân Input: dãy số A1, A2,…,AN đã xếp tăng dần ¯ Output : có hay không số I mà A[i] = k thông báo không tìm GV: Đưa ví dụ, nhắc lại ý tưởng thuật toán thấy HS: xây dựng thuật toán để giải bài toán (thuật toán đã học ¯ Ý tưởng: lớp 10) Xem lại thuật toán tìm kiếm nhị phân SKG lớp 10 GV soạn sẵn chương trình và cho HS quan sat chương trình Chương trình sau: Nếu có nhiều thời gian, GV tin61 hành soan chương trình Program sapxep; từ đầu để HS có thể dễ dàng nhận việc chuyển đổi ngôn Var A: Array[1…250] of Integer; ngữ từ ngôn ngữ thuật toán sang ngôn ngữ lập trình n, i, k: Integer; TK : boolean; Begin Clrscr; Write(‘nhap so phan tu mang n=’); Readln(N); For i := to N Begin Write(‘A[‘,i,’]=’); Readln (a[i]); End; Write(‘nhap gia tri can tim k:’); Readln(K); dau := 1; cuoi := n; TK := false; While(dau<=cuoi) and Not TK Do Begin giua :=(dau + cuoi) div 2; if a[giua] > k then tk := true else if a[giua] > k then cuoi := giua -1 Trang Lop11.com (7) Bộ môn: Tin học HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH NỘI DUNG BÀI GIẢNG else dau := giua + 1; end; if TK then write (‘chi so la:’ giua) else write (‘khong tim thay’); readln GV quay lại ví dụ nhu cầu lưu trữ liệu dạng bảng để các em nhận nhu cầu phải sử dụng mảng hai chiều lập trình GV: khai báo mảng chiều cần chú ý điều gì? HS: Tìm câu trả lời, GV gợi ý để các em số mảng, số dòng, số cột và kiểu phần tử GV: Võ Quốc Dũng end Kiểu mảng hai chiều: ¯ Mảng hai chiều là bảng các phần tử cùng kiểu Với mảng hai chiều ta quan tam đến: ¯ Tên kiểu mảng hai chiều ¯ Số lượng phần tử chiều mảng ¯ Kiểu liệu phần tử ¯ Cách khai báo biến mảng chiều ¯ Cách truy cập vào phần tử mảng a) khai báo mảng hai chiều ¯ Trong ngôn ngữ Pascal, mảng hai chiều khai báo sau: Cách 1: Khai báo tực tiếp Var <tên mảng> : Array [kiểu số dòng, kiểu số cột of < kiểu phần tử>; Cách 2: khai báo gián tiếp thông qua khai báo kiểu mảng Type <tên kiểu mảng> = Array [kiểu số dòng, kiểu số cột of < kiểu phần tử>; Var <tên mảng> : <tên kiểu mảng>; Ví dụ Khai báo biến mảng thông qua kiểu mảng: Type ArrayInteger = Array[1…10,1…15] of Integer; ArrayReal = Array[1 50, 1…100] ofReal; Var A : ArrayInteger; B: ArrauyReal; Trang Lop11.com (8) HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH mảng NỘI DUNG BÀI GIẢNG GV: gọi số HS lên khai báo số biến mảng chiều theo yêu cầu giáo viên Minh họa hình ảnh mảng chiều và số các phần tử mảng hai chiều cách viết truy cập phần tử mảng GV cho HS quan sát chương trình và giải thích các lệnh chương trình, chú ý sâu vào các lệnh lặp để các em nhận thường thì ta sử dụng vòng lặp for – để duyệt qua các phần tử mảng GV nên soạn sẵn chương trình và cho các em quan sát chương trình và chạy thử chươ8ng trình tren máy để các em tiện theo dõi Program Timkiem; Uses crt; Var A : Array[1 100, 1…100] of Integer; i,j, n, m: byte; k, d:integer; begin clrscr; write(‘nhap so dong so cot cua mang:’); readln(m,n); for i := to m for j := to n begin Khai báo mảng trự tiếp: Var A : Array[1 10,1…15] of Integer; B : Array[1 50,1…100] of Real; Cách truy cập vào phần tử mảng hai chiều: <tên mảng>[chỉ số dòng, số cột] Ví dụ: A[1,3], B[23,66]; b) số ví dụ: Ví dụ: Chương trình sau đưa màn hình bảng cửu chương Program cuuchuong; Uses crt; Var A : Array[1 9,1…9] of Integer; i, j : Byte; begin clrscr; for i:= to for j := to A[i,j] := i*j; For i := to Begin For j := 1to Write (a[i,j]:4; Writeln; Writeln; End; Readln End Ví dụ Chương trình sau nhập vào mảng chiều và số nguyên k, sau đó in các phần tử có giá trị nhỏ k mảng Trang Lop11.com (9) Bộ môn: Tin học HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH write(‘A[‘,i,’,’,j’]=’); readln(A[i,j]) end; write(‘mảng vua nhap vao la:’); writeln; for i:= 1to n write(a[i,j]:4); writeln; writeln; end; write (‘nhap gia tri k:’); readln (k); d := 0; for i := to m for j := to n if a[i,j] < then begin write (a[i,j]:8); d := d + 1; end; if d = then write (‘khong co phan tu nho hon’,k); readln end NỘI DUNG BÀI GIẢNG IV CỦNG CỐ DẶN DÒ - Nhắc lại số khái niệm Nhắc lại cấu trúc câu lệnh cách thia bảng thành phần đồng thời gọi HS lên bảng viết lại các cách thông báo, truy xuất và hiển thị để nhập liệu Ra bài tập nhà GV: Võ Quốc Dũng Trang Lop11.com (10)