Tin Học KHMT
Ôn tập Tin học THPT › Tin học 11 - Khoa học máy tính › Bài 26
Tin học 11 - Khoa học máy tính

Bài 26. Chia bài toán thành hàm và cách làm mịn dần

Một bài toán trong thực tế thường không đơn giản như những ví dụ luyện tập ban đầu. Bài học này giới thiệu cách chia một bài toán lớn thành nhiều hàm nhỏ, mỗi hàm đảm nhận đúng một việc, cùng cách làm mịn dần - phác thảo các bước lớn trước, rồi mới viết chi tiết từng bước - để việc viết chương trình trở nên gọn gàng và dễ kiểm soát hơn.

Chủ đề F · Lập trình, Thuật toán & CTDL (KHMT) - đọc khoảng 11 phút · 25 câu luyện tập trong ứng dụng

Tương ứng sách giáo khoa
  • Cánh DiềuTin học 11 (Khoa học máy tính) - Chủ đề F(CS) · Bài 4. Làm mịn dần từng bước từ thuật toán đến chương trình máy tínhtr. 101
  • Kết nối tri thứcTin học 11 (Khoa học máy tính) - Bài 26. Phương pháp làm mịn dần trong thiết kế chương trìnhtr. 118–122
  • Kết nối tri thứcTin học 11 (Khoa học máy tính) - Bài 27. Thực hành thiết kế chương trình theo phương pháp làm mịn dầntr. 123–126
Xem bảng đối chiếu cả bộ →

Bắt đầu bằng một hình dung

Hãy tưởng tượng một nhóm bạn cùng nhau tổ chức một bữa tiệc nhỏ. Nếu giao cho đúng một người phải lo liệu tất cả mọi việc - vừa đi chợ mua nguyên liệu, vừa nấu từng món, vừa kê bàn ghế, vừa dọn dẹp sau khi ăn xong - người đó chắc chắn sẽ rối tung, dễ quên việc, và khó biết nên bắt đầu từ đâu trước. Cách làm hợp lý hơn nhiều là chia bữa tiệc thành từng đầu việc riêng biệt: một nhóm lo đi chợ, một nhóm lo nấu nướng, một nhóm khác lo dọn bàn và sắp xếp chỗ ngồi. Mỗi nhóm chỉ cần tập trung hoàn thành đúng phần việc của mình; đến giờ, các phần việc được ráp lại với nhau, bữa tiệc coi như hoàn tất mà không ai phải ôm đồm quá nhiều thứ cùng lúc.

Viết một chương trình máy tính để giải quyết một bài toán lớn cũng nên đi theo tinh thần “chia để trị” như vậy: thay vì viết một khối lệnh dài giải quyết mọi thứ cùng lúc, ta chia bài toán thành từng phần việc nhỏ, mỗi phần việc giao cho một hàm đảm nhận.

Nội dung bài học

  1. Vì sao nên chia bài toán lớn thành nhiều hàm nhỏ?
  2. Làm mịn dần: từ dàn ý lớn đến từng hàm cụ thể

Tóm tắt lý thuyết cần nhớ

  • Một bài toán lớn nên được chia thành nhiều hàm nhỏ, mỗi hàm chỉ đảm nhận đúng một việc rõ ràng, thay vì viết dồn tất cả vào một khối lệnh dài.
  • Làm mịn dần (thiết kế từ trên xuống) là cách phác ra các bước lớn của bài toán trước - như một dàn ý - rồi mới quay lại viết chi tiết từng bước thành một hàm hoàn chỉnh.
  • Chia hàm và làm mịn dần giúp chương trình dễ viết, dễ đọc, dễ kiểm thử từng phần và dễ tái sử dụng hơn so với việc viết một mạch từ đầu đến cuối.
  • Trong một chương trình được chia tốt, phần chính thường chỉ gồm vài dòng gọi hàm theo đúng thứ tự, đọc vào giống như đọc lại dàn ý các bước lớn của bài toán.

Thuật ngữ tiếng Anh trong bài

Tiếng AnhĐọc làNghĩa
algorithmAL-gô-rít-thầmthuật toán
Các bước làm một việc theo đúng thứ tự để ra kết quả - như công thức pha mì gói: đổ nước sôi, chờ 3 phút, rồi ăn.
functionPHẮNG-sầnhàm
Một 'cỗ máy nhỏ' lắp sẵn để làm một việc cụ thể.

Câu hỏi trắc nghiệm có đáp án

Mấy câu mẫu để bạn tự kiểm tra ngay. Trong ứng dụng, bài này có đủ 25 câu, chấm điểm tự động và giải thích từng câu sai.

Câu 1 · Nhận biết
Vì sao nên chia một bài toán lớn thành nhiều hàm nhỏ thay vì viết dồn thành một khối lệnh dài?
  1. Để chương trình chạy nhanh hơn về tốc độ xử lý của máy tính, vì hàm đã được dịch sẵn ra mã máy
  2. Để mỗi hàm chỉ đảm nhận đúng một việc rõ ràng, giúp chương trình dễ viết, dễ đọc và dễ kiểm thử hơn
  3. Vì Python bắt buộc một chương trình phải có ít nhất bốn hàm mới chạy được, thiếu hàm sẽ báo lỗi
  4. Để chương trình chiếm ít dung lượng lưu trữ hơn trên ổ đĩa, vì các dòng lệnh không bị viết lặp lại
Đáp án: B - Chia bài toán thành nhiều hàm nhỏ, mỗi hàm một việc rõ ràng, giúp chương trình dễ viết, dễ đọc, dễ kiểm thử từng phần và dễ tái sử dụng - đây là lí do chính được nêu trong bài, không liên quan đến tốc độ xử lý hay dung lượng lưu trữ. Python cũng không hề bắt buộc số lượng hàm tối thiểu nào.
Câu 2 · Nhận biết
Cách làm mịn dần (thiết kế từ trên xuống) khi giải quyết một bài toán lớn nghĩa là gì?
  1. Viết ngay chi tiết từng dòng lệnh của cả bài toán ngay từ đầu, không cần phác thảo trước
  2. Phác ra các bước lớn của bài toán trước, giống một dàn ý, rồi lần lượt viết chi tiết từng bước thành một hàm hoàn chỉnh
  3. Chỉ viết đúng một hàm duy nhất cho toàn bộ bài toán để chương trình gọn nhất có thể
  4. Xoá bỏ hết các hàm đã viết trước đó rồi viết lại từ đầu cho đến khi chương trình chạy đúng
Đáp án: B - Làm mịn dần là phác ra những bước lớn trước - như một dàn ý - rồi mới quay lại làm chi tiết (làm mịn) từng bước thành một hàm hoàn chỉnh. Viết ngay chi tiết từ đầu, gộp tất cả vào một hàm duy nhất, hay xoá đi viết lại đều không phải là cách làm mịn dần được nêu trong bài.
Câu 3 · Thông hiểu
Trong chương trình quản lí điểm ở bài học, hàm nào chỉ nhận vào một danh sách điểm có sẵn, tính rồi trả về điểm trung bình, không cần quan tâm những điểm đó được nhập vào bằng cách nào?
  1. nhap_diem_so
  2. tinh_trung_binh
  3. xep_loai_hoc_luc
  4. in_bang_ket_qua
Đáp án: B - tinh_trung_binh chỉ nhận vào một danh sách điểm qua tham số danh_sach, tính tổng rồi chia cho số lượng phần tử để ra điểm trung bình; hàm này không quan tâm dữ liệu đầu vào lấy từ đâu. nhap_diem_so lo việc nhận điểm từ người dùng rồi tạo ra danh sách, xep_loai_hoc_luc lo việc xếp loại dựa trên điểm trung bình đã tính, còn in_bang_ket_qua lo việc hiển thị kết quả ra màn hình.
Câu Đúng/Sai (Phần II) · Thông hiểu
Cho biết mỗi phát biểu sau đúng hay sai:
  • a)Khi mỗi hàm chỉ lo đúng một việc rõ ràng, chương trình thường dễ đọc và dễ kiểm thử hơn so với một hàm ôm đồm nhiều việc cùng lúc.Đúng
  • b)Làm mịn dần nghĩa là phải viết xong toàn bộ chi tiết của cả bài toán trước, sau đó mới được nghĩ đến các bước lớn.Sai
  • c)Trong một chương trình được chia hàm hợp lý, phần chính thường chỉ còn vài dòng gọi hàm theo đúng thứ tự, không chứa nhiều phép tính chi tiết.Đúng
  • d)Một hàm đã viết xong và kiểm tra đúng thì không thể dùng lại ở bất kỳ chỗ nào khác, mỗi hàm chỉ được gọi đúng một lần duy nhất trong chương trình.Sai
Vì sao:
  • (a) Đúng - mỗi hàm một việc rõ ràng giúp chương trình dễ đọc, dễ kiểm thử hơn, đây chính là lợi ích chính của việc chia hàm được nêu trong bài.
  • (b) Sai - làm mịn dần đi theo thứ tự ngược lại: phác các bước lớn (dàn ý) trước, rồi mới quay lại làm chi tiết (làm mịn) từng bước sau.
  • (c) Đúng - phần chính của một chương trình chia hàm hợp lý thường chỉ là vài dòng gọi hàm theo đúng thứ tự, giống như đọc lại dàn ý các bước lớn.
  • (d) Sai - một hàm hoàn toàn có thể được gọi lại nhiều lần, ở nhiều chỗ khác nhau, thậm chí ở một chương trình khác có nhu cầu tương tự; đây chính là lợi ích ‘dùng lại được’ đã nêu trong bài.

Thử ngay: minh hoạ từng bước

Bấm từng bước để tự xem cơ chế hoạt động, hoặc bấm “Tự chạy” cho nó tiến mỗi giây một lần. Đổi được dữ liệu đầu vào - không cần đăng nhập.

Học trọn bài này trong ứng dụng

Bài giảng đầy đủ, 25 câu luyện tập chấm tự động, thi thử đúng cấu trúc đề tốt nghiệp (24 trắc nghiệm + 4 Đúng/Sai), bài thực hành máy tự chấm và gia sư AI giải thích chỗ sai.

Mở bài 26 trong ứng dụng

Phần học miễn phí, không cần tạo tài khoản.