Phạm vi: Toàn bộ HK2 — mảng; tìm kiếm; sắp xếp; kiểm thử, đánh giá chương trình; độ phức tạp thời gian; làm mịn dần; thiết kế theo mô đun; thư viện; CSDL (tạo lập, khóa, cập nhật, truy xuất qua liên kết bảng, sao lưu); chỉnh sửa ảnh; làm phim.
Phần 1: Cơ bản
Bài 1. Tìm kiếm tuần tự có độ phức tạp thời gian bao nhiêu trong trường hợp xấu nhất? Giải thích ngắn gọn.
Bài 2. Tìm kiếm nhị phân có độ phức tạp thời gian bao nhiêu? Điều kiện áp dụng là gì?
Bài 3. Nêu ý tưởng phương pháp làm mịn dần.
Bài 4. Nêu hai lợi ích của thiết kế chương trình theo mô đun.
Bài 5. Thư viện chương trình là gì? Nêu một ví dụ thư viện trong Python.
Bài 6. Nêu một lý do cần sao lưu dữ liệu.
Bài 7. Trong phần mềm chỉnh sửa ảnh, công cụ cắt (crop) dùng để làm gì?
Bài 8. Trong phần mềm chỉnh sửa ảnh, công cụ điều chỉnh độ sáng dùng để làm gì?
Bài 9. Trong làm phim, timeline dùng để làm gì?
Bài 10. Trong làm phim, hiệu ứng chuyển cảnh dùng để làm gì?
Bài 11. Viết câu lệnh SQL liệt kê họ tên học sinh và tên lớp (kết nối bảng HocSinh và Lop).
Bài 12. Viết chương trình Python tính tổng các số lẻ từ 1 đến n (n nhập từ bàn phím).
Bài 13. Cho mảng a = [4, 1, 3]. Mô tả một lượt sắp xếp nổi bọt.
Bài 14. Cho mảng a = [4, 1, 3]. Mô tả một lượt sắp xếp chọn.
Bài 15. Nêu một điểm khác nhau giữa lỗi cú pháp và lỗi logic.
Bài 16. Viết câu lệnh SQL đếm số học sinh trong bảng HocSinh.
Bài 17. Trong Python, để dùng thư viện math, ta viết câu lệnh gì?
Bài 18. Khi tạo ảnh động, vì sao cần nhiều khung hình?
Phần 2: Nâng cao
Bài 19. So sánh tìm kiếm tuần tự và tìm kiếm nhị phân về điều kiện áp dụng và độ phức tạp thời gian.
Bài 20. Áp dụng phương pháp làm mịn dần để mô tả các bước giải bài toán: "Nhập mảng, đếm số phần tử lớn hơn 10".
Bài 21. Viết chương trình Python gồm hai hàm: nhap_mang() nhập mảng một chiều, tim_max(a) trả về giá trị lớn nhất; chương trình chính gọi hai hàm và in kết quả (minh họa thiết kế theo mô đun).
Bài 22. Cho bảng Sach(MaSach, TenSach, MaTG) và TacGia(MaTG, TenTG). Viết câu lệnh SQL liệt kê tên sách và tên tác giả của các sách có tác giả tên "Nam".
Bài 23. Viết chương trình Python nhập mảng hai chiều, in ra tổng các phần tử ở cột đầu tiên và cột cuối cùng.
Bài 24. Một chương trình kiểm tra số nguyên tố. Hãy đề xuất 4 test case (dữ liệu vào, kết quả mong đợi), gồm ít nhất một trường hợp biên và một trường hợp đặc biệt.
Bài 25. Cho bảng DonHang(MaDH, NgayDat, MaKH) và KhachHang(MaKH, TenKH). Viết câu lệnh SQL liệt kê mã đơn hàng, ngày đặt và tên khách hàng của các đơn hàng trong năm 2025 (giả sử NgayDat có dạng ngày).
Bài 26. Hãy mô tả quy trình làm một đoạn phim ngắn 30 giây giới thiệu trường học: liệt kê các bước (kịch bản, quay/chọn tư liệu, dựng trên timeline, thêm chuyển cảnh/nhạc, xuất video) và nêu một lưu ý ở mỗi bước.
Bài 27. Viết chương trình Python sắp xếp mảng một chiều tăng dần bằng thuật toán sắp xếp chọn, đồng thời đếm số lần đổi chỗ đã thực hiện.
Bài 28. Giải thích vì sao trước khi xóa hàng loạt dữ liệu trong cơ sở dữ liệu, cần sao lưu. Nêu hai tình huống cụ thể có thể gây mất dữ liệu nếu không sao lưu.
Đáp án
Bài 1. O(n): trường hợp xấu nhất phải duyệt hết n phần tử (giá trị cần tìm ở cuối hoặc không có).
Bài 2. O(log n). Điều kiện: danh sách đã được sắp xếp.
Bài 3. Chia bài toán lớn thành các bài toán con nhỏ hơn, chi tiết dần từng bước cho đến khi mỗi bước đủ đơn giản để cài đặt trực tiếp.
Bài 4. Ví dụ: dễ viết, dễ kiểm thử từng phần; dễ tái sử dụng; nhiều người có thể cùng phát triển; dễ bảo trì, sửa lỗi.
Bài 5. Thư viện là tập hợp các hàm, mô đun viết sẵn để tái sử dụng. Ví dụ: math (hàm toán học), random (số ngẫu nhiên).
Bài 6. Ví dụ: khôi phục dữ liệu khi ổ cứng hỏng, xóa nhầm, cập nhật sai hoặc bị tấn công.
Bài 7. Cắt bỏ phần thừa của ảnh, giữ lại vùng cần thiết, thay đổi khung hình.
Bài 8. Làm ảnh sáng hơn hoặc tối hơn, điều chỉnh mức độ sáng tổng thể.
Bài 9. Sắp xếp các đoạn video, âm thanh, hiệu ứng theo trình tự thời gian để dựng thành phim hoàn chỉnh.
Bài 10. Tạo sự chuyển tiếp mượt mà giữa hai đoạn video liên tiếp (ví dụ: mờ dần, trượt).
Bài 11.
SELECT HocSinh.HoTen, Lop.TenLop FROM HocSinh
JOIN Lop ON HocSinh.MaLop = Lop.MaLop;
Bài 12.
n = int(input("Nhập n: "))
tong = sum(i for i in range(1, n + 1) if i % 2 == 1)
print("Tổng các số lẻ:", tong)
Bài 13. So sánh 4–1 đổi chỗ → [1, 4, 3]; so sánh 4–3 đổi chỗ → [1, 3, 4]. Sau một lượt: [1, 3, 4].
Bài 14. Min của [4, 1, 3] là 1 → đổi chỗ 4 và 1 → [1, 4, 3]. Sau một lượt: [1, 4, 3].
Bài 15. Lỗi cú pháp: chương trình không chạy được do viết sai quy tắc ngôn ngữ. Lỗi logic: chương trình chạy được nhưng cho kết quả sai.
Bài 16. SELECT COUNT(*) FROM HocSinh;
Bài 17. import math.
Bài 18. Vì ảnh động tạo cảm giác chuyển động bằng cách hiển thị liên tiếp nhiều khung hình tĩnh với tốc độ đủ nhanh; một khung hình duy nhất chỉ là ảnh tĩnh.
Bài 19. Tìm kiếm tuần tự: áp dụng cho mọi danh sách, độ phức tạp O(n). Tìm kiếm nhị phân: chỉ áp dụng khi danh sách đã sắp xếp, độ phức tạp O(log n), nhanh hơn trên danh sách lớn.
Bài 20. Ví dụ theo làm mịn dần: Bước 1: Nhập mảng (nhập n, nhập từng phần tử). Bước 2: Khởi tạo biến đếm = 0. Bước 3: Với mỗi phần tử: nếu phần tử > 10 thì tăng biến đếm lên 1. Bước 4: In biến đếm. Mịn dần thêm: "nhập mảng" chia nhỏ thành "nhập n" rồi "lặp n lần nhập phần tử".
Bài 21.
def nhap_mang():
n = int(input("Nhập n: "))
return [int(input(f"Nhập phần tử {i + 1}: ")) for i in range(n)]
def tim_max(a):
return max(a)
a = nhap_mang()
print("Giá trị lớn nhất:", tim_max(a))
Bài 22.
SELECT Sach.TenSach, TacGia.TenTG FROM Sach
JOIN TacGia ON Sach.MaTG = TacGia.MaTG
WHERE TacGia.TenTG = 'Nam';
Bài 23.
m = int(input("Nhập số hàng m: "))
n = int(input("Nhập số cột n: "))
a = [[int(input(f"Nhập a[{i}][{j}]: ")) for j in range(n)] for i in range(m)]
print("Tổng cột đầu:", sum(a[i][0] for i in range(m)))
print("Tổng cột cuối:", sum(a[i][n - 1] for i in range(m)))
Bài 24. Ví dụ: (1) 7 → "là số nguyên tố". (2) 8 → "không là số nguyên tố". (3) 2 → "là số nguyên tố" (trường hợp biên: số nguyên tố nhỏ nhất). (4) 1 → "không là số nguyên tố" (trường hợp đặc biệt). Hoặc 0, số âm → "không là số nguyên tố".
Bài 25.
SELECT DonHang.MaDH, DonHang.NgayDat, KhachHang.TenKH
FROM DonHang JOIN KhachHang ON DonHang.MaKH = KhachHang.MaKH
WHERE DonHang.NgayDat BETWEEN '2025-01-01' AND '2025-12-31';
Bài 26. Ví dụ: (1) Viết kịch bản — lưu ý: xác định rõ thông điệp và trình tự cảnh. (2) Quay/chọn tư liệu — lưu ý: quay đủ cảnh, chú ý ánh sáng và âm thanh. (3) Dựng trên timeline — lưu ý: sắp xếp cảnh đúng trình tự, cắt bỏ phần thừa. (4) Thêm chuyển cảnh, nhạc, chữ — lưu ý: chuyển cảnh nhẹ nhàng, nhạc không lấn lời nói. (5) Xuất video — lưu ý: chọn độ phân giải và định dạng phù hợp, xem lại toàn bộ trước khi xuất.
Bài 27.
a = [5, 2, 4, 1]
dem = 0
n = len(a)
for i in range(n):
vi_tri_min = i
for j in range(i + 1, n):
if a[j] < a[vi_tri_min]:
vi_tri_min = j
if vi_tri_min != i:
a[i], a[vi_tri_min] = a[vi_tri_min], a[i]
dem += 1
print("Mảng đã sắp xếp:", a)
print("Số lần đổi chỗ:", dem)
Bài 28. Vì thao tác xóa hàng loạt không thể hoàn tác dễ dàng; nếu xóa nhầm hoặc điều kiện xóa sai, dữ liệu bị mất vĩnh viễn. Hai tình huống: (1) Điều kiện WHERE sai khiến xóa nhầm nhiều bản ghi hơn dự kiến. (2) Xóa nhầm bảng hoặc xóa cả cơ sở dữ liệu do thao tác nhầm. Bản sao lưu giúp khôi phục dữ liệu trong cả hai trường hợp.
