Đọc yêu cầu trước khi tách việc
Trong bài thực hành của SGK, mỗi dòng `SeaGames.inp` gồm **mã vận động viên**, rồi đến điểm của ít nhất ba giám khảo. Hai điểm ở **đầu và cuối** có hệ số 2; các điểm còn lại hệ số 1. `ketqua.out` phải có cùng số dòng, mỗi dòng ghi mã và điểm tổng hợp với hai chữ số sau dấu thập phân. Mã như `003` là định danh, không đổi thành số 3. Bài toán tách thành mô-đun đọc tệp, mô-đun tính điểm và mô-đun ghi tệp; chương trình chính nối ba mô-đun theo thứ tự ấy.
Tổng hệ số là số giám khảo cộng hai
Với dãy điểm `d` dài `m`, tổng có trọng số là `sum(d) + d[0] + d[-1]`: `sum` đã cộng mỗi điểm một lần, cộng thêm điểm đầu và cuối để chúng có hệ số 2. Tổng hệ số là `m+2`. Ví dụ `d=[8, 9, 7]` cho `(8×2+9+7×2)/5 = 39/5 = 7.8`. Công thức chỉ áp dụng khi có ít nhất ba điểm như đề bài; khi dữ liệu thiếu, cần báo lỗi trước khi truy cập điểm đầu/cuối.
Bài luyện
Với ba điểm 8, 9, 7, điểm tổng hợp theo đề là bao nhiêu?
Trung bình thường không tính hệ số.
Hai điểm biên có hệ số 2: 39/5=7.8.
Tổng có trọng số không cho 8.2.
9 chỉ là điểm giữa.
Lời giải
Tổng trọng số bằng 8×2+9+7×2=39, tổng hệ số 5, nên điểm là 7.8.
Bài luyện
Vì sao mã vận động viên `003` phải giữ ở kiểu chuỗi?
Đổi sang int sẽ biến 003 thành 3.
Mã và điểm là hai trường khác nhau.
Python có int.
Giữ chuỗi không tự sắp.
Lời giải
Mã là định danh. Nếu dùng int, 003 thành 3 và tệp kết quả không còn đúng mã ban đầu.
Bài luyện
Nếu có m điểm, mẫu số của trung bình có trọng số này là gì?
Chưa cộng hệ số tăng thêm ở hai biên.
Thiếu một hệ số.
Mỗi điểm có hệ số 1, hai điểm biên thêm 1: m+2.
Chỉ hai điểm biên có hệ số 2.
Lời giải
Tổng m hệ số 1, thêm một lần cho điểm đầu và một lần cho điểm cuối, được m+2.
Đang học