Lưu trữ dữ liệu cổ vật Viện Sử học vừa khai quật một di tích lịch sử và thu về n cổ vật hữu cơ. Để xác định tuổi của n cổ vật này, chúng ta sử dụng phương pháp định tuổi bằng đồng vị phóng x
1. Liệt kê các việc lớn
– Nhập vào danh sách các cổ vật và tham chiếu x.
– Lập công thức tính tuổi của từng cổ vật.
– Sắp xếp các cổ vật theo thứ tự tăng dần về tuổi để trả lời KQ1. – Từ tuổi của mỗi cổ vật ta xác định độ tin cậy để trả lời KQ2.
2. Thiết kế các hàm
a. Nhập vào từ tệp
Có thể viết hàm nhapTuTep ( ) để đọc dữ liệu đầu vào từ tệp covat.txt. Hàm trả về hai số n và x; cũng như hai danh sách v và m – khối lượng và số nguyên tử C của cổ vật, với v[i] và m[i] là số liệu của cổ vật thứ i.

b. Lập công thức tính tuổi của cổ vật
Ta viết hàm tinhtuoi(x, v, m),với x là mật độ nguyên tử C trong một cơ thể sống, v và m lần lượt là khối lượng và số nguyên tử C đo được của một cổ vật. Hàm sẽ trả về tuổi của cổ vật đó.

Ta thấy, mT trong trường hợp này chính là tham số m của hàm, còn m sẽ được tính bằng tích mật độ x nhân với khối lượng v. Từ đấy ta xác định tuổi của cổ vật rồi trả về kết quả.

c. Sắp xếp danh sách các cổ vật các theo thứ tự niên đại
Ta viết hàm sapxep(n,v, m), với n là số lượng cổ vật và v, m là hai mảng chứa thông tin về khối lượng và số nguyên tử C đo được của các cổ vật. Ta khai báo một mảng ds hai chiều gồm 2 cột – chỉ số trong mảng gốc và tuổi của cổ vật. Để tính tuổi, ta dùng hàm tinhtuoi.
Sau đó, ta sắp xếp ds theo cột thứ hai – niên đại. Nếu dùng phương thức sort của list, có thể dùng cú pháp:

d. Kiểm tra độ tin cậy
Để không phải tính lại niên đại của cổ vật, ta sử dụng luôn mảng ds thu về từ hàm sapxep.
Vì vậy, ta có thể viết hàm danhsachtincay(ds) và trả về một mảng tincay gồm n phần tử kiểu boolean với True có nghĩa là tin cậy và False là không tin cậy.
Với mỗi cổ vật trong danh sách, ta có hai thông tin: chỉ số i của cổ vật nằm ở cột thứ nhất và tuổi niendai nằm ở cột thứ hai. Ta xem niendai có giá trị không dưới 50 000 năm hay không, nếu thoả mãn thì ta gán tincay[i] bằng True, ngược lại sẽ bằng False.
Cuối cùng, ta trả về mảng tincay để sau đó in ra câu trả lời của KQ2.

Tổng kết lại, ta có đoạn code như sau:


