Câu F81. Lỗi trong chương trình
Có mấy loại lỗi khi lập trình? Hệ thống hỗ trợ gì cho người lập trình trong việc tìm và khắc phục lỗi?
Trả lời:
Khi người lập trình thường gặp ba loại lỗi:
Hệ thống sẽ báo lỗi cú pháp và lỗi ngoại lệ. Để phát hiện lỗi ngữ nghĩa, người lập trình cần kiểm thử, hệ thống cung cấp công cụ Debug để người lập trình quan sát được kết quả trung gian trong quả trình chạy chương trình.
Câu F82. Kiểm thử
Kiểm thử là gì? Tại sao cần kiểm thử khi mà chương trình chạy đưa ra kết quả đúng với ví dụ đã cho?
Trả lời:
Môi trường do ngôn ngữ lập trình cung cấp không phát hiện được lỗi ngữ nghĩa, do vậy người lập trình phải kiểm thử sau khi viết chương trình. Khi kiểm thử, cần xây dựng các bộ dữ liệu đầu vào để chạy thử nhằm phát hiện lỗi của chương trình. Một chương trình nếu có lỗi ngữ nghĩa thì có thể đưa ra kết quả đúng đối với một số bộ dữ liệu vào nhưng vẫn đưa ra kết quả sai đối với một số bộ dữ liệu khác. Việc kiểm thử cũng chỉ làm tăng tính đáng tin cậy của chương trình chứ không chứng minh được chương trình chạy đúng với mọi bộ dữ liệu vào. Tuy nhiên chất lượng của việc kiểm thử phụ thuộc vào việc đưa ra các bộ dữ liệu vào để kiểm thử và đem lại mức đáng tin cậy của chương trình.
Câu F83. Tìm lỗi
Chương trình sau thực hiện nhập từ thiết bị vào chuẩn hai dòng:
Chương trình thỉnh thoảng cho kết quả sai với một số bộ dữ liệu p, q và A nào đó. Em hãy tìm và sửa lỗi để được chương trình cho kết quả đúng với mọi bộ dữ liệu vào p, q và A.
Trả lời:
Cần bỏ câu lệnh q = q - 1 để đảm bảo phần tử cuối trong khoảng yêu cầu tham gia vào việc tìm min và max. Tham khảo chương trình sau:
Câu F84. Hoàn thiện chương trình
Xét bài toán: Cho đa giác n đỉnh, đỉnh thứ i có toạ độ nguyên (xi, yi). với i = 1, 2, ..., n. Hãy tính và đưa ra độ dài cạnh lớn nhất của đa giác. Độ dài của đoạn thẳng với các điểm đầu, cuối lần lượt có toạ độ (u, v) và (p, q) được tính theo công thức (u−v)2+(p−q)2 .
Dữ liệu: Nhập vào từ thiết bị vào chuẩn:
Kết quả: Đưa ra thiết bị ra chuẩn một số thực là độ dài lớn nhất tìm được với độ chính xác đến 2 chữ số sau dấu phẩy thập phân.
Chương trình sau thực hiện bài toán trên. Em hãy cho biết chương trình chưa hoàn thiện ở điểm nào và chỉ ra một cách hoàn thiện chương trình.
Trả lời:
Chương trình chưa xét độ dài cạnh nối điểm cuối dùng trong danh sách với điểm đầu tiên. Một trong số cách hoàn thiện chương trình là:
- Tính độ dài cạnh nối điểm cuối với điểm đầu.
- Cập nhật kết quả.
Tham khảo chương trình sau:
Câu F85. Sửa lỗi cho chương trình
Xét bài toán: Robot hạ cánh xuống vùng cần thăm dò ở trạng thái quay mặt về hướng Đông.
Có ba lệnh điều khiển chuyển động: L - quay sang trái và tiến một bước, R - quay sang phải và tiến một bước, C – tiến một bước theo hướng đang đi. Các lệnh robot nhận được trong ngày được lưu trữ dưới dạng xâu Trace chỉ chứa các kí tự từ tập {L, R, C}. Hình bên minh hoạ một số chuyển động của robot. Để chuẩn bị cho trạng thái ngủ qua đêm người ta cần biết cuối ngày robot đang quay mặt nhìn về hướng nào.
Hãy xác định hướng quay mặt của robot và đưa ra kết quả dưới dạng một kí tự từ tập {E, N, W, S}, trong đó E là hướng Đông, N là hướng Bắc, W là hướng Tây và S là hướng Nam.
Dữ liệu: Gồm một dòng chứa xâu Trace được nhập vảo từ thiết bị vào chuẩn.
Kết quả: Đưa ra thiết bị ra chuẩn một kí tự xác định hướng nhìn của robot.
Gợi ý thuật toán:
Như vậy tính số lần rẽ theo lệnh L ta dễ dàng xác định hướng nhìn của robot ở cuối hành trình đã cho.
Chương trình ở hình sau thực hiện bài toán trên. Chương trình không có lỗi cú pháp nhưng khi thực hiện cho kết quả sai. Em hãy tìm chỗ sai và sửa lại để có chương trình đúng.
Trả lời:
Cần thay câu lệnh k = (p+3*q) //4 bằng lệnh k = (p+3*q) % 4.