I. Mục đích yêu cầu
- KT:
+ Củng cố thuật toán sắp xếp cơ bản mà học sinh đã học ở lớp 10;
+ Minh họa, củng cố và nâng cao những hiểu biết của học sinh trong tiết 19 về mảng một chiều (cấu trúc, cách khai báo, cách tham chiếu một phần tử và lợi ích của kiểu mảng một chiều);
- KN: Vận dụng kiểu mảng một chiều trong cài đặt chương trình.
II. Chuẩn bị bài giảng:
1/ GV: bài giảng tiết 23; SGK, SGV; Thuật toán bài toán sắp xếp phóng lớn;
2/ HS: tìm hiểu trước bài toán sắp xếp đã giới thiệu L10;
Tiết 23 KIỂU MẢNG VÀ BIẾN CÓ CHỈ SỐ (t3) I. Mục đích yêu cầu - KT: + Củng cố thuật toán sắp xếp cơ bản mà học sinh đã học ở lớp 10; + Minh họa, củng cố và nâng cao những hiểu biết của học sinh trong tiết 19 về mảng một chiều (cấu trúc, cách khai báo, cách tham chiếu một phần tử và lợi ích của kiểu mảng một chiều); - KN: Vận dụng kiểu mảng một chiều trong cài đặt chương trình. II. Chuẩn bị bài giảng: 1/ GV: bài giảng tiết 23; SGK, SGV; Thuật toán bài toán sắp xếp phóng lớn; 2/ HS: tìm hiểu trước bài toán sắp xếp đã giới thiệu L10; III. Nội dung và tiến trình bài giảng. 1. Ổn định lớp (1’) ; 2. Kiểm tra bài cũ (15’): - GV hỏi: Câu hỏi 1: Khai báo mảng số thực gồm 50 phần tử bằng 2 cách đã học? Câu hỏi 2: Viết đoạn chương trình nhập vào mảng B gồm 45 phần tử chỉ số bắt đầu từ 1? Câu hỏi 3: Qua 2 ví dụ đã họcvà thực hành. Cho nhận xét về cách giải quyết 2 chương trình: Bài toán VD1tr 56: chương trình Tim_Max; Bài toán 2 Bài 2 chương trình MaxElement; - HS lên bảng trả lời: - GV nhận xét và cho điểm. 3. Nội dung bài giảng: Hoạt động của thầy và trò Nội dung bài giảng §11 KIỂU MẢNG VÀ BIẾN CÓ CHỈ SỐ -GV lưu ý HS hàm Random qua VD1 BT&TH3. Random(n) sinh số nguyên ngẫu nhiên từ 0 -> n-1. Khi không cần chính xác về số liệu, có thể sử dụng hàm sinh số ngẫu nhiên để không mất thời gian nhập mảng (số lượng lớn). -HS theo dõi và ghi bài. Chú ý: đoạn chương trình nhập vào mảng B gồm 45 phần tử chỉ số bắt đầu từ 1? For I := 1 to 45 do Begin Write(‘Nhap phan tu thu ‘,I,’ : ’) ; readln(B[i]) ; End ; Hoặc For I := 1 to 45 do Begin Write(‘B[‘,I,’] = ’) ; readln(B[i]) ; End ; Hoặc Khởi tạo bộ sinh số ngẫu nhiên như VD1 BT&TH3: Randomize ; For I := 1 to 45 do B[i] := random(300) – random(300) ; -HS tìm hiểu và xác định bài toán: b/ Ví dụ: Ví dụ 2: Sắp xếp dãy số nguyên bằng thuật toán tráo đổi: Xác định bài toán: Input: N (N<=250), A1, A2, , AN (Ai <=500, i= 1, 2, , N) Output: Dãy A được sắp thành dãy không giảm. -GV yêu cầu HS liệt kê thuật toán bài toán. Sau đó treo khổ giấy phóng lớn thuật toán khi đã hoàn thiện câu trả lời. -HS theo dõi thuật toán và viết chương trình vào vở. Nhận biết các bước thuật toán cài đặt trong chương trình. -GV giới thiệu thuật toán và viết chương trình được cài đặt. Thuật toán: A1 A2 A3 AN B1. Nhập số nguyên dương N và dãy số nguyên An; B2. M <- N ; B3. M <- N -1 ; j <- 0 ; B4. Nếu M < 2 thì chuyển đến B8; B5. j <- j + 1 ; B6. Nếu j > M thì quay lại B3; B7. Nếu Aj > Aj+1 thì đổi chỗ 2 phần tử B8. Đưa ra dãy A rồi kết thúc. -GV giải thích lại thuật toán sắp xếp: Bằng cách tìm phần tử lớn nhất sắp về cuối dãy; phần tử lớn thứ 2; phần tử lớn thứ 3...Vì thể thuật toán trên còn gọi là thuật toán nổi bọt. Chương trình bài toán: Program sapxep ; Const nmax = 250 ; Type ArrInt = array[1..100] of integer ; var A : ArrInt ; m, n, i, j : integer ; tg : integer ; Begin {Bước 1} write('Nhap so phan tu mang N= ') ; readln(n) ; For i := 1 to n do Begin write('a[',i,']=') ; readln(a[i]) ; end ; {Thao tác sắp xếp gồm B3 -> B7} m := n-1 ; while not (m<2) do begin for j := 1 to m do if a[j] >a[j+1] then begin tg := a[j] ; a[j] := a[j+1] ; a[j+1] := tg ; End ; m := m-1 ; end ; writeln; {Hiển thị mảng đã sắp xếp lên màn hình} for i := 1 to n do write(a[i] : 4) ; readln end. -HS quan sát kết quả mô phỏng khi thực hiện chương trình. Nhap so phan tu mang N = 5 ¿ A[1] = 5 ¿ A[2] = 6 ¿ A[3] = 10 ¿ A[4] = 11 ¿ A[5] = 4 ¿ 4 5 6 10 11 4. Củng cố bài học và ra BTVN: -GV yêu cầu HS nhận biết củng cố: Khai báo gián tiếp mảng một chiều thông qua định nghĩa kiểu: Const nmax = 250 ; Type ArrInt = array[1..100] of integer ; var A : ArrInt ; Nhập các mảng là nhập từng phần tử mảng: For i := 1 to n do Begin write('a[',i,']=') ; readln(a[i]) ; end ; Duyệt các phần tử mảng để sắp xếp; for j := 1 to m do if a[j] >a[j+1] then begin tg := a[j] ; a[j] := a[j+1] ; a[j+1] := tg ; End ; Duyệt các phần tử mảng để hiển thị từng phần tử: for i := 1 to n do write(a[i] : 4) ; BTVN: Tìm hiểu trước mảng 2 chiều; BTVN: hoàn thành BT đã cho: 5, 6, 7, 8 SGK tr79; Bài làm thêm 4.6 -> 4.15 SBT (tr31->35)
Tài liệu đính kèm: