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 một chiều . Thực hiện được khai báo mảng, truy cập, tính toán các phần tử của mảng .
Chương IV : KIỂU DỮ LIỆU CÓ CẤU TRÚC Bài 11 : KIỂU MẢNG I MỤC ĐÍCH, YÊU CẦU : Hiểu khái niệm mảng chiều hai chiều Hiểu cách khai báo truy cập đến phần tử mảng Cài đặt thuật toán số 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 tốn phần tử mảng II PHƯƠNG PHÁP, PHƯƠNG TIỆN : 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 III LƯU Ý SƯ PHẠM : Cần cho học sinh thấy cần phải có kiểu liệu mới, ích lợi kiểu liệu đó, minh họa hình ảnh Khi làm việc với mảng, học sinh khó hiểu cách truy xuất tới phần tử mảng Cần làm rõ khái niệm : đánh số phần tử mảng, số, kiểu số IV NỘI DUNG BÀI GIẢNG : HOẠT ĐỘNG CỦA GIÁO VIÊN VÀ HỌC SINH Ổ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, giáo viên đưa số vấn NỘI DUNG đề cần giải sau : Có thể sử dụng ví dụ SGK để Với kiểu liệu biết, làm học sinh dễ theo dõi, gõ trước để : chương trình để sử dụng cho phần - Lưu trữ xử lý dãy số ? - Lưu trữ xử lý Họ tên người ? - Lưu trữ xử lý bảng kết thi tốt nghiệp ? HS : Đưa phương án để trả lời cho câu hỏi Trong lập trình thường có loại GV : Các ngơn ngữ lập trình thường cung cấp mảng : - Mảng chiều số kiểu liệu xây dựng từ - Mảng hai chiều kiểu liệu chuẩn gọi kiểu liệu có cấu trúc Chương tìm hiểu số Kiểu mảng chiều kiểu liệu ngôn ngữ Pascal để trả lời - Mảng chiều dãy hữu câu hỏi hạn phần tử có kiểu, mảng đặt tên phần tử mang GV : Đưa ví dụ, cần lập lập trình xử lý Để mô tả mảng dãy số nguyên, tìm cách lưu trữ dãy số chiều ta cần xác định kiểu phần tử cách đánh số nguyên lập trình ? phần tử Bằng cách để lưu trữ thông tin Với mảng chiều ta quan tâm dạng bảng lập trình ? đến : HS : Đưa ý kiến - Tên mảng chiều - Số lượng phần tử mảng GV : Đánh giá ý kiến học sinh, sau đưa mục đích việc sử dụng cấu trúc mảng - Kiểu liệu phần tử chương trình - Cách khai báo biến mảng chiều GV : Đưa khái niệm mảng chiều - Cách truy cập vào phần số yếu tố liên quan lập trình nói chung tử mảng Xét ví dụ : Nhập vào nhiệt độ trung bình ngày tuần Tính đưa hình nhiệt độ trung bình GV : Đi sâu phân tích hai chương trình tuần đếm số ngày có nhiệt học sinh nhận thấy tiện lợi sử dụng mảng độ lớn nhiệt độ trung bình Quan sát hai chương trình viết ngơn ngữ Pascal để giải toán - Chương trình : Khơng sử HS : Trong giáo viên phân tích hai chương dụng kiểu mảng trình, học sinh đưa ý kiến nhận xét - Chương trình : Sử dụng chương trình kiểu mảng chiều a> Khai báo mảng chiều Trong ngôn ngữ Pascal, mảng chiều khai báo hai cách sau : Cách : GV : Đưa cách khai báo mảng chiều Var : Array[kiểu ngôn ngữ Pascal, giải thích ý nghĩa số] of ; từ khóa Cách : GV : Khai báo cách tiện lợi ? Type = Array [] of ; Var : HS : Thường học sinh trả lời cách tiện lợi ; ? Trong : - Type từ khóa dùng để khai GV : Tùy trường hợp cụ thể mà ta dùng cách báo biến, Array từ khóa để hay cách thông thường ta sử dụng cách khai báo mảng - Kiểu số thường đoạn số nguyên liên tục có n1 n2, với n1 số đầu n2 số cuối GV : Sử dụng sồ hình ảnh trực quan minh - Kiểu thành phần kiểu liệu họa cho học sinh cấu trúc mảng số của phần tử mảng phần tử - Để truy cập vào phần tử mảng ta viết : Chỉ số Giá 53 trị 81 62 18 26 41 24 Đưa số khai báo mảng Pascal 53 - [Chỉ số] Ví dụ : A[20] Truy cập phần tử mang số 20 mảng A Ví dụ : Khai báo biến mảng thông qua kiểu mảng : Type ArrayInteger=Array[1 100] of Integer; ArrayReal=Array[1.50] of Real; Var A : Array[1 50]; B : Array[1 50] of Real; Khai báo mảng trực tiếp : Var A : Array[1 100] of Integer ; B : Arrat[1 50] of Real ; b> Một số ví dụ : Ví dụ : Tìm phần tử lớn dãy số nguyên GV : Đưa ví dụ - Input : Số nguyên dương N dãy số A1, A2, … , AN HS : Xây dựng thuật toán để giải toán (thuật - Output : Chỉ số giá trị số toán học lớp 10) lớn dãy - Ý tưởng : + Đặt số A1 số lớn (max) GV soạn sẵn chương trình cho học sinh quan + Cho i lặp từ đến N, sát chương trình A[i]> đổi max = A[i] vả lưu lại vị trí i Chương trình sau : Nếu có nhiều thời gian, giáo viên tiến hành soạn chương trình từ đầu để học sinh dễ Program timmax ; dàng nhận thao tác cần phải thực Uses crt ; viết chương trình var a : array[1 250] of integer ; n,i,max,csmax : Integer ; Begin clrscr ; Write('Nhap n = ') ; Readln(n) ; For i := to n Begin Write('a[',i,'] = ') ; readln(a[i]) ; End ; max := a[i] ; csmax := ; 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 ptu lon nhat : ',csmax) ; Readln ; End Ví dụ : Sắp xếp dãy số nguyên GV : Đưa ví dụ, nhắc lại ý tưởng thuật theo thuật toán tráo đổi toán - Input : Số nguyên dương N dãy số A1, A2, …, AN - Output : Dãy A xếp HS : Xây dựng thuật toán để giải toán (thuật theo thứ tự khơng giảm tốn học lớp 10) - Ý tưởng : + Đổi để đưa số lớn vị trí cuối GV soạn sẵn chương trình cho học sinh + Làm tương tự quan sát chương trình số cịn lại Chương trình sau : Nếu có thời gian, giáo viên tiến hành soạn chương trình từ đầu để học sinh dễ dàng Program sapxep ; nhận việc chuyển đổi ngôn ngữ từ ngơn ngữ Uses crt ; thuật tốn sang ngơn ngữ lập trình 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 ; End Writeln('chi so ptu lon nhat : ',csmax); readln ; End Ví dụ : Tìm kiếm nhị phân 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 toán (thuật toán học lớp 10) GV soạn sẵn chương trình cho học sinh quan - 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 thấy sát chương trình - Ý tưởng : Xem lại thuật tốn tìm kiếm nhị phân SGK lớp 10 Nếu có thời gian, giáo viên tiến hành soạn Chương trình sau : chương trình từ đầu để học sinh dễ dàng nhận việc chuyển đổi ngôn ngữ từ ngôn ngữ Program sapxep ; thuật tốn sang ngơn ngữ lập trình Uses crt ; var A : Array[1 250] of integer ; n,i,k : Integer ; dau,cuoi,giua : Integer ; TK : boolean ; Begin clrscr ; Write('Nhap so ptu mang n = ') ; Readln(n) ; For i := to n Begin Write('A[',i,'] = ') ; readln(A[i]) ; End ; Write('nhap so can tim k : ') ; Readln(k); dau := ; cuoi := n ; TK := false ; while (dau k then cuoi := giua Else dau := giua + ; End ; If TK then write('Chi so la : ',giua) else write(' Khong tim thay '); readln ; End GV : Quay lại ví dụ lưu trữ liệu dạng bảng để em nhận nhu cầu phải sử dụng mảng chiều lập trình Kiểu mảng chiều : - Mảng hai chiều bảng phần tử kiểu Với mảng hai chiều ta quan tâm đến : GV : Khai báo cách tiện lợi (tương tự mảng chiều) ? HS : Thường học sinh chọn cách - 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 hai 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ảnh hai chiều khai báo sau : GV : Tùy theo trường hợp cụ thể thường Cách : Khai báo trực tiếp cách hay dùng Var : : Array[kiểu số dòng, kiểu số cột] of < kiểu phần tử> ; Cách : Khai báo gián tiếp thông qua khai báo kiểu mảng Type = Array[kiểu số dòng, kiểu số cột] of ; Var : ; GV : Khi khai báo mảng chiều cần ý điều ? HS : Tìm câu trả lời, GV gợi ý để em Ví dụ : số mảng, số dịng, số cột kiểu Khai báo biến mảng thơng qua phần tử mảng kiểu mảng : Type ArrayInteger = Array[1 10,1 15] of Integer ; ArrayReal=Array[1 50,1 100] of Real ; GV : Gọi số học sinh lên khai báo số biến mảng chiều theo yêu cầu giáo viên Var A : ArrayInteger ; B : ArrayReal ; Khai báo mảng trực tiếp : Minh họa hình ảnh mảng chiều số Var A : Array[1 10,1 15] og phần tử mảng hai chiều cách viết Integer ; truy cập phần tử mảng B : Aarray[1 50,1 100] og Real ; Cách truy cập vào phần tử mảng hai chiều : GV cho học sinh quan sát chương trình giải [chỉ số dịng, số thích lệnh chương trình, ý sâu cột] vào lệnh lặp để em nhận thường ta sử dụng vịng lặp for - để duyệt qua Ví dụ : A[1,3], B[23,66],…… phần tử mảng b> Một số ví dụ : GV nên soạn sẵn chương trình cho em Ví dụ : quan sát chương trình, chạy thử chương trình Chương trình sau đưa hình máy để em tiện theo dõi bảng cửu chương Program Timkiem; Uses crt; var A : Array[1 100,1 100] of Integer; i,j,n,m : Byte ; k,d : integer ; Program cuuchuong; Uses crt ; var A : Array[1 9,1 9] of Integer ; i, j : Byte ; Begin Clrscr ; Write(' Nhap so dong, so cot cua mang : ') ; Readln(m,n); For i := to m For j := to n Begin Write(' A[',i,',',j,'] = '); Readln(A[i,j]); End ; Writeln(' Mang vua nhap vao la : '); Writeln; For i := to m Begin For j := to n Write(a[i,j]:4) ; Writeln; Writeln; End; Write(' Nhap gia tri k : '); Readln(k) ; d := ; For i := to m For j := to n If a[i,j] < k then Begin write('So nho hon ',k,' la '); write(a[i,j]:8); d := d+1 ; End ; If d = then Write('Khong co ptu nao nho hon ',k); readln; End Begin Clrscr ; Writeln('Bang cuu chuong -> : '); Writeln ; For i := to For j := to A[i,j] := i*j ; For i := to Begin For j := to 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 số nguyên k, sau in phần tử có giá trị nhỏ k mảng V CỦNG CỐ: Nhắc lại số khái niệm Nhắc lại cấu trúc câu lệnh cách chia bảng thành phần đồng thời gọi học sinh lên bảng viết lại cách khai báo, truy xuất, hiển thị để nhập liệu Ra tập nhà ... chuẩn gọi kiểu liệu có cấu trúc Chương tìm hiểu số Kiểu mảng chiều kiểu liệu ngôn ngữ Pascal để trả lời - Mảng chiều dãy hữu câu hỏi hạn phần tử có kiểu, mảng đặt tên phần tử mang GV : Đưa ví... ý nghĩa số] of ; từ khóa Cách : GV : Khai báo cách tiện lợi ? Type = Array [ ] of ; Var : HS : Thường học sinh... thường Cách : Khai báo trực tiếp cách hay dùng Var : : Array [kiểu số dòng, kiểu số cột] of < kiểu phần tử> ; Cách : Khai báo gián tiếp thông qua khai báo kiểu mảng Type