Trắc nghiệm Cánh diều Tin học 11 KHMT bài 4 Làm mịn dần từng bước từ các thuật toán đến chương trình máy tính
1. Trong ngữ cảnh làm mịn dần, trừu tượng hóa đề cập đến việc gì?
A. Cụ thể hóa mọi chi tiết của thuật toán.
B. Giấu đi các chi tiết không cần thiết để tập trung vào các khía cạnh quan trọng.
C. Viết mã nguồn bằng ngôn ngữ máy.
D. Tạo ra các biến với tên rất dài và mô tả.
2. Nếu một thuật toán ban đầu chỉ mô tả xử lý dữ liệu, thì bước làm mịn tiếp theo có thể là gì?
A. Viết mã nguồn C++.
B. Xác định loại dữ liệu cần xử lý và các phép toán cơ bản.
C. Thực hiện kiểm thử hiệu năng.
D. Thiết kế giao diện người dùng.
3. Trong quá trình làm mịn dần, khi chuyển từ sơ đồ khối sang mã giả, mục tiêu chính là gì?
A. Tạo ra mã nguồn có thể chạy được ngay lập tức.
B. Diễn đạt logic của thuật toán một cách rõ ràng, có cấu trúc, gần với ngôn ngữ lập trình.
C. Chỉ tập trung vào việc đặt tên biến.
D. Tăng cường các yếu tố đồ họa cho sơ đồ.
4. Nếu một thuật toán xử lý danh sách các số nguyên, việc trừu tượng hóa ban đầu có thể là gì?
A. Quyết định sử dụng mảng (array) hay danh sách liên kết (linked list).
B. Xác định một tập hợp các số nguyên mà không cần quan tâm đến cách biểu diễn cụ thể.
C. Viết vòng lặp để duyệt qua từng phần tử.
D. Tính tổng của các số nguyên đó.
5. Trong làm mịn dần, việc mô tả vòng lặp trong mã giả có thể bao gồm những yếu tố nào?
A. Chỉ cần ghi lặp lại.
B. Điều kiện bắt đầu, điều kiện kết thúc, và hành động trong mỗi lần lặp.
C. Tên của vòng lặp.
D. Số lần lặp chính xác đã được quyết định.
6. Làm mịn dần giúp ích gì cho việc hiểu và giao tiếp về thuật toán giữa các thành viên trong nhóm?
A. Làm cho thuật toán trở nên khó hiểu hơn.
B. Cung cấp các biểu diễn rõ ràng ở các mức độ trừu tượng khác nhau, giúp mọi người dễ dàng nắm bắt.
C. Chỉ hữu ích cho người lập trình chính.
D. Yêu cầu mọi người phải hiểu sâu về ngôn ngữ máy.
7. Khi làm mịn dần một thuật toán, việc xác định các module hoặc hàm độc lập có vai trò gì?
A. Tăng sự phụ thuộc giữa các phần của chương trình.
B. Giúp tái sử dụng mã, dễ dàng kiểm thử và bảo trì.
C. Chỉ dành cho các chương trình rất lớn.
D. Làm cho mã nguồn khó đọc hơn.
8. Khi làm mịn dần một thuật toán tìm kiếm, việc lựa chọn giữa tìm kiếm tuyến tính và tìm kiếm nhị phân là một quyết định ở cấp độ nào?
A. Mô tả yêu cầu ban đầu.
B. Trừu tượng hóa cao.
C. Cụ thể hóa logic và chi tiết thực thi.
D. Kiểm thử cuối cùng.
9. Một thuật toán ban đầu có thể được mô tả bằng ngôn ngữ tự nhiên. Khi làm mịn dần, bước tiếp theo thường là gì?
A. Viết mã nguồn bằng Python.
B. Biểu diễn thuật toán bằng mã giả (pseudocode) hoặc sơ đồ khối.
C. Chạy thử thuật toán trên máy tính.
D. Kiểm tra lại các yêu cầu ban đầu.
10. Khi một thuật toán ban đầu quá phức tạp, phương pháp làm mịn dần khuyến khích việc chia nó thành các phần nhỏ hơn, dễ quản lý hơn. Điều này được gọi là gì?
A. Phân rã (Decomposition)
B. Trừu tượng hóa (Abstraction)
C. Mã hóa (Encoding)
D. Tối ưu hóa (Optimization)
11. Trong quá trình làm mịn dần từng bước (progressive refinement) từ thuật toán đến chương trình máy tính, bước đầu tiên thường tập trung vào việc gì?
A. Viết mã nguồn chi tiết cho mọi chức năng.
B. Xác định và mô tả các yêu cầu chức năng và phi chức năng của hệ thống.
C. Tối ưu hóa hiệu năng của thuật toán đã có.
D. Thực hiện kiểm thử đơn vị cho từng module nhỏ.
12. Đâu là một ví dụ về việc làm mịn một yêu cầu Tìm phần tử lớn nhất trong danh sách?
A. Viết mã Python sử dụng hàm `max()`.
B. Mô tả: Cần tìm giá trị lớn nhất trong một dãy số.
C. Viết mã giả: Khởi tạo biến max_val với giá trị âm vô cùng. Duyệt qua từng phần tử trong danh sách. Nếu phần tử hiện tại lớn hơn max_val, cập nhật max_val.
D. Thực hiện kiểm thử với danh sách rỗng.
13. Trong quá trình chuyển từ thuật toán sang chương trình máy tính, trừu tượng hóa chi tiết thực thi có nghĩa là gì?
A. Viết mã nguồn bằng ngôn ngữ cấp cao.
B. Tập trung vào việc thuật toán làm gì (chức năng) thay vì nó làm như thế nào (chi tiết triển khai cụ thể).
C. Cụ thể hóa mọi khía cạnh của dữ liệu và xử lý.
D. Thiết kế giao diện người dùng phức tạp.
14. Việc sử dụng các tham số trong hàm/thủ tục khi làm mịn dần thuật toán có vai trò gì?
A. Làm cho chương trình trở nên phức tạp hơn.
B. Cho phép hàm nhận dữ liệu đầu vào và trả về kết quả, tăng tính linh hoạt và tái sử dụng.
C. Chỉ dùng để gán giá trị cố định cho biến.
D. Ngăn chặn việc kiểm thử hàm một cách độc lập.
15. Khi làm mịn dần, việc lặp lại và tinh chỉnh các bước là cần thiết vì lý do gì?
A. Để đảm bảo mọi thứ đều hoàn hảo ngay từ lần đầu tiên.
B. Để phát hiện và sửa đổi các thiếu sót, cải thiện độ chính xác và hiệu quả.
C. Để làm chậm quá trình phát triển.
D. Để làm cho thuật toán trở nên phức tạp không cần thiết.
16. Khi làm mịn dần, các chi tiết kỹ thuật của việc thực hiện thuật toán (ví dụ: cách lưu trữ dữ liệu cụ thể, cách sử dụng vòng lặp) sẽ xuất hiện ở giai đoạn nào?
A. Ngay từ đầu, khi mô tả thuật toán bằng ngôn ngữ tự nhiên.
B. Ở các bước làm mịn sâu hơn, gần với việc viết mã nguồn.
C. Chỉ sau khi chương trình đã chạy hoàn chỉnh.
D. Không bao giờ cần quan tâm đến các chi tiết kỹ thuật này.
17. Khi làm mịn dần, việc xác định các trường hợp biên (edge cases) của thuật toán thường được thực hiện ở giai đoạn nào?
A. Sau khi chương trình hoàn thành và đưa vào sử dụng.
B. Trong quá trình làm mịn, khi cụ thể hóa logic và kiểm thử.
C. Chỉ khi có báo cáo lỗi từ người dùng.
D. Không cần thiết phải xem xét các trường hợp biên.
18. Tại sao việc làm mịn dần lại quan trọng trong quá trình phát triển từ thuật toán đến chương trình máy tính?
A. Để đảm bảo chương trình chạy nhanh nhất có thể ngay từ đầu.
B. Để giảm thiểu rủi ro và quản lý sự phức tạp, giúp dễ dàng sửa lỗi và bảo trì.
C. Để có thể bỏ qua giai đoạn thiết kế chi tiết.
D. Để chỉ tập trung vào giao diện người dùng.
19. Một lợi ích quan trọng của việc làm mịn dần là nó cho phép thay đổi yêu cầu ban đầu một cách dễ dàng hơn. Điều này đúng hay sai?
A. Sai, vì mọi thay đổi đều gây tốn kém.
B. Đúng, vì các bước được làm mịn dần giúp cô lập ảnh hưởng của thay đổi.
C. Sai, vì yêu cầu ban đầu không bao giờ thay đổi.
D. Đúng, nhưng chỉ áp dụng cho các dự án nhỏ.
20. Phương pháp làm mịn dần giúp ích gì cho việc kiểm thử chương trình máy tính?
A. Cho phép kiểm thử toàn bộ chương trình cùng một lúc.
B. Giúp kiểm thử từng phần nhỏ, độc lập, dễ xác định lỗi hơn.
C. Loại bỏ hoàn toàn nhu cầu kiểm thử.
D. Chỉ cho phép kiểm thử tự động.
21. Khi làm mịn dần, một thuật toán có thể được mô tả bằng nhiều cấp độ chi tiết khác nhau. Cấp độ chi tiết nhất thường tương ứng với:
A. Ngôn ngữ tự nhiên.
B. Sơ đồ khối.
C. Mã giả.
D. Mã nguồn thực tế (code).
22. Quá trình làm mịn dần một thuật toán nên được thực hiện theo nguyên tắc từ trên xuống (top-down) hay từ dưới lên (bottom-up)?
A. Chỉ từ dưới lên để đảm bảo các thành phần cơ bản hoạt động tốt.
B. Chỉ từ trên xuống để đảm bảo mục tiêu tổng thể được đáp ứng.
C. Cả hai phương pháp có thể được sử dụng tùy thuộc vào ngữ cảnh, nhưng từ trên xuống thường là cách tiếp cận chính trong làm mịn dần.
D. Không có nguyên tắc cố định, hoàn toàn phụ thuộc vào người lập trình.
23. Trong quá trình làm mịn dần, nếu phát hiện một lỗi logic trong thuật toán ở bước mã hóa, bạn nên làm gì?
A. Bỏ qua lỗi đó và tiếp tục viết mã.
B. Quay lại bước mô tả yêu cầu hoặc mã giả để sửa lỗi.
C. Tìm cách hack để chương trình chạy đúng.
D. Viết lại toàn bộ thuật toán từ đầu.
24. Làm mịn dần có liên quan đến nguyên tắc DRY (Dont Repeat Yourself) không?
A. Không, hai khái niệm này không liên quan.
B. Có, bằng cách khuyến khích việc tạo các hàm/module tái sử dụng, làm mịn dần giúp tránh lặp lại mã.
C. Chỉ khi làm việc với các ngôn ngữ lập trình cũ.
D. Có, nhưng chỉ áp dụng cho việc đặt tên biến.
25. Tại sao việc làm mịn dần lại phù hợp với các dự án phần mềm lớn và phức tạp?
A. Vì nó cho phép bỏ qua các bước quan trọng.
B. Vì nó giúp quản lý sự phức tạp, phân chia công việc và giảm thiểu rủi ro phát sinh.
C. Vì nó chỉ yêu cầu một người lập trình duy nhất.
D. Vì nó làm cho quá trình phát triển nhanh hơn.