Giáo án Tin học 11 · Chung, Khoa học máy tính và Tin học ứng dụng
Tin họcLớp 11Phần 6. KHMT · Chủ đề 6. Kĩ thuật lập trình · Chọn định hướng, không bắt buộc THUD

Giáo án Bài 29 · KHMT. Thực hành thiết kế chương trình theo mô đun

Kế hoạch bài dạy theo mẫu Công văn 5512/BGDĐT-GDTrH · 1 tiết (45 phút)

I. Mục tiêu

1. Kiến thức

  • Nêu được vai trò của từng mô đun (hàm phân loại, hàm đếm, hàm xuất) trong chương trình thiết kế theo mô đun.
  • Giải thích được kiểu dữ liệu trả về của hàm phân loại (bool) và cách hàm đếm dùng lại hàm phân loại qua quan hệ gọi hàm.
  • Vận dụng được quy trình kiểm tra: định nghĩa hàm, thử ca biên (0, số âm, dữ liệu rỗng), tích hợp và in kết quả.
  • Viết được hợp đồng cho hàm (đầu vào, đầu ra, quy ước với số 0, số âm và dữ liệu rỗng) và giải thích được vì sao hợp đồng giúp tránh hiểu khác nhau.

2. Năng lực

a) Năng lực chung

  • Tự chủ và tự học: HS tự đọc lại mẫu chương trình, dự đoán kết quả trước khi chạy và tự đối chiếu với kết quả thực thi trên NeoEdu.
  • Giao tiếp và hợp tác: HS trao đổi theo cặp để thống nhất hợp đồng của hàm, trình bày lập luận khi đánh giá đáp án của bạn.
  • Giải quyết vấn đề và sáng tạo: HS sửa hàm phân loại khi đổi quy tắc (chẵn dương) mà không phải viết lại hàm đếm, qua đó thấy lợi ích của việc tách mô đun.

b) Năng lực đặc thù

  • NLa - Sử dụng và quản lí các phương tiện công nghệ thông tin và truyền thông: HS sử dụng trình soạn thảo/IDE Python hoặc trang NeoEdu để viết, chạy và xem kết quả chương trình hai mô đun.
  • NLc - Giải quyết vấn đề với sự hỗ trợ của công nghệ thông tin và truyền thông: HS dùng thực thi chương trình để kiểm tra dự đoán, phát hiện lỗi ở hàm phân loại hoặc hàm đếm và sửa lỗi.
  • NLd - Ứng dụng công nghệ thông tin và truyền thông trong học và tự học: HS dùng bài tập tương tác và ví dụ trên trang bài học NeoEdu để tự ôn luyện sau giờ học.
  • NLe - Hợp tác trong môi trường số: HS chia sẻ mã nguồn và kết quả thử nghiệm trong nhóm qua bảng chung hoặc tệp dùng chung, nhận xét mã của bạn theo hợp đồng đã thống nhất.

3. Phẩm chất

  • Chăm chỉ: HS kiên trì thử nhiều ca kiểm tra, không bỏ qua trường hợp số 0 và số âm khi hoàn thiện chương trình.
  • Trách nhiệm: HS tự kiểm tra và giải thích được kết quả của nhóm mình, không sao chép mã mà không hiểu quy tắc.
  • Trung thực: HS ghi đúng kết quả chạy thực tế, nêu rõ chỗ chưa chắc chắn và khi sửa lỗi thì thừa nhận lỗi của mình.

II. Thiết bị dạy học và học liệu

1. Giáo viên

  • Máy tính, máy chiếu, phần mềm Python 3 hoặc IDE tương đương (đã cài sẵn để chạy thử mẫu).
  • Bảng phụ hoặc bảng tương tác để ghi hợp đồng của hàm và sơ đồ quan hệ gọi hàm.
  • Phiếu học tập số 1 (in hoặc chiếu lên màn hình).
  • Học liệu số NeoEdu: trang bài học có bài giảng, ví dụ và bài tập tương tác tại neoedu.vn/learn/11/informatics/bai-29-khmt-thuc-hanh-thiet-ke-chuong-trinh-theo-mo-dun (dùng ở hoạt động luyện tập và giao về nhà).

2. Học sinh

  • Máy tính có cài Python hoặc truy cập được trình soạn thảo trực tuyến, tài khoản NeoEdu.
  • Vở ghi, bút, giấy nháp để dự đoán kết quả trước khi chạy chương trình.
  • Bút dạ và giấy khổ A3 (hoặc bảng nhóm) để vẽ sơ đồ quan hệ gọi hàm khi cần.

III. Tiến trình dạy học

Hoạt động 1: Mở đầu · 5 phút

Dự đoán kết quả chương trình mẫu

a) Mục tiêu

HS nhớ lại cách viết hàm trả về giá trị logic và cách gọi hàm trong chương trình, từ đó xác định nhiệm vụ của bài thực hành: kiểm tra thành phần và quan hệ gọi của chương trình theo mô đun.

b) Nội dung

GV chiếu chương trình mẫu gồm hàm chan(x) trả về x%2==0, hàm dem_chan(a) đếm phần tử thoả chan và lệnh print(dem_chan([-2,1,0,6])). HS đọc, dự đoán số sẽ được in ra và viết dự đoán vào giấy nháp, sau đó trả lời câu hỏi: Hàm nào chịu trách nhiệm quy tắc chẵn, hàm nào chịu trách nhiệm đếm?

c) Sản phẩm

HS nêu được dự đoán kết quả là 3, vì ba số -2, 0, 6 là chẵn; nêu được hàm chan là mô đun phân loại, hàm dem_chan là mô đun tổng hợp gọi lại hàm chan. GV ghi nhiệm vụ của bài lên bảng: kiểm tra từng mô đun và quan hệ gọi giữa chúng.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV chiếu đoạn mã mẫu và nêu câu hỏi: Trước khi chạy, em dự đoán chương trình in ra số nào? Vì sao?

    Học sinh

    HS đọc đoạn mã, tự suy nghĩ và ghi dự đoán trên giấy nháp.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV yêu cầu HS dùng 1 phút xác định hàm nào kiểm tra điều kiện, hàm nào tổng hợp kết quả.

    Học sinh

    HS làm việc cá nhân, gạch chân biểu thức điều kiện và lệnh gọi hàm trong mã.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 HS trình bày dự đoán và lí do, sau đó chạy chương trình để đối chiếu.

    Học sinh

    HS A: Em dự đoán 3 vì -2, 0, 6 là số chẵn. HS B: Em đoán 3 nhưng nghĩ 0 không đếm được. Cả lớp quan sát kết quả thực thi và so sánh.

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: kết quả đúng là 3, số 0 là số chẵn nên được đếm; chương trình gồm hai mô đun, hàm chan phân loại, hàm dem_chan tổng hợp qua quan hệ gọi hàm. Hôm nay ta học cách kiểm tra từng mô đun và cả quan hệ gọi.

    Học sinh

    HS ghi nhiệm vụ bài học vào vở.

Hoạt động 2.1: Hình thành kiến thức mới · 10 phút

Thành phần và quan hệ gọi trong chương trình

a) Mục tiêu

HS giải thích được kiểu dữ liệu trả về của hàm phân loại, vai trò của hàm phân loại không tự in kết quả, và cách hàm đếm dùng lại hàm phân loại để tránh lặp quy tắc.

b) Nội dung

HS làm việc theo nhóm 4, mỗi nhóm vẽ sơ đồ quan hệ gọi hàm trên giấy khổ A3 gồm ba mô đun: chan, dem_chan và lệnh in. Nhóm trả lời các câu hỏi: (1) Hàm chan trả về kiểu dữ liệu nào? (2) Vì sao hàm chan không nên tự in kết quả? (3) Nếu muốn đổi quy tắc đếm, em chỉ cần sửa ở đâu? (4) Hàm dem_chan có cần biết điều kiện chẵn được viết như thế nào không?

c) Sản phẩm

Sơ đồ nhóm gồm: lệnh in gọi dem_chan; dem_chan gọi chan trong vòng lặp for. Kết luận nhóm ghi: (1) Hàm chan trả về bool vì biểu thức x%2==0 có giá trị True hoặc False. (2) Hàm chan chỉ phân loại, nếu tự in thì kết quả không dùng lại được để đếm và sẽ làm nhiễu đầu ra. (3) Chỉ cần sửa hàm chan, vì điều kiện chỉ được định nghĩa một nơi. (4) Không cần; dem_chan chỉ cần biết chan trả True hoặc False.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV chia lớp thành các nhóm 4 HS, phát giấy A3 và nêu 4 câu hỏi trên màn hình. Nhắc nhóm vẽ mũi tên từ hàm gọi đến hàm được gọi.

    Học sinh

    HS nhận nhiệm vụ, phân công người vẽ, người đọc mã, người ghi và người báo cáo.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV đi quanh lớp, gợi ý: Em hãy tìm dòng nào trong dem_chan có gọi chan. Nếu hàm chan có print thì điều gì xảy ra khi dem_chan gọi nó?

    Học sinh

    HS đọc mã, vẽ sơ đồ và thảo luận. Dự kiến: Nhóm 1 vẽ mũi tên từ dem_chan sang chan; nhóm 2 trả lời hàm chan trả về bool vì có toán tử so sánh.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 nhóm treo sơ đồ, các nhóm khác bổ sung. GV hỏi thêm: Nếu hàm chan in ra màn hình thì kết quả 3 còn đúng để tổng hợp không?

    Học sinh

    Đại diện nhóm trình bày. Dự kiến: Nhóm khác đáp: hàm chan in True hay False làm kết quả đếm bị lẫn, không dùng để cộng được.

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: hàm chan trả bool, không tự in; hàm dem_chan gọi chan để tổng hợp; quy tắc chỉ định nghĩa một nơi nên dễ sửa và kiểm tra. GV nhấn mạnh: thực hành mô đun cần kiểm tra cả thành phần và quan hệ gọi.

    Học sinh

    HS ghi vào vở: hàm phân loại trả bool, không in; hàm tổng hợp gọi hàm phân loại; quy tắc chỉ định nghĩa một lần.

Hoạt động 2.2: Hình thành kiến thức mới · 8 phút

Hợp đồng hàm và quy trình kiểm tra

a) Mục tiêu

HS nêu được hợp đồng của hàm (đầu vào, đầu ra, quy ước với số 0, số âm, dữ liệu rỗng) và các bước kiểm tra theo đúng thứ tự: định nghĩa hàm phân loại, thử ca 0 và âm/dương, dùng trong hàm đếm, thử tích hợp và in kết quả.

b) Nội dung

HS hoàn thành Phiếu học tập số 1 theo cặp: ghi hợp đồng cho hàm chan và hàm dem_chan, sau đó sắp xếp các bước kiểm tra theo đúng thứ tự phương pháp giải của nhiệm vụ này.

c) Sản phẩm

Hợp đồng gợi ý: hàm chan(x) nhận một số nguyên x, trả về True nếu x chẵn, False nếu không; 0 là số chẵn và trả True; số âm được xét theo cùng quy tắc, ví dụ -2 trả True. Hàm dem_chan(a) nhận danh sách số nguyên a (có thể rỗng), trả về số phần tử chẵn; danh sách rỗng trả về 0. Thứ tự kiểm tra: (1) Định nghĩa hàm phân loại; (2) Thử ca 0 và số âm/dương; (3) Dùng trong hàm đếm; (4) Thử tích hợp và in kết quả.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV phát Phiếu học tập số 1 và yêu cầu HS ghi hợp đồng ngắn gọn cho hai hàm, sau đó sắp thứ tự 4 bước kiểm tra.

    Học sinh

    HS nhận phiếu, làm việc theo cặp trong 4 phút.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV nhắc HS nghĩ đến trường hợp 0, số âm và danh sách rỗng khi viết hợp đồng.

    Học sinh

    HS thảo luận và ghi đáp án vào phiếu. Dự kiến: Cặp 1 ghi 'danh sách rỗng trả 0'; cặp 2 hỏi 'số âm có tính là chẵn không' và tự trả lời có.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 cặp đọc hợp đồng và thứ tự bước, các cặp khác góp ý.

    Học sinh

    Đại diện cặp trình bày. Dự kiến: Cặp 3 sắp đúng thứ tự; cặp 4 đề xuất thử ca rỗng trước khi tích hợp.

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV chốt: hợp đồng giúp tránh hiểu khác nhau về số 0, số âm, dữ liệu rỗng; thứ tự kiểm tra đi từ mô đun nhỏ đến tích hợp. GV yêu cầu HS dán phiếu vào vở.

    Học sinh

    HS ghi vào vở hợp đồng và thứ tự bốn bước kiểm tra.

Hoạt động 3: Luyện tập · 14 phút

Luyện tập dự đoán kết quả và viết chương trình hai mô đun

a) Mục tiêu

HS vận dụng được kiến thức về hàm phân loại, hàm đếm và quan hệ gọi để dự đoán kết quả, viết chương trình hoàn chỉnh và sửa chương trình khi đổi quy tắc.

b) Nội dung

HS làm bài tập 1 đến 5 theo cá nhân rồi đối chiếu với bạn cùng bàn (dự đoán trên giấy, sau đó chạy thử). Bài tập 6 là sắp xếp bước kiểm tra. Bài tập 7 và 8 làm theo nhóm đôi: viết hai mô đun chan và dem_chan rồi kiểm tra với dữ liệu [-2,1,0,6]; sau đó đổi quy tắc thành chẵn dương và sửa đúng mô đun cần sửa. HS có thể đối chiếu thêm bài tương tác trên NeoEdu.

c) Sản phẩm

Đề và đáp án: (1) print(int(chan(0))) in 1, vì 0 là chẵn nên True đổi thành 1. (2) dem([1,3]) in 0, không có số chẵn. (3) dem([-2,4,6]) in 3, cả ba số đều chẵn. (4) Hàm chan trả kiểu A. bool. (5) Đúng: hàm đếm có thể dùng lại hàm phân loại, một nơi định nghĩa điều kiện. (6) Thứ tự: Định nghĩa hàm phân loại → Thử ca 0 âm/dương → Dùng trong hàm đếm → Thử tích hợp và in kết quả. (7) Chương trình hoàn chỉnh: def chan(x): return x%2==0; def dem_chan(a): d=0; for x in a: if chan(x): d+=1; return d; print(dem_chan([-2,1,0,6])) in 3. Thang chấm: chan trả bool 0,25 điểm; dem_chan gọi lại đúng 0,35 điểm; mẫu cho kết quả 3 đúng 0,25 điểm; hợp đồng gồm quy ước với 0 và số âm 0,15 điểm. (8) Nếu đổi quy tắc thành chẵn dương: sửa hàm chan thành return x>0 and x%2==0; hàm dem_chan giữ nguyên; với mẫu [-2,1,0,6] chỉ 6 thoả nên in 1; thử ca 0 cho kết quả False. Chấp nhận cách viết tương đương đúng và có lập luận.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV chiếu đề bài 1 đến 8 và nêu yêu cầu: Bài 1 đến 6 dự đoán trước khi chạy; bài 7 và 8 viết và chạy chương trình. Nhắc HS ghi rõ quy tắc mới khi làm bài 8.

    Học sinh

    HS đọc đề, ghi tên cặp đôi và chia việc: một người viết mã, một người kiểm tra dự đoán.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV đi quanh lớp, nhắc HS kiểm tra kết quả bằng cách chạy thực tế; khi HS gặp lỗi, gợi ý hỏi lại: hàm chan có trả về giá trị không và dem_chan có gọi đúng tên hàm không.

    Học sinh

    HS làm bài và chạy thử. Dự kiến: HS quên return trong chan sẽ nhận kết quả None; HS sửa bằng cách thêm return và chạy lại được 3. HS làm bài 8 viết x>0 and x%2==0 và thấy kết quả 1.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 3 cặp trình bày đáp án bài 7 và 8, yêu cầu cặp khác đối chiếu với thang chấm trên màn hình.

    Học sinh

    Đại diện cặp đọc mã và kết quả. Dự kiến: Cặp A nêu kết quả 3 và nêu hàm chan trả bool; cặp B giải thích khi đổi quy tắc chỉ sửa hàm chan và thử số 0 để tránh nhầm.

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV nhận xét, chốt các lỗi thường gặp (thiếu return, quên d+=1, đặt lệnh in trong hàm chan) và yêu cầu HS đối chiếu bài tương tác trên NeoEdu để tự kiểm tra thêm.

    Học sinh

    HS ghi lại lỗi đã sửa và đáp án đúng vào vở.

Hoạt động 4: Vận dụng · 8 phút

Thiết kế chương trình đếm theo tiêu chí thực tế

a) Mục tiêu

HS vận dụng được quy trình thiết kế theo mô đun để giải quyết một bài toán gắn thực tế: đếm số lượng bản ghi thoả một tiêu chí, đồng thời kiểm tra và giải thích kết quả.

b) Nội dung

Bài toán: một cửa hàng ghi lại số lượng sản phẩm bán ra mỗi ngày trong một tuần, ví dụ danh sách [12, 7, 0, 15, 4, 8, 20]. Cần đếm số ngày có số lượng bán chẵn. HS (làm cá nhân ở lớp hoặc về nhà) cần: (1) viết hàm phân loại ngày_chan(x); (2) viết hàm đếm so_ngay_chan(a) gọi lại hàm phân loại; (3) thử với danh sách rỗng và danh sách có số 0; (4) giải thích vì sao tách hai mô đun giúp sửa dễ hơn khi cửa hàng đổi tiêu chí.

c) Sản phẩm

Chương trình gợi ý: def ngay_chan(x): return x%2==0; def so_ngay_chan(a): d=0; for x in a: if ngay_chan(x): d+=1; return d; print(so_ngay_chan([12,7,0,15,4,8,20])) in 5 (12, 0, 4, 8, 20 là chẵn). Danh sách rỗng trả 0; danh sách [0] trả 1. Lập luận: khi đổi tiêu chí (ví dụ chỉ đếm số lớn hơn 10) chỉ cần sửa hàm phân loại, hàm đếm giữ nguyên. Chấp nhận phương án tương đương đúng và có lập luận.

d) Tổ chức thực hiện

  1. Giáo viên

    Bước 1: Chuyển giao nhiệm vụ

    GV nêu bài toán thực tế trên và yêu cầu HS viết chương trình theo đúng hai mô đun, kèm ghi hợp đồng và thử ca rỗng, ca có số 0.

    Học sinh

    HS đọc đề, ghi nhiệm vụ vào vở.

  2. Giáo viên

    Bước 2: Thực hiện nhiệm vụ

    GV nói rõ: nếu chưa kịp hoàn thành trên lớp, HS hoàn thiện ở nhà và gửi kết quả qua bài tương tác NeoEdu hoặc nhóm lớp.

    Học sinh

    HS viết và chạy chương trình. Dự kiến: HS nhận kết quả 5 và ghi nhận danh sách rỗng trả 0.

  3. Giáo viên

    Bước 3: Báo cáo, thảo luận

    GV mời 2 HS đọc kết quả và giải thích vì sao tách hai mô đun giúp sửa tiêu chí dễ hơn.

    Học sinh

    HS trả lời. Dự kiến: Vì chỉ cần thay điều kiện trong hàm phân loại, không phải viết lại vòng lặp đếm.

  4. Giáo viên

    Bước 4: Kết luận, nhận định

    GV nhận xét, nhấn mạnh: thiết kế theo mô đun giúp kiểm tra từng phần và thay đổi có kiểm soát; yêu cầu HS nộp bài và ôn lại hợp đồng trước giờ sau.

    Học sinh

    HS ghi ý chính vào vở và nộp sản phẩm theo hướng dẫn của GV.

Phiếu học tập

Phiếu học tập số 1

Nhóm/Cặp: ........................ Lớp: ........
Nhiệm vụ 1. Viết hợp đồng cho từng hàm (đầu vào, đầu ra, quy ước):

  • Hàm chan(x): đầu vào ........; đầu ra ........; quy ước với số 0: ........; quy ước với số âm: ........
  • Hàm dem_chan(a): đầu vào ........; đầu ra ........; quy ước với danh sách rỗng: ........
    Nhiệm vụ 2. Sắp xếp các bước kiểm tra theo đúng thứ tự (ghi số 1 đến 4):
  • Thử ca 0 và số âm/dương
  • Định nghĩa hàm phân loại
  • Thử tích hợp và in kết quả
  • Dùng trong hàm đếm
    Nhiệm vụ 3. Trả lời: Vì sao hàm phân loại không nên tự in kết quả?
    ........................................................................

Hướng dẫn về nhà

  • Hoàn thiện bài toán thực tế ở hoạt động vận dụng: viết hai mô đun ngay_chan(x) và so_ngay_chan(a), kiểm tra với danh sách [12,7,0,15,4,8,20] (kết quả mong đợi 5), danh sách rỗng và danh sách có số 0.
  • Ghi lại hợp đồng của chương trình và giải thích bằng 2 đến 3 câu vì sao cần thử ca rỗng và ca số 0.
  • Truy cập trang bài học NeoEdu (neoedu.vn/learn/11/informatics/bai-29-khmt-thuc-hanh-thiet-ke-chuong-trinh-theo-mo-dun), làm bài tập tương tác và tự kiểm tra kết quả; ghi lại 1 câu sai và cách sửa.
  • Ôn lại khái niệm hàm trả về giá trị logic (bool) và quan hệ gọi hàm để chuẩn bị cho tiết học sau.

Giáo án do NeoEdu soạn với sự hỗ trợ của AI, dựa trên nội dung bài học trên Học liệu. Thầy cô nên đọc lại và điều chỉnh cho phù hợp với học sinh của mình; bản Word để sửa trực tiếp.