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 30 · KHMT. Thiết lập thư viện cho 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 thư viện (mô đun) là tệp mã Python chứa các hàm dùng chung và có thể tái sử dụng.
  • Giải thích được vai trò của lệnh import: nạp mô đun theo tên tệp (không ghi đuôi .py) để gọi hàm bằng cú pháp tên_mô_đun.tên_hàm(...).
  • Nêu được giao diện của thư viện gồm tên hàm, đầu vào và đầu ra được công bố; giải thích được vì sao cần giữ đúng giao diện khi sửa đổi.
  • Giải thích được vì sao không đặt tên mô đun trùng thư viện chuẩn (ví dụ math.py) và vai trò của khối if name == "main" trong việc tránh chạy mã thử khi chỉ import.
  • Vận dụng được kiến thức để viết mô đun có hai hàm, tệp chương trình chính nhập mô đun và tính đúng kết quả với dãy mẫu [2,-1,5] (tong = 6, dem_duong = 2).

2. Năng lực

a) Năng lực chung

  • Tự chủ và tự học: HS chủ động đọc mã mẫu, tự đối chiếu kết quả với đáp án và tự rút ra các điều kiện áp dụng thư viện.
  • Giao tiếp và hợp tác: HS thảo luận theo cặp đôi, trình bày được cách gọi hàm từ mô đun và nhận xét bài làm của bạn một cách xây dựng.
  • Giải quyết vấn đề và sáng tạo: HS đề xuất cách tách mã thử khỏi phần thư viện và vận dụng vào tình huống thống kê khác (dãy nhiệt độ trong ngày).

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 tạo đúng hai tệp thongke_mau.py và main.py trong cùng thư mục, chạy chương trình và đọc kết quả trên màn hình.
  • NLb: Ứng xử phù hợp trong môi trường số: HS không đặt tên tệp trùng thư viện chuẩn và không ghi mật khẩu hay thông tin bí mật vào mã thư viện.
  • 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 xác định lỗi in kết quả ngoài ý muốn khi import và sửa bằng khối if name == "main", kiểm tra lại bằng cách chạy main.py.
  • 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 trang bài học số NeoEdu để làm bài tập tương tác và tự kiểm tra đáp án.
  • NLe: Hợp tác trong môi trường số: HS cùng nhóm chia sẻ tệp mã, thử nghiệm và góp ý cho nhau qua thiết bị hoặc thư mục dùng chung.

3. Phẩm chất

  • Chăm chỉ: HS kiên trì kiểm tra từng bước (tạo tệp, đặt tên, gọi hàm, chạy thử) đến khi chương trình cho đúng hai dòng kết quả 6 và 2.
  • Trách nhiệm: HS tự kiểm tra lại mã của mình, không đặt tên mô đun gây nhầm với thư viện chuẩn và chịu trách nhiệm về sản phẩm của nhóm.
  • Trung thực: HS ghi nhận đúng kết quả chạy thực tế của chương trình, không sao chép đáp án mà không hiểu lí do; khi gặp lỗi, báo cáo trung thực với GV và bạn.

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 hoặc màn hình tivi để trình chiếu mã mẫu thongke_mau.py và main.py.
  • Phần mềm soạn thảo và chạy Python (IDLE hoặc Thonny) đã cài sẵn trên máy của HS.
  • Phiếu học tập số 1 in sẵn cho từng nhóm.
  • 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-30-khmt-thiet-lap-thu-vien-cho-chuong-trinh (dùng ở hoạt động luyện tập).

2. Học sinh

  • Máy tính có cài Python (IDLE hoặc Thonny) và thư mục làm việc riêng.
  • Vở ghi, bút, giấy nháp để ghi kết quả và đáp án.
  • Phiếu học tập số 1 (làm theo nhóm hai người).

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

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

Khởi động: Vì sao nên tách hàm dùng chung thành thư viện?

a) Mục tiêu

Xác định được vấn đề: khi một đoạn mã được chép nhiều lần, việc sửa lỗi và bảo trì rất khó; từ đó nêu được nhu cầu tách hàm dùng chung thành một tệp riêng để tái sử dụng.

b) Nội dung

GV nêu tình huống: hai chương trình của lớp cùng cần tính tổng và đếm số dương của một dãy số. Bạn A chép nguyên đoạn mã vào cả hai chương trình. GV hỏi: (1) Nếu phát hiện lỗi trong đoạn tính tổng, em phải sửa ở mấy chỗ? (2) Có cách nào viết đoạn mã đó một lần rồi dùng ở nhiều nơi không? HS suy nghĩ 1 phút, trao đổi với bạn ngồi cạnh (think-pair-share), sau đó vài HS phát biểu.

c) Sản phẩm

HS nêu được: sao chép mã làm tăng nguy cơ sót lỗi khi sửa, khó kiểm soát khi chương trình lớn; cần viết hàm một lần trong một tệp riêng (thư viện, mô đun) và các chương trình khác nhập (import) để dùng lại. GV ghi tên bài lên bảng: Thiết lập thư viện cho chương trình.

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 tình huống hai chương trình cùng sao chép đoạn tính tổng và đếm số dương; nêu hai câu hỏi: sửa lỗi ở mấy chỗ, và có cách nào viết một lần rồi dùng nhiều nơi không.

    Học sinh

    HS đọc tình huống, suy nghĩ cá nhân khoảng 1 phút và ghi nhanh câu trả lời vào vở.

  2. Giáo viên

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

    GV yêu cầu HS quay sang bạn bên cạnh trao đổi 1 phút; đi quanh lớp, lắng nghe các cặp.

    Học sinh

    Từng cặp trao đổi. Dự kiến: “Phải sửa ở cả hai chỗ.”; “Viết hàm riêng rồi gọi lại ở nhiều chương trình.”

  3. Giáo viên

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

    GV mời 2 đến 3 cặp trình bày. Gợi ý thêm: “Nếu chương trình có 20 nơi chép đoạn mã thì sao?”

    Học sinh

    Dự kiến HS trả lời: “Sửa 20 chỗ rất dễ sót.”; “Nên tách hàm ra một tệp và import.”

  4. Giáo viên

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

    GV chốt: mã dùng chung nên được đặt trong mô đun (thư viện) để tái sử dụng, dễ bảo trì; ghi tên bài học lên bảng.

    Học sinh

    HS ghi tiêu đề bài học và ý chính vào vở.

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

Mô đun, tệp mã và lệnh import

a) Mục tiêu

Giải thích được mô đun là tệp mã chứa hàm, lệnh import nạp mô đun theo tên tệp; gọi được hàm bằng cú pháp tên_mô_đun.tên_hàm(...) và tính đúng kết quả với dãy [2,-1,5].

b) Nội dung

HS làm việc theo nhóm đôi, quan sát mã mẫu trên màn hình: tệp thongke_mau.py chứa hai hàm tong(a) và dem_duong(a); tệp main.py chứa lệnh import thongke_mau, gán a=[2,-1,5] và in kết quả của hai hàm. Nhóm hoàn thành Phiếu học tập số 1 (gồm các câu hỏi về vai trò của tệp thongke_mau.py, ý nghĩa của lệnh import, kết quả của tong(a) và dem_duong(a) với dãy [2,-1,5], và tên tệp cần nhập khi import). Sau đó nhóm chạy thử main.py để kiểm tra.

c) Sản phẩm

Kiến thức HS rút ra: (1) Mô đun là một tệp .py chứa các hàm dùng chung, ví dụ thongke_mau.py. (2) Lệnh import thongke_mau nạp mô đun theo tên tệp, không ghi đuôi .py. (3) Gọi hàm bằng thongke_mau.tong(a) và thongke_mau.dem_duong(a). Kết quả: tong([2,-1,5]) = 6 (vì 2 − 1 + 5 = 6); dem_duong([2,-1,5]) = 2 (vì chỉ có 2 và 5 dương, số 0 và số âm không tính). Khi chạy main.py, màn hình in hai dòng: 6 và 2.

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 hai tệp thongke_mau.py và main.py; phát Phiếu học tập số 1 và nêu nhiệm vụ: đọc mã, trả lời phiếu, chạy main.py để đối chiếu.

    Học sinh

    HS nhận phiếu, nhóm đôi cùng đọc mã mẫu và xác định các câu cần trả lời.

  2. Giáo viên

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

    GV hướng dẫn HS tạo hai tệp trong cùng thư mục làm việc, đặt đúng tên, rồi chạy main.py. GV đi kiểm tra và gợi ý khi HS nhầm đuôi tệp.

    Học sinh

    HS tạo tệp, chạy chương trình, ghi kết quả. Dự kiến HS trả lời phiếu: “Tệp thongke_mau.py là mô đun chứa các hàm dùng chung.”; “import thongke_mau để nạp các hàm.”; “tong bằng 6, dem_duong bằng 2.”

  3. Giáo viên

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

    GV mời một nhóm trình bày đáp án phiếu và kết quả chạy chương trình; hỏi thêm: “Vì sao khi gọi hàm phải viết thongke_mau.tong chứ không chỉ viết tong?”

    Học sinh

    Dự kiến HS trả lời: “Vì hàm nằm trong mô đun thongke_mau, phải chỉ rõ nguồn gốc của hàm.” Nhóm khác bổ sung nếu cần.

  4. Giáo viên

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

    GV chốt: mô đun là tệp mã tổ chức các hàm; import nạp mô đun để dùng; gọi hàm qua tên mô đun. Nhấn mạnh: import dùng tên tệp không có đuôi .py.

    Học sinh

    HS ghi vào vở: mô đun, lệnh import, cú pháp gọi hàm và kết quả 6, 2.

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

Giao diện thư viện và kiểm soát mã thử khi import

a) Mục tiêu

Nêu được giao diện của thư viện (tên, đầu vào, đầu ra được công bố); giải thích được vai trò của khối if name == "main" và lí do không đặt tên mô đun trùng thư viện chuẩn; nêu được thư viện không chứa thông tin bí mật.

b) Nội dung

GV đặt tình huống: giả sử thêm vào cuối thongke_mau.py dòng in thử print(tong([1,2])). HS dự đoán điều gì xảy ra khi main.py import thongke_mau, sau đó nêu cách sửa để mã thử chỉ chạy khi chạy trực tiếp tệp thongke_mau.py. Nhóm trả lời thêm: vì sao không đặt tệp tên math.py trong thư mục làm việc; vì sao không ghi mật khẩu vào thư viện.

c) Sản phẩm

Kiến thức HS rút ra: (1) Giao diện là tên hàm, tham số đầu vào và giá trị đầu ra được công bố; người dùng chỉ cần biết giao diện, không cần biết chi tiết bên trong. (2) Khi import, mã đặt ngoài hàm sẽ chạy, nên in ra kết quả thử ngoài ý muốn. Cách sửa: đặt mã thử dưới khối if name == "main": và thụt lề; khi import, khối này không chạy, main.py chủ động gọi hàm. (3) Không đặt tên tệp trùng thư viện chuẩn như math.py, vì tệp cục bộ sẽ che thư viện chuẩn và gây nhầm import. (4) Không hardcode mật khẩu hay bí mật trong thư việ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 đoạn mã thử print(tong([1,2])) đặt cuối thongke_mau.py và nêu bốn câu hỏi định hướng: khi import sẽ in gì; cách tách mã thử; vì sao không đặt tên math.py; vì sao không ghi mật khẩu.

    Học sinh

    HS đọc tình huống, dự đoán và ghi câu trả lời ngắn vào vở.

  2. Giáo viên

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

    GV yêu cầu HS thử thêm dòng in vào tệp, chạy main.py, quan sát kết quả rồi sửa lại bằng khối if name == "main". GV nhắc HS chỉ dùng tên tệp không trùng thư viện chuẩn.

    Học sinh

    HS chạy thử, thấy dòng 3 xuất hiện ngoài ý muốn; sau đó đặt mã thử dưới khối if và kiểm tra lại. Dự kiến HS trả lời: “Khi import, mã thử vẫn chạy và in thêm 3.”; “Đặt dưới if name == "main": để chỉ chạy khi chạy trực tiếp.”

  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 kết quả thử và cách sửa; hỏi: “Nếu tệp tên math.py nằm cùng thư mục thì import math sẽ lấy tệp nào?”

    Học sinh

    Dự kiến HS trả lời: “Sẽ lấy tệp math.py cục bộ thay vì thư viện chuẩn, gây lỗi.”

  4. Giáo viên

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

    GV chốt: giao diện phải được công bố rõ ràng; dùng if name == "main" để tách mã thử; tránh đặt tên trùng thư viện chuẩn; không đưa bí mật vào thư viện.

    Học sinh

    HS ghi bốn ý chính và mẫu khối if name == "main" vào vở.

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

Luyện tập và tự kiểm tra trên học liệu số

a) Mục tiêu

Vận dụng được kiến thức về mô đun, import, giao diện và điều kiện áp dụng thư viện để trả lời đúng các câu hỏi trắc nghiệm, điền khuyết và viết được chương trình đúng yêu cầu.

b) Nội dung

HS làm bài tập trên trang bài học NeoEdu (phần bài tập tương tác) hoặc trên phiếu của GV, theo cặp đôi. Đề gồm: (1) Giao diện thongke_mau: tong(a) cộng mọi phần tử; dem_duong(a) đếm phần tử lớn hơn 0, không tính 0. Với dãy [2,-1,5], tính tong và dem_duong. (2) Hãy cho biết tong([2,-1,5]) bằng bao nhiêu? (3) dem_duong([2,-1,5]) bằng bao nhiêu? (4) Khi viết import thongke_mau, mô đun được tìm theo tệp nào: A. thongke_mau.py; B. main.py; C. thongke_mau.txt; D. thongke_mau.py.txt? (5) Tên mô đun trùng thư viện chuẩn có thể gây nhầm import: Đúng hay Sai? (6) Thư viện bắt buộc chứa mật khẩu người dùng để tái sử dụng: Đúng hay Sai? (7) Ghép khái niệm: mô đun, import, giao diện với các mô tả tương ứng. (8) Tạo tệp thongke_mau.py có tong(a), dem_duong(a) và main.py nhập mô đun rồi tính trên dãy [2,-1,5]. (9) Nêu cách tách phần thử trong thư viện để import không in kết quả ngoài ý muốn.

c) Sản phẩm

Đáp án: (1) tong([2,-1,5]) cộng mọi phần tử; dem_duong([2,-1,5]) đếm phần tử dương. (2) 6 (vì 2 − 1 + 5 = 6). (3) 2 (vì 2 và 5 dương). (4) A. thongke_mau.py (tên mô đun gắn với tệp mã Python). (5) Đúng (tệp cục bộ có thể che mô đun mong muốn). (6) Sai (không hardcode bí mật trong thư viện). (7) Mô đun là tệp tổ chức mã; import là nạp mô đun để dùng tên chức năng; giao diện là tên, đầu vào, đầu ra được công bố. (8) Gợi ý sản phẩm: thongke_mau.py có hàm tong (s = 0, cộng dần các phần tử) và dem_duong (d = 0, tăng d khi x > 0); main.py gồm import thongke_mau, a = [2,-1,5], in thongke_mau.tong(a) và thongke_mau.dem_duong(a), kết quả là hai dòng 6 và 2. Thang điểm tham khảo: hai tệp và import đúng 0,3; hai hàm đúng giao diện 0,4; hai dòng kết quả 6 và 2 đúng 0,2; không đặt tên trùng thư viện chuẩn 0,1. Chấp nhận phương án tương đương đúng, có lí giải và an toàn. (9) Đặt mã thử dưới khối if name == "main": và thụt lề; khi import, mã thử không chạy, main.py chủ động gọi hàm.

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

  1. Giáo viên

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

    GV mở bài tập tương tác trên NeoEdu trên máy chiếu, nêu thời gian 10 phút và yêu cầu HS làm theo cặp đôi; nhắc HS ghi đáp án câu 8 và 9 ra giấy nháp.

    Học sinh

    HS đăng nhập trang bài học (hoặc mở phiếu bài tập), nhận đề và phân công người đọc, người gõ mã.

  2. Giáo viên

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

    GV đi quanh lớp, kiểm tra cách HS gõ tên mô đun và gọi hàm; gợi ý khi cần: “Em thử đối chiếu tên tệp với lệnh import xem có ghi đuôi .py không?”

    Học sinh

    Cặp đôi làm bài, chạy thử main.py để kiểm tra câu 8. Dự kiến HS trả lời: câu 2 là 6; câu 3 là 2; câu 4 là A; câu 5 là Đúng; câu 6 là Sai.

  3. Giáo viên

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

    GV mời 2 cặp đọc đáp án câu 4, 8, 9 và giải thích; lưu ý HS khác nhận xét về cách gọi hàm.

    Học sinh

    Đại diện cặp trình bày, ví dụ: “Câu 9 em đặt đoạn print trong if name == "main" nên khi import không in gì.”

  4. Giáo viên

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

    GV chữa nhanh các câu sai thường gặp, nhấn mạnh tên mô đun trùng thư viện chuẩn và cách tách mã thử; xác nhận đáp án đúng trên màn hình.

    Học sinh

    HS sửa lại bài làm của mình nếu sai và ghi chú lí do vào vở.

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

Xây thư viện thống kê nhiệt độ trong ngày

a) Mục tiêu

Tạo hoặc đánh giá được sản phẩm thư viện: viết mô đun thống kê mới cho dữ liệu thực tế, nhập mô đun trong chương trình chính, giải thích kết quả và kiểm tra điều kiện áp dụng (tên không trùng thư viện chuẩn, không chứa bí mật, có khối if name == "main").

b) Nội dung

Nhóm đôi xây dựng tệp thongke_nhietdo.py có hai hàm tong(a) và dem_duong(a) (áp dụng cho dãy nhiệt độ đo lúc 0 độ C trở lên là dương, ví dụ dãy nhiệt độ có giá trị âm). Sau đó viết main.py nhập mô đun và tính với dãy a = [25,-3,18,0,30]. Nhóm trả lời: (1) Kết quả tong(a) và dem_duong(a) bằng bao nhiêu? Giải thích vì sao. (2) Kiểm tra: tên tệp có trùng thư viện chuẩn không? Mã có chứa thông tin bí mật không? Mã thử đã đặt đúng trong khối if name == "main" chưa? Nhóm ghi kết quả vào phiếu đánh giá ngắn.

c) Sản phẩm

Kết quả: tong([25,-3,18,0,30]) = 70 (vì 25 − 3 + 18 + 0 + 30 = 70); dem_duong([25,-3,18,0,30]) = 3 (vì 25, 18, 30 dương; −3 và 0 không tính). Sản phẩm: hai tệp thongke_nhietdo.py và main.py cùng thư mục; chương trình in hai dòng 70 và 3. Tiêu chí kiểm tra: tên tệp không trùng thư viện chuẩn; không có mật khẩu hay bí mật; mã thử nằm dưới khối if name == "main".

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 tình huống: nhà trường cần thống kê nhiệt độ đo trong ngày; yêu cầu nhóm tạo thư viện mới và tự kiểm tra theo ba tiêu chí, đồng thời nhắc HS có thể làm tiếp ở nhà nếu chưa xong.

    Học sinh

    HS nhận nhiệm vụ, phân công người viết mô đun và người viết chương trình chính.

  2. Giáo viên

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

    GV theo dõi nhóm, nhắc kiểm tra điều kiện áp dụng: “Tên tệp có trùng math.py hay random.py không? Có dòng print thử nào nằm ngoài hàm không?”

    Học sinh

    Nhóm viết hai tệp, chạy main.py, đối chiếu với kết quả 70 và 3, tự đánh giá theo ba tiêu chí.

  3. Giáo viên

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

    GV mời 1 hoặc 2 nhóm chiếu mã, đọc kết quả và giải thích vì sao số 0 và số âm không được đếm; hỏi thêm: “Nếu đổi tên tệp thành random.py thì điều gì có thể xảy ra?”

    Học sinh

    Dự kiến HS trả lời: “Các nhóm đếm được 3 số dương, vì 0 và −3 không lớn hơn 0.”; “Có thể nhầm với thư viện chuẩn random khi import.”

  4. Giáo viên

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

    GV nhận xét sản phẩm theo ba tiêu chí, chốt: thư viện là tập hợp chức năng tái sử dụng, phải có giao diện rõ ràng, tên không trùng thư viện chuẩn và không chứa bí mật.

    Học sinh

    HS ghi vào vở các tiêu chí kiểm tra thư viện và kết quả 70, 3.

Phiếu học tập

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

Nhóm: …… Thành viên: ……
Đọc tệp thongke_mau.py và main.py rồi trả lời:

  • Câu 1: Tệp thongke_mau.py đóng vai trò gì trong chương trình? (mô đun hay chương trình chính)
  • Câu 2: Lệnh import thongke_mau có ghi đuôi .py không? Vì sao?
  • Câu 3: Hàm tong(a) trong thongke_mau.py làm nhiệm vụ gì?
  • Câu 4: Hàm dem_duong(a) đếm những phần tử nào của dãy?
  • Câu 5: Với a = [2,-1,5], điền kết quả:
    • tong(a) = ……
    • dem_duong(a) = ……
  • Câu 6: Viết lệnh gọi hàm dem_duong từ mô đun thongke_mau trong main.py.
  • Câu 7: Khi chạy main.py, màn hình hiển thị những gì?

Hướng dẫn về nhà

  • Hoàn thiện chương trình gồm hai tệp thongke_mau.py (hai hàm tong(a) và dem_duong(a)) và main.py (nhập mô đun, tính với a = [2,-1,5]); chạy main.py và ghi lại hai dòng kết quả 6 và 2 vào vở.
  • Làm tiếp nhiệm vụ vận dụng: tạo thư viện thongke_nhietdo.py với dãy nhiệt độ trong ngày a = [25,-3,18,0,30] (kết quả mong đợi: 70 và 3); tự kiểm tra ba điều kiện: tên tệp không trùng thư viện chuẩn, không chứa mật khẩu hoặc bí mật, mã thử nằm dưới khối if name == "main".
  • Ôn lại khái niệm mô đun, lệnh import, giao diện thư viện và trả lời hai câu hỏi: Vì sao không đặt tệp tên math.py trong thư mục làm việc? Vì sao khối if name == "main" giúp mã thử không chạy khi import?
  • Làm lại các bài tập tương tác trên trang bài học NeoEdu (neoedu.vn/learn/11/informatics/bai-30-khmt-thiet-lap-thu-vien-cho-chuong-trinh) để tự kiểm tra kiến thức.

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.