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 26 · KHMT. Phương pháp làm mịn dần trong thiết kế chương trình

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 khái niệm phương pháp làm mịn dần: bắt đầu từ mô tả mức cao rồi phân rã từng bước thành thao tác đủ rõ để cài đặt.
  • Giải thích được vì sao phải giữ hợp đồng đầu vào/đầu ra khi phân rã và không thay đổi mục tiêu bài toán.
  • Vận dụng được ba tầng phân rã (nhiệm vụ, nhập/xử lí/xuất, thao tác khởi tạo–duyệt–lọc–cộng–xuất) để viết chương trình tính tổng các số dương trong một dãy.
  • Kiểm tra được luồng toàn bộ chương trình sau khi tích hợp các thành phần bằng dữ liệu mẫu và các trường hợp biên.

2. Năng lực

a) Năng lực chung

  • Tự chủ và tự học: HS chủ động đọc phiếu học tập, tự phân rã bài toán theo từng tầng và tự đối chiếu kết quả với đáp án.
  • Giao tiếp và hợp tác: HS trao đổi theo nhóm 4 để thống nhất sơ đồ phân rã và trình bày lập luận khi báo cáo.
  • Giải quyết vấn đề và sáng tạo: HS tìm được nhiều cách cụ thể hóa cùng một mục tiêu và lựa chọn phương án đúng, an toàn, có lí giải.

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

  • 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 máy tính, trình soạn thảo Python và trang bài học NeoEdu để chạy thử chương trình và tra cứu bài tập tương tác.
  • 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 Python để kiểm tra kết quả của từng phiên bản chương trình khi làm mịn dần.
  • Ứng dụng công nghệ thông tin và truyền thông trong học và tự học: HS tự kiểm tra bài tập trên NeoEdu và ghi lại lỗi để sửa.
  • Hợp tác trong môi trường số: HS chia sẻ mã và kết quả chạy thử trong nhóm qua máy chiếu hoặc nhóm trò chuyện của lớp.

3. Phẩm chất

  • Chăm chỉ: HS kiên trì phân rã đến mức thao tác rõ ràng, không dừng ở mô tả chung chung như “xử lí dữ liệu”.
  • Trách nhiệm: HS tự kiểm tra kết quả chương trình với dữ liệu mẫu và chịu trách nhiệm sửa khi kết quả sai.

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 (IDLE hoặc tương đương) để chạy thử chương trình mẫu trước lớp.
  • Phiếu học tập số 1 và Phiếu học tập số 2 (in sẵn 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 (neoedu.vn/learn/11/informatics/bai-26-khmt-phuong-phap-lam-min-dan-trong-thiet-ke-chuong-trinh).

2. Học sinh

  • Vở ghi, bút, giấy nháp để vẽ sơ đồ phân rã.
  • Máy tính có cài Python hoặc truy cập được trang NeoEdu (nếu có điều kiện; nếu không, làm việc theo nhóm trên một máy).

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

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

Đặt bài toán tổng các số dương

a) Mục tiêu

HS nhận ra nhiệm vụ tính tổng số dương còn mơ hồ nếu chỉ nêu ở mức cao, từ đó thấy sự cần thiết của phương pháp làm mịn dần.

b) Nội dung

GV đưa dãy mẫu a = [-2, 3, 0, 7] lên màn hình và nêu câu hỏi: “Hãy tính tổng các số dương trong dãy. Nếu viết chương trình ngay, em cần biết những việc gì trước?”. HS trả lời miệng và ghi ra nháp hai đến ba việc cần làm.

c) Sản phẩm

HS nhận ra rằng “tính tổng số dương” là mô tả mức cao, chưa đủ để viết mã. Cần xác định: lấy dữ liệu ở đâu, duyệt các phần tử như thế nào, điều kiện lọc là gì, kết quả xuất ra đâu. Kết quả đúng với dữ liệu mẫu là 3 + 7 = 10.

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 dãy a = [-2, 3, 0, 7] và đặt câu hỏi: “Hãy tính tổng các số dương trong dãy. Nếu viết chương trình ngay, em cần biết những việc gì trước?”. GV yêu cầu HS suy nghĩ 1 phút rồi ghi ra nháp.

    Học sinh

    HS đọc đề, suy nghĩ và ghi các việc cần làm ra nháp.

  2. Giáo viên

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

    GV đi quanh lớp, gợi ý nếu HS bế tắc bằng câu hỏi: “Máy cần biết dữ liệu ở đâu? Phải kiểm tra từng phần tử như thế nào?”.

    Học sinh

    HS dự kiến trả lời: “Phải duyệt từng số trong dãy”, “Phải kiểm tra số đó có lớn hơn 0 không”, “Phải cộng dồn và in kết quả”. Một số HS có thể nói “Cộng các số dương” nhưng chưa nói được cách khởi tạo tổng.

  3. Giáo viên

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

    GV mời 2 đến 3 HS nêu việc cần làm và ghi lên bảng theo thứ tự. GV hỏi thêm: “Nếu chỉ ghi ‘xử lí dữ liệu’ thì máy có làm được không?”.

    Học sinh

    HS trả lời: “Không, vì chưa biết tổng bắt đầu từ đâu và điều kiện lọc là gì”.

  4. Giáo viên

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

    GV dẫn dắt vào bài: mô tả mức cao cần được phân rã thành thao tác đủ rõ, đó là phương pháp làm mịn dần. GV ghi tiêu đề bài 26 lên bảng.

    Học sinh

    HS ghi tiêu đề bài học và xác định mục tiêu tiết học.

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

Phân rã từ mức cao đến thao tác cụ thể

a) Mục tiêu

HS hiểu và thực hành được cách phân rã bài toán tổng số dương qua ba tầng, mỗi tầng cụ thể hơn tầng trước.

b) Nội dung

HS làm việc nhóm 4 với Phiếu học tập số 1. Nhóm phân rã nhiệm vụ “tính tổng các số dương trong dãy” theo ba tầng:

  • Tầng 1: nêu nhiệm vụ ở mức cao.
  • Tầng 2: tách thành nhập dữ liệu, xử lí, xuất kết quả.
  • Tầng 3: cụ thể hóa phần xử lí thành các thao tác: khởi tạo tổng s = 0; duyệt từng phần tử x; nếu x > 0 thì cộng x vào s; sau khi duyệt xong thì in s.
    Câu hỏi GV đặt ra: “Ở tầng 3, vì sao phải khởi tạo s = 0 trước khi duyệt?” và “Nếu dãy không có số dương nào thì kết quả là bao nhiêu?”.

c) Sản phẩm

Sơ đồ phân rã ba tầng của nhóm, ví dụ:

  • Tầng 1: Tính tổng các số dương trong dãy a.
  • Tầng 2: Nhập a → Xử lí: lọc và cộng các số dương → Xuất tổng.
  • Tầng 3: s = 0; với mỗi x trong a: nếu x > 0 thì s = s + x; in s.
    Kiến thức HS rút ra: làm mịn dần là đi từ mô tả mức cao đến thao tác đủ rõ để cài đặt; khởi tạo s = 0 để tổng bắt đầu đúng; nếu dãy không có số dương thì tổng là 0, vì không có phần tử nào được cộng.

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, nêu yêu cầu: mỗi nhóm hoàn thành sơ đồ ba tầng cho bài toán tổng số dương. GV nhắc: ở mỗi tầng phải giữ đúng mục tiêu “tính tổng các số dương”, không đổi sang bài toán khác.

    Học sinh

    HS nhận phiếu, đọc yêu cầu và phân công vai: người ghi, người kiểm tra, người trình bày, người tra cứu ví dụ.

  2. Giáo viên

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

    GV quan sát các nhóm, hỏi gợi mở: “Tầng 2 đã đủ để viết lệnh chưa?” và “Thao tác nào trong tầng 3 đảm bảo không bỏ sót phần tử?”.

    Học sinh

    HS thảo luận và điền sơ đồ. Dự kiến: “Tầng 2 chưa đủ vì chưa biết duyệt thế nào”; “Dùng vòng lặp for để duyệt từng phần tử, không bỏ sót”.

  3. Giáo viên

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

    GV mời 2 nhóm trình bày sơ đồ, nhóm khác nhận xét. GV hỏi: “Nếu bỏ bước s = 0 thì điều gì có thể xảy ra?”.

    Học sinh

    HS trình bày sơ đồ. Dự kiến: “Nếu không khởi tạo s thì máy không biết bắt đầu cộng từ đâu, chương trình có thể báo lỗi”.

  4. Giáo viên

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

    GV chốt: làm mịn dần bắt đầu từ mô tả mức cao, phân rã thành thao tác đủ rõ để cài đặt. Với mẫu dãy [-2, 3, 0, 7], các số dương là 3 và 7, tổng là 10. GV chiếu ba tầng chuẩn lên màn hình để HS đối chiếu.

    Học sinh

    HS đối chiếu sơ đồ của nhóm với sơ đồ chuẩn và sửa những chỗ còn thiếu.

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

Tích hợp và kiểm tra luồng toàn bộ

a) Mục tiêu

HS hiểu rằng sau khi phân rã cần ghép các mảnh thành chương trình hoàn chỉnh, giữ hợp đồng đầu vào/đầu ra và kiểm tra luồng toàn bộ.

b) Nội dung

HS làm việc cặp đôi. Mỗi cặp viết chương trình hoàn chỉnh theo ba tầng đã phân rã và chạy thử với các dữ liệu:

  • a = [-2, 3, 0, 7], kết quả mong đợi là 10.
  • a = [-1, 0], kết quả mong đợi là 0.
  • a = [2, 2], kết quả mong đợi là 4.
    GV đặt câu hỏi: “Đầu vào là một dãy số, đầu ra là một số nguyên. Khi cài đặt, em có được đổi đầu ra thành đếm số phần tử dương không?” và “Chạy từng đoạn riêng có đủ không, hay phải chạy cả luồng?”.

c) Sản phẩm

Chương trình chạy đúng với các dữ liệu:

  • Với a = [-2, 3, 0, 7], in ra 10.
  • Với a = [-1, 0], in ra 0.
  • Với a = [2, 2], in ra 4.
    Kiến thức HS rút ra: khi đi xuống chi tiết phải giữ hợp đồng đầu ra là tổng các số dương, không đổi thành đếm số lượng; sau khi ghép các mảnh phải chạy thử cả luồng vì lỗi có thể nằm ở chỗ nối giữa các tầng; ví dụ 3 + 7 = 10 cho thấy phần tử 0 không được cộng và số lặp vẫn được giữ.

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 ba bộ dữ liệu thử và nêu nhiệm vụ: cặp đôi viết chương trình hoàn chỉnh theo sơ đồ ba tầng, chạy đủ ba bộ dữ liệu và ghi kết quả vào vở.

    Học sinh

    HS nhận nhiệm vụ, phân công một người gõ mã và một người đọc kết quả mong đợi để đối chiếu.

  2. Giáo viên

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

    GV đi quanh lớp, kiểm tra xem HS có khởi tạo s = 0 và kiểm tra điều kiện x > 0 đúng chưa. Nếu HS in sai với [-1, 0] thì gợi ý: “Khi không có số dương thì tổng bằng bao nhiêu?”.

    Học sinh

    HS viết mã và chạy thử. Dự kiến: với a = [-2, 3, 0, 7] in 10; với a = [-1, 0] in 0; với a = [2, 2] in 4. Một số cặp có thể quên khởi tạo s nên gặp lỗi, phải sửa.

  3. Giáo viên

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

    GV mời 2 cặp trình bày kết quả ba bộ thử và nêu lỗi đã gặp (nếu có). GV hỏi: “Lỗi em gặp nằm ở tầng nào của sơ đồ?”.

    Học sinh

    HS báo cáo. Dự kiến: “Em quên s = 0 nên bị lỗi, đó là tầng 3”; “Em cộng cả số âm vì điều kiện thiếu x > 0”.

  4. Giáo viên

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

    GV nhấn mạnh: “Xử lí dữ liệu” chưa đủ để lập trình; phải có khởi tạo, duyệt, lọc, cộng và xuất. Sau khi tích hợp phải kiểm tra cả luồng với dữ liệu mẫu và trường hợp biên như [-1, 0].

    Học sinh

    HS ghi vào vở: các bước kiểm tra luồng và trường hợp biên cần thử.

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

Trò chơi đoán kết quả và trắc nghiệm nhanh

a) Mục tiêu

HS củng cố khái niệm làm mịn dần và đọc được kết quả của chương trình tính tổng số dương trong các trường hợp khác nhau.

b) Nội dung

HS làm việc theo nhóm 4 theo hình thức trò chơi “Đoán kết quả”. GV chiếu lần lượt các đề sau, mỗi nhóm viết đáp án lên bảng con rồi giơ đồng loạt:
Bài 1: a = [-1, 4, 6], in sum(x for x in a if x > 0). Bài 2: a = [-1, 0], in sum(x for x in a if x > 0). Bài 3: a = [2, 2], in sum(x for x in a if x > 0).
Bài 4 (trắc nghiệm): Làm mịn dần là gì? A. Phân rã từ mức cao tới thao tác rõ; B. Chỉ đổi màu mã; C. Viết ngẫu nhiên rồi đổi yêu cầu; D. Chỉ giảm cỡ chữ.
Bài 5 (đúng/sai): Phân rã phải giữ ý nghĩa đầu ra ban đầu.
Bài 6 (sắp xếp): Sắp xếp các bước: Cài đặt và thử cả luồng; Nêu nhiệm vụ tổng số dương; Làm rõ duyệt và điều kiện; Tách nhập/xử lí/xuất.

c) Sản phẩm

Đáp án:

  • Bài 1: 10 (lọc 4 và 6, tổng 10).
  • Bài 2: 0 (không có số dương, tổng rỗng là 0).
  • Bài 3: 4 (hai phần tử đều là 2 và được giữ, tổng 4).
  • Bài 4: A (cụ thể hóa từng bước theo mục tiêu).
  • Bài 5: Đúng (không được biến tổng số dương thành đếm số lượng).
  • Bài 6: Nêu nhiệm vụ tổng số dương → Tách nhập/xử lí/xuất → Làm rõ duyệt và điều kiện → Cài đặt và thử cả luồng.

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

  1. Giáo viên

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

    GV giới thiệu luật chơi: mỗi nhóm có bảng con, GV chiếu từng câu, nhóm giơ đáp án sau 30 giây. Nhóm đúng nhiều nhất được tuyên dương.

    Học sinh

    HS nhận bảng con và lắng nghe luật chơi.

  2. Giáo viên

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

    GV chiếu lần lượt từng câu, nhắc thời gian và quan sát các nhóm đang tranh luận ở câu nào.

    Học sinh

    HS đọc đề, tính nhẩm hoặc dự đoán kết quả, viết đáp án lên bảng con. Dự kiến: các nhóm thường đúng câu 1 đến 3, có thể nhầm câu 2 khi nghĩ tổng bằng −1 hoặc bằng 0 nhưng lí do chưa rõ.

  3. Giáo viên

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

    GV yêu cầu một nhóm giải thích đáp án câu 2 và một nhóm giải thích câu 6. Nếu có nhóm sai, GV hỏi: “Khi không có phần tử nào thỏa điều kiện, sum trả về giá trị nào?”.

    Học sinh

    HS giải thích. Dự kiến: “Không có số dương nào nên không cộng gì, tổng là 0”; “Trước hết phải nêu nhiệm vụ, sau đó tách các bước, cuối cùng thử cả luồng”.

  4. Giáo viên

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

    GV công bố đáp án đầy đủ, nhận xét các lỗi thường gặp và tuyên dương nhóm đúng nhất. GV nhấn mạnh: đọc đúng kết quả là bước đầu để kiểm tra chương trình.

    Học sinh

    HS đối chiếu đáp án, sửa lỗi trong vở.

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

Thiết kế và kiểm tra chương trình hoàn chỉnh

a) Mục tiêu

HS vận dụng phương pháp làm mịn dần để thiết kế từ mức cao đến mã, viết chương trình hoàn chỉnh và tự kiểm tra theo dữ liệu mẫu; có thể hoàn thành ở nhà.

b) Nội dung

HS làm việc cá nhân với Phiếu học tập số 2: thiết kế từ mức cao đến mã chương trình tính tổng các số dương của dãy a = [-2, 3, 0, 7]. Yêu cầu: (1) ghi ba tầng phân rã; (2) viết chương trình hoàn chỉnh; (3) chạy thử và giải thích vì sao kết quả là 10. Có thể truy cập bài tập tương tác trên trang NeoEdu để tự kiểm tra thêm. Câu hỏi GV đặt ra: “Mô tả mức cao ‘xử lí dữ liệu’ đã đủ để lập trình chưa? Vì sao?”.

c) Sản phẩm

Sản phẩm cá nhân gồm ba tầng phân rã và đoạn mã:
a = [-2, 3, 0, 7]
s = 0
for x in a:
if x > 0:
s += x
print(s)
Kết quả in ra: 10, vì chỉ 3 và 7 thỏa điều kiện x > 0 và 3 + 7 = 10.
Giải thích: “xử lí dữ liệu” chưa đủ vì chưa nêu khởi tạo s = 0, duyệt x, điều kiện x > 0 và cộng dồn. Tiêu chí chấm: ba tầng phân rã giữ đúng mục tiêu (0,35 điểm); mã có điều kiện lọc và cộng đúng (0,4 điểm); kết quả mẫu 10 kèm giải thích (0,25 điểm). Chấp nhận phương án khác đúng, có lí giải và xử lí được trường hợp không có số dương.

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ố 2, nhắc HS cần thể hiện rõ cả ba tầng và kiểm tra bằng dữ liệu mẫu. GV giới thiệu địa chỉ trang bài tập tương tác NeoEdu để HS tự kiểm tra nếu muốn.

    Học sinh

    HS nhận phiếu, ghi nhiệm vụ vào vở và xác định thời gian hoàn thành.

  2. Giáo viên

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

    GV hướng dẫn nhanh trong lớp: “Hãy viết ba tầng trước, rồi mới viết mã”. Nếu còn thời gian, GV cho HS chạy thử trên máy; nếu không, HS hoàn thiện ở nhà.

    Học sinh

    HS thiết kế ba tầng và viết mã. Dự kiến: một số HS viết đúng; một số HS chỉ ghi “xử lí dữ liệu” nên cần được hướng dẫn bổ sung khởi tạo s, duyệt x và điều kiện x > 0.

  3. Giáo viên

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

    GV mời 1 đến 2 HS đọc sơ đồ và kết quả, các bạn khác nhận xét về việc giữ mục tiêu và kiểm tra luồng.

    Học sinh

    HS trình bày: “Em khởi tạo s = 0, duyệt từng x, chỉ cộng khi x > 0, kết quả là 10 vì 3 + 7 = 10”.

  4. Giáo viên

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

    GV chốt: làm mịn dần bắt đầu bằng mô tả mức cao rồi phân rã mỗi bước thành thao tác đủ rõ để cài đặt; sau phân rã phải tích hợp và kiểm tra luồng toàn bộ. GV giao bài về nhà.

    Học sinh

    HS ghi nhớ kiến thức trọng tâm và hoàn thành phiếu số 2 ở nhà.

Phiếu học tập

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

Nhiệm vụ: Phân rã bài toán “Tính tổng các số dương trong dãy a” thành ba tầng.

  • Tầng 1 (mức cao): ………………………………………………
  • Tầng 2 (nhập, xử lí, xuất):
    • Nhập: ………………………………………………
    • Xử lí: ………………………………………………
    • Xuất: ………………………………………………
  • Tầng 3 (thao tác cụ thể):
    • Khởi tạo: ………………………………………………
    • Duyệt: ………………………………………………
    • Điều kiện và cộng dồn: ………………………………………………
    • Xuất kết quả: ………………………………………………
      Câu hỏi:
  1. Vì sao phải khởi tạo s = 0 trước khi duyệt?
  2. Nếu dãy không có số dương nào thì kết quả là bao nhiêu? Vì sao?
  3. Với dãy [-2, 3, 0, 7], tổng là bao nhiêu?

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

Nhiệm vụ cá nhân: Thiết kế từ mức cao đến mã chương trình tính tổng các số dương trong dãy a = [-2, 3, 0, 7].
Phần 1: Ghi ba tầng phân rã (mức cao, nhập/xử lí/xuất, thao tác cụ thể).
Phần 2: Viết chương trình Python hoàn chỉnh.
Phần 3: Chạy thử, ghi kết quả in ra: ………
Phần 4: Trả lời câu hỏi: “Mô tả mức cao ‘xử lí dữ liệu’ đã đủ để lập trình chưa? Vì sao?”
Phần 5 (tự kiểm tra): Thử thêm dữ liệu [-1, 0] và [2, 2]; ghi kết quả mong đợi và kết quả chạy được: ………

Hướng dẫn về nhà

  • Hoàn thành Phiếu học tập số 2: ghi ba tầng phân rã, viết chương trình hoàn chỉnh cho dãy a = [-2, 3, 0, 7] và giải thích kết quả 10.
  • Tự kiểm tra chương trình với ít nhất ba bộ dữ liệu, gồm một dãy có số dương, một dãy không có số dương và một dãy có số lặp; ghi lại kết quả mong đợi và kết quả chạy được.
  • Làm thêm các bài tập tương tác trên trang NeoEdu của bài 26 để củng cố kiến thức về phương pháp làm mịn dần; ghi lại câu sai và giải thích vì sao sai.
  • Chuẩn bị bài tiếp theo: đọc trước nội dung về kiểm tra và gỡ lỗi chương trình, chú ý các lỗi thường gặp khi tích hợp các thành phần.

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.