I. MỤC TIÊU BÀI HỌC:
1. Kiến thức: -HS 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.
2. Kỹ năng:
-Cài đặt được thuật toán giải 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.
II. CHUẨN BỊ:
1. Tài liệu, bài tập: SGK, SGV.
2. Dụng cụ, thiết bị:
III. TIẾN TRÌNH LÊN LỚP:
1. Ổ định, tổ chức lớp: CBL báo cáo sĩ số.
2. Kiểm tra bài cũ: Không.
3. Bài giảng:
Ngày soạn: 10/01/2008 Chương IV: KIỂU DỮ LIỆU CÓ CẤU TRÚC Bài: §11. KIỂU MẢNG (Tiết PPCT: 21) I. MỤC TIÊU BÀI HỌC: 1. Kiến thức: -HS 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. 2. Kỹ năng: -Cài đặt được thuật toán giải 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. II. CHUẨN BỊ: 1. Tài liệu, bài tập: SGK, SGV. 2. Dụng cụ, thiết bị: III. TIẾN TRÌNH LÊN LỚP: 1. Ổ định, tổ chức lớp: CBL báo cáo sĩ số. 2. Kiểm tra bài cũ: Không. 3. Bài giảng: Hoạt động của Thầy và Trò Nội dung ghi bảng Hoạt động 1: -Nội dungHĐ: Tìm hiểu ý nghĩa của mảng một chiều. -Mục tiêu: HS biết được ý nghĩa và sự cần thiết của kiểu mảng một chiều trong việc giải quyết một số bài toán. Biết được khái niệm của mảng một chiều. -Các bước tiến hành: GV: Cho HS xem ví dụ trong SGK tr.53: GV giải thích: -Nếu số ngày khá lớn (N=365 ngày) thì cách làm tương tự, nhưng đòi hỏi phải khai báo nhiều biến và đoạn chương trình viết khá dài. -Để khắc phục những hạn chế trên, người ta thường ghép chung 7 biến trên thành một dãy và đặt cho nó chung một tên và đánh số cho một phần tử mộ chỉ số. -GV viết chương trình giải bài toán tổng quát với N ngày lên bảng. HS: Chú ý lắng nghe và ghi chép. GV yêu cầu HS tham khảo SGK và hỏi: Em hiểu như thế nào về mảng một chiều? HS: Trả lờ câu hỏi. GV: Để mô tả mảng một chiều, ta cần xác định những yếu tố nào? HS: Trả lờ câu hỏi. GV: Để xây dựng và sử dung kiểu mảng một chiều, các NNLT đều có quy tắc cho phép xác định: Tên mảng, số lượng phần tử, cách khai báo một biến mảng và cách tham chiếu đến từng phần tử của mảng. HS: chú ý lắng nghe. Hoạt động 2: -Nội dungHĐ: Tạo kiểu mảng một chiều và khai báo biến mảng. -Mục tiêu: HS biết được cách tạo kiểu dữ liệu mảng một chiều trong NNLT Pascal, biết cách khai báo biến và tham chiếu đến từng phần tử của mảng. -Các bước tiến hành: GV: Yêu câu HS nghiên cứu SGK và cho biết cách tạo kiểu dữ liệu mảng một chiều trong NNLT Pascal. HS: Trình bày cách tạo kiểu dữ liệu mảng một chiều trong NNLT Pascal. GV: Đưa ra hai cách khái báo mảng một chiều trong ngơn ngữ Pascal, giải thích ý nghĩa của các từ khĩa mới. HS: Chú ý theo dõi. GV chú ý cho HS: -Phân biệt được giữa tên biến và tên kiểu mảng trong khai báo. VD: A: tên biến mảng; ArrInt: tên kiểu mảng. -GV: Trong VD trên, dung lượng bộ nhớ của biến A là bao nhiêu? -HS: Biến A chiếm 200 byte bộ nhớ. GV: Hướng dẫn tham chiếu đến các phần tử của mảng, đưa ra ví dụ: tham chiếu tới nhiệt độ của ngày trong tuần. Chỉ số i 1 2 ... 6 7 Tên biến mảng Nhietdo 22.5 25.0 ... 27.0 26.5 HS: Quan sát lắng nghe và trả lời. Hoạt động 3: -Nội dungHĐ: Rèn luyện kĩ năng sử dụng kiểu mảng một chiều. -Mục tiêu: HS sử dụng được biến kiểu mảng một chiều để giải bài toán: Tìm phần tử lớn nhất, Tìm kiếm và Sắp xếp. -Các bước tiến hành: VD1: SGK tr.56 HS: Đọc nội dung VD1 GV gợi ý HS: Nhắc lại thuật tốn tìm phần tử lớn nhất của dãy số đã học ở lớp 10. HS: Nêu các bước: B1: Nhập N và dãy A1,A2,..,AN. B2: Max f A1, i f 2; B3: Nếu i >N thì đưa giá trị Max và kết thúc; B4: B4.1: Nếu Ai > Max thì Max fAi. B4.2: i f i+1. Quay lại B3. GV: Hướng dẫn HS viết chương trình HS cùng GV thực hiện. *VD2: SGK tr.57 HS: Đọc nội dung VD2 GV gợi ý HS: Nhắc lại thuật toán Sắp xếp dãy số nguyên bằng thuật tốn tráo đổi, đã học ở lớp 10. HS: Nêu các bước: B1: Nhập N và các số hạng A1, A2,, AN; B2: M ¬ N; B3: Nếu M < 2 thì đưa ra dãy A đã được sắp xếp rồi kết thúc; B4: M ¬ M – 1; i ¬ 0; B5: i ¬ i + 1; B6: Nếu i > M thì quay lại B3; B7: Nếu Ai > Ai+1 thì tráo đổi Ai và Ai+1 cho nhau; B8: Quay lại B5. GV: Hướng dẫn HS viết chương trình HS cùng GV thực hiện. *VD3: SGK tr.58 HS: Đọc nội dung VD3 GV gợi ý HS: Nhắc lại thuật toán Tìm kiếm nhị phân, đã học ở lớp 10. HS: Nêu các bước: B1: Nhập N; A1, A2, . . ., AN và khoá k; B2: Đầu ¬ 1; Cuối ¬ N; B3: Giữa ¬ ; B4: Nếu AGiữa = k thì thông báo chỉ số Giữa, rồi kết thúc; B5: Nếu AGiữa > k thì đặt Cuối ¬ Giữa – 1, rồi chuyển sang B7; B6: Đầu ¬ Giữa + 1; B7: Nếu Đầu > Cuối thì thông báo dãy A không có số hạng có giá trị bằng k, rồi kết thúc; B8: Quay lại B3. GV: Hướng dẫn HS viết chương trình HS cùng GV thực hiện. 1/Kiểu mảng một chiều: Xét Ví dụ: SGK tr.53. Sử dụng kiểu dữ liệu mảng một chiều để mô tả dữ liệu và chương trình được viết như sau: Program NhietDo_Nngay; Const Max =7; Type Kmang1 = Array[1 . . Max] of real; Var Nhietdo: Kmang1; Dem, i, N: byte; Tong, TB: real; Begin Writeln(‘Nhap vao so ngay: ‘); readln(N); Tong := 0; For i:=1 to N do Begin Write(‘nhap nhiet do ngay’, i ,’: ’); Readln(Nhietdo[i]); Tong := Tong + Nhietdo[i]; End; Dem := 0; TB := Tong/N; For i:=1 to N do If Nhietdo[i] > TB then dem:= dem +1; Writeln(‘Nhiet do TB’ ,N , ‘ngay’, TB:8:2); Writeln(‘So ngay co nh.do cao hon TB:’, dem); Readln End. -Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu. -Mảng được đặt tên và mỗi phần tử trong mảng có cùng chung một tên và phân biệt nhau bởi chỉ số. -Để mơ tả mảng một chiều cần xác định kiểu của các phần tử và cách đánh số các phần tử của nĩ. -Hầu hết các NNLT đều có quy tắc cho phép xác đinh: +Tên mảng một chiều; +Số lượng phần tử; +Kiểu dữ liệu của phần tử; +Cách khai báo biến mảng; +Cách tham chiếu đến phần tử. a/ Khai báo: Khai báo biến mảng một chiều có dạng: -Khai báo trực tiếp biến mảng một chiều: Var : Array[kiểu chỉ số] of ; -Khai báo gián tiếp biến mảng qua kiểu mảng một chiều: Type = Array[kiểu chỉ số] of ; Var : ; Trong đĩ: Kiểu chỉ số là một đoạn số nguyên (hoặc đoạn kí tự) liên tục cĩ dạng n1..n2 với n1,n2 là các hằng hoặc các biểu thức xác định chỉ số đầu và chỉ số cuối (n1<= n2) Kiểu phần tử là kiểu của các phần tử mảng. * Ví dụ: - Khai báo gián tiếp biến mảng qua kiểu mảng một chiều: Type ArrInt=Array[1..100] of Integer; Var A: ArrInt; - Khai báo trực tiếp biến mảng một chiều: Var A: Array[1..100] of Integer; -Dung lượng bộ nhớ của biến A là: 100(phần tử)x2(byte) = 200 byte. *Để tham chiếu đến phần tử của mảng một chiều ta cần xác định: [chỉ số] . VD: -Tham chiếu tới ngày thứ 1 của tuần: Nhietdo[1] là 22.5 (phần tử ở vị trí thứ 1 của mảng Nhietdo); -Tham chiếu tới ngày thứ 2 của tuần: Nhietdo[2] là 25.0 (phần tử ở vị trí thứ 2 của mảng Nhietdo); -. . . -Tham chiếu tới ngày thứ i của tuần: -Nhietdo[i] (phần tử ở vị trí thứ i của mảng Nhietdo). b/ Một số ví dụ: VD1: Tìm phần tử lớn nhất của dãy số nguyên Chương trình được viết như sau: program TimMax; uses crt; const Nmax = 250; type ArrInt = array[1..Nmax] of integer; var N, i, Max, csmax : integer; A: ArrInt; BEGIN clrscr; write('Nhap so phan tu cua day so, N = '); readln(N); for i := 1 to N do begin write('Phan tu thu ', 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 cua day la: ', Max); writeln('Chi so phan tu lon nhat la: ', csmax); readln END. Ví dụ 2: Sắp xếp dãy số nguyên bằng thuật tốn tráo đổi. - Input: Số nguyên dương N và dãy số A1, A2, , AN. - Output: Dãy số A được sắp xếp theo thứ tự tăng. Chương trình: PROGRAM Sap_xep; uses Crt; const Nmax = 250; TYPE ArrInt = ARRAY[1..NMax] OF integer; var N, i, j, t : integer; A: ArrInt; BEGIN clrscr; write('Nhap so phan tu cua day so, N = '); readln(N); for i:=1 to n do begin write('Phan tu thu ', i,' = '); readln(A[i]); end; writeln('Day so da cho la: '); for i:= 1 to N do write(A[i]:4); writeln; for j:= N downto 2 do for i:= 1 to j -1 do if A[i] > A[i+1] then begin t:=A[i]; A[i]:=A[i+1]; A[i+1]:=t; end; writeln('Day so duoc sap xep la: '); for i:= 1 to N do write(A[i]:4); readln END. *VD3: Tìm kiếm nhị phân. -Input: Dãy số A1, A2, , AN. đã được sắp xếp tăng dần (N <= 250). -Output: Chỉ số i mà A[i] = hoặc thơng báo “Khơng tìm thấy ” Nếu khơng cĩ A[i] nào của dãy bằng k Chương trình: PROGRAM tk_nhi_phan; uses Crt; const Nmax = 250; type ArrInt = ARRAY[1..NMax] OF integer; var N, i, k, t, dau, cuoi, giua : integer; A: ArrInt; tim_thay: Boolean; BEGIN clrscr; write('Nhap so phan tu cua day so, N = '); readln(N); writeln('Nhap cac ph.tu theo thu tu tang dan'); for i:=1 to n do begin write('Phan tu thu ', i,' = '); readln(A[i]); end; writeln; write('Nhap gia tri can tim , k = '); readln(k); dau:=1; cuoi:=N; tim_thay:=false; while (dau<=cuoi) and not (tim_thay) do begin giua:=(dau + cuoi) div 2; if A[giua] = k then tim_thay:= true else if A[giua] > k then cuoi:= giua - 1 else dau:=giua + 1; end; if tim_thay then writeln('Chi so la', giua) else writeln('Khong tim thay'); readln END. 4.Tổng kết nội dung, đánh giá cuối bài: -Cách tạo mảng một chiều và cách khai báo biến. TYPE = ARRAY[kiểu chỉ số] OF ; VAR : ; -Tham chiếu đến từng phần tử: [chỉ số] 5.Dặn dò, kế hoạch học tập tiết sau: -Học bài và làm bài: 1 đến 7 SGK tr.79; -Đọc trước nội dung về kiểu mảng hai chiều. IV. NHỮNG VẤN ĐỀ CẦN RÚT KINH NGHIỆM: Bài: §11. KIỂU MẢNG (tt) (Tiết PPCT: 22) III. TIẾN TRÌNH LÊN LỚP: 1. Ổ định, tổ chức lớp: CBL báo cáo sĩ số. 2. Kiểm tra bài cũ: Nêu cách khai báo biến mảng một chiều và cho ví dụ? 3. Bài giảng: Hoạt động của Thầy và Trò Nội dung ghi bảng Hoạt động 1: -Nội dungHĐ: Tìm hiểu ý nghĩa của mảng hai chiều. -Mục tiêu: HS biết được ý nghĩa và sự cần thiết của mảng hai chiều trong việc giải quyết một số bài toán. -Các bước tiến hành: GV: Giới thiệu Bài toán trong SGK và yêu cầu HS đưa ra khái niệm về mảng hai chiều. HS: Nghiên cứu SGK và trả lời. GV: Để mô tả mảng hai chiều, ta cần xác định những yếu tố nào? HS: Trả lờ câu hỏi. GV: Tương tự như mảng một chiều, để xây dựng và sử dung kiểu mảng hai chiều, các NNLT đều có quy tắc cho phép xác định những yếu tố nào? HS: chú ý lắng nghe và trả lời câu hỏi. Hoạt động 2: -Nội dungHĐ: Tạo kiểu mảng hai chiều và khai báo biến mảng. -Mục tiêu: HS biết được cách tạo kiểu dữ liệu mảng hai chiều trong NNLT Pascal, biết cách khai báo biến và tham chiếu đến từng phần tử của mảng. -Các bước tiến hành: GV: Yêu câu HS nghiên cứu SGK và cho biết cách tạo kiểu dữ liệu mảng hai chiều trong NNLT Pascal. HS: Trình bày cách tạo kiểu dữ liệu mảng hai chiều trong NNLT Pascal. GV: Yêu cầu HS cho VD khai báo biến mảng hai chiều. HS: Cho VD. GV: Giới thiệu cách tham chiếu đến phần tử của mảng hai chiều. HS: Chú ý theo dõi. Hoạt động 3: -Nội dungHĐ: Rèn luyện kĩ năng sử dụng kiểu mảng hai chiều. -Mục tiêu: HS sử dụng được biến kiểu mảng hai chiều để giải bài toán đơn giản. -Các bước tiến hành: *VD1: SGK tr.61 GV hướng dẫn HS: Viết chương trình tính và đưa ra màn hình bảng nhân. HS: Thực hiện theo yêu cầu của GV. *VD2: SGK tr.62 HS: Đọc nội dung VD2. GV: Yêu cầu HS xác định input, output. HS: Xác định input và output của bài toán. GV hướng dẫn HS: Viết chương trình tính và đưa ra màn hình bảng nhân. HS: Thực hiện theo yêu cầu của GV. 2/ Kiểu mảng hai chiều: Xét bài toán tính và đưa ra màn hình bảng nhân (SGK tr.59) -Mảng hai chiều làbảng các phần tử cùng kiểu. -Nhận xét: Nếu coi mỗi hàng của mảng hai chiều là một phần tử thì ta có thể nói mảng hai chiều là mảng một chiều mà mỗi phần tử là mảng một chiều. -Hầu hết các NNLT đều có quy tắc cho phép xác đinh: +Tên kiểu mảng hai chiều; +Số 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; +Cách tham chiếu đến phần tử. a/ Khai báo: Khai báo biến mảng hai chiều trong Pascal: *Khai báo trực tiếp biến mảng hai chiều: VAR : ARRAY [kiểu chỉ số hàng, kiểu chỉ số cột] OF ; VD: Var B : ARRAY[1 . . 9, 1 . . 10] OF integer; *Khai báo gián tiếp biến mảng qua kiểu mảng hai chiều: TYPE = ARRAY [kiểu chỉ số hàng, kiểu chỉ số cột] OF ; VAR : ; VD: TYPE mang_2_chieu = ARRAY[1 . . 9, 1 . . 10] OF integer; VAR B : mang_2_chieu; -Tham chiếu đến phần tử của mảng hai chiều: Tên_biến_mang[chỉ số hàng, chỉ số cột] VD: B[i, j] là phần tử ở hàng i, cột j của mảng B B[1, 2] là phần tử ở hàng 1, cột 2 của mảng B; B[2, 1] --------------------- 2, ---- 1 --------------; b/ Một số ví dụ: VD1: SGK tr.61 PROGRAM Bang_Nhan; uses crt; var B : ARRAY[1 . . 9, 1 . . 10] OF integer ; i, j : integer ; BEGIN clrscr ; for i := 1 to 9 do for j := 1 to 10 do B[i, j] := i*j ; for i := 1 to 9 do begin for j := 1 to 10 do write(B[i, j]); writeln; end; readln END. VD2: (SGK tr.62) PROGRAM Mang_Hai_Chieu; var B: ARRAY[1 . . 5, 1 . . 7] OF integer ; d, i, j, k : integer ; BEGIN writeln(‘Nhap cac phan tu cua mang’) ; for i := 1 to 5 do begin for j := 1 to 7 do read(B[i, j]) ; writeln; end; write(‘Nhap vao gia tri k = ‘); readln(k); for i := 1 to 5 do for j := 1 to 7 do if B[i, j] < k then begin write(B[i, j], ‘ ‘); d:= d + 1; end; if d=0 then writeln(‘Khg co p.tu nao nho hon’, k); readln END. 4.Tổng kết nội dung, đánh giá cuối bài: -Cách tạo mảng hai chiều và cách khai báo biến. TYPE = ARRAY[kiểu chỉ số hàng, kiểu chỉ số cột]OF ; VAR : ; -Tham chiếu đến từng phần tử: [chỉ số] 5.Dặn dò, kế hoạch học tập tiết sau: -Học bài và làm bài: 8, 9 SGK tr.79-80; -Xem trước Bài tập và thực hành 3. IV. NHỮNG VẤN ĐỀ CẦN RÚT KINH NGHIỆM:
Tài liệu đính kèm: