ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CH KHOA
KHOA KHOA HỌC VÀ KỸ THUẬT Y TÍNH
Kỹ thuật lập trình - CO1027
i tập lớn 1
SHERLOCK
A STUDY IN PINK - Phần 2
TP. HỒ CHÍ MINH, THÁNG 01/2022
TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM
KHOA KHOA HỌC KỸ THUẬT MÁY TÍNH
ĐC T BÀI TẬP LỚN
Phiên bản 1.0
1 Chuẩn đầu ra
Sau khi hoàn thành bài tập lớn y, sinh viên ôn lại và sử dụng thành thục:
Các cấu trúc rẽ nhánh
Các cấu trúc lặp
Mảng 1 chiều và mảng 2 chiều
Xử chuỗi t
Hàm và lời gọi hàm
Các thao tác đọc/ghi tập tin
2 Dẫn nhập
Bài tập lớn (BTL) y được phóng tác dựa trên tập 1 mùa 1 của b phim Sherlock của đài
BBC. Bộ phim này ng được thực hiện dựa trên cuốn tiểu thuyết Sherlock Holmes của tác giả
Sir Arthur Conan Doyle.
Trong phần 1, Sherlock và Watson bị cuốn vào một chuỗi các v án mạng tự tử. V án
gần nhất của một người ph nữ trong trang phục màu hồng. V án này khác với các vụ án
trước chỗ: nạn nhân dùng móng tay cào lên mặt sàn và đ lại một thông điệp. Kết quả điều
tra hiện trường cho thy nạn nhân bị mất hành , với tài năng của mình, Sherlock đã tìm thấy
hành bị mất. Anh đem v căn phòng số 221B đường Baker và tìm kiếm các dấu vết tiếp theo
của tên tội phạm. Watson cũng trở về cùng lúc và tham gia với Sherlock.
3 Nhiệm vụ
Sinh viên được yêu cầu y dựng một chương trình giả tưởng trên ngôn ngữ C++ để phỏng
lại quá trình giải quyết vụ án đầu tiên của Sherlock và Watson: A study in Pink, thông qua
các nhiệm vụ được tả bên dưới. Mỗi nhiệm vụ được yêu cầu viết hàm tương ứng, các tham
số của cho hàm y sẽ được cho trong tả của yêu cầu nhiệm vụ.
Bài tập lớn môn Kỹ thuật lập trình - HK 2 năm học 2021 - 2022 Trang 1/14
TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM
KHOA KHOA HỌC KỸ THUẬT MÁY TÍNH
3.1 Nhiệm vụ 1: Mật của hành (5 điểm)
Hành tìm thấy được đặt mật khẩu với 10 chữ số, Sherlock cần suy luận ra mật khẩu y
mới thể xem xét các manh mối tiếp theo. Sherlock tìm các ngăn kéo bên ngoài của hành
và phát hiện 3 cuốn sổ ghi chép. Theo anh, nạn nhân thường xuyên tháo nhẫn trước khi làm
việc, y hẳn một người cẩn thận, tại sao các cuốn sổ y lại được đặt bên ngoài không
phải bên trong? Các cuốn sổ y lẽ nạn nhân cố tình để ngoài, chúng chứa thông tin
của mật hành phòng trường hợp nạn nhân quên mật khẩu thì thể tìm lại được. Từ
đó, Sherlock đọc qua các cuốn sổ và bắt đầu việc điều tra. Tuy nhiên, Sherlock không thích
các công việc nhàm chán, anh sẽ giải thích cách giải mật khẩu và nhờ Watson làm phần
việc còn lại. Watson thì... nhờ các bạn SV cùng giúp anh ấy tìm mật khẩu.
3.1.1 Cuốn sổ 1
Sherlock nhìn qua cuốn sổ đầu tiên, các trang của ghi các chữ số khác nhau từ 0 đến 9. Chỉ
dòng đầu tiên ghi một chuỗi tự lạ Freq/First/<n1>. Sherlock đoán rằng, anh cần phải
lấy n1 số đầu tiên và liệt kê tần số (freq=frequency) của các số y.
Sinh viên được yêu cầu viết một hàm để tìm ra mật khẩu từ cuốn s 1, tả v hàm như
sau:
Tên hàm: notebook1.
Tham số đầu vào:
ntb1: Chuỗi chứa tên tập tin, tập tin y chứa thông tin của cuốn sổ 1.
Cấu trúc của tập tin ntb1:
Dòng 1: 1 chuỗi dạng Freq/First/<n1>, trong đó <n1> 3 tự đều 3
chữ số. <n1> sẽ biểu diễn một số nguyên trong khoảng [1,999]. dụ: n1 = ”001”
biểu diễn cho số nguyên 1; n1 = ”010” biểu diễn cho số nguyên 10; n1 = ”123” biểu
diễn cho số nguyên 123.
Dòng 2: chứa nhiều chữ số, các chữ số cách nhau bởi 1 khoảng trắng. Số lượng chữ
số y luôn đảm bảo lớn hơn hoặc bằng <n1> nếu <n1> một chuỗi hợp lệ.
Yêu cầu hàm: Hàm đọc dữ liệu từ tập tin ntb1, nếu <n1> một chuỗi không hợp lệ,
hàm không làm cả và trả v giá trị "0000000000". Nếu chuỗi <n1> hợp lệ, ta liệt
kê số lượng các chữ số thuộc cùng 1 loại dựa trên <n1> chữ số đầu tiên của Dòng 2. các
số lượng y được sắp xếp theo thứ tự tăng dần của mỗi chữ số từ ’0’ đến ’9’. Nếu chữ
số nào không xuất hiện trong <n1> chữ số đầu tiên của Dòng 2, ta coi số lượng chữ số
Bài tập lớn môn Kỹ thuật lập trình - HK 2 năm học 2021 - 2022 Trang 2/14
TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM
KHOA KHOA HỌC KỸ THUẬT MÁY TÍNH
đó 0. Sau khi liệt kê, nếu số lượng y một số lớn hơn 10, ta chỉ giữ lại chữ số cuối
cùng (chữ số hàng đơn vị). Hàm trả v chuỗi gồm 10 tự, lần lượt số lượng liệt kê
tìm được.
dụ 1: Các dụ v <n1> chuỗi không hợp lệ:
Freq/First/11x: không hợp lệ do tự cuối cùng ’x’, không phải một chữ
số.
Freq/First/000: không hợp lệ do khi chuyển qua số nguyên sẽ số 0, không thuộc
khoảng [1,999].
Hàm trả v giá trị "0000000000" trong 2 trường hợp y.
dụ 2: Tập tin ntb1 nội dung như sau:
1 Freq/First/014
2 11111111111993555
Kết quả liệt kê là:
0 1 2 3 4 5 6 7 8 9
011 101000002
Hàm trả v giá trị: "0101000002".
3.1.2 Cuốn sổ 2
Sau khi giải xong cuốn sổ 1, Sherlock xem tới cuốn sổ 2. Dòng đầu tiên của cuốn sổ một
số nguyên dương. Các dòng sau các chuỗi với độ dài khác nhau, tuy nhiên, Sherlock nhìn
thấy trong các chuỗi y nhiều từ "pink" xuất hiện. Sherlock đoán anh cần tìm số lần xuất
hiện của chuỗi "pink" trong cuốn sổ y.
Sinh viên được yêu cầu viết một hàm để tìm ra mật khẩu từ cuốn sổ 2, tả v hàm như
sau:
Tên hàm: notebook2.
Tham số đầu vào:
ntb2: Chuỗi chứa tên tập tin, tập tin y chứa thông tin của cuốn sổ 2.
Bài tập lớn môn Kỹ thuật lập trình - HK 2 năm học 2021 - 2022 Trang 3/14
TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM
KHOA KHOA HỌC KỸ THUẬT MÁY TÍNH
Cấu trúc của tập tin ntb2:
Dòng 1: 1 chuỗi biểu diễn cho một số nguyên dương <n2> nằm trong khoảng
[5,100], chuỗi y phải đúng 5 tự, mỗi tự y đều phải một chữ số.
<n2> dòng tiếp theo: mỗi dòng một chuỗi các tự bất (có thể tự
khoảng trắng).
Yêu cầu hàm: Hàm đọc dữ liệu từ tập tin ntb2, nếu <n2> một chuỗi không hợp lệ,
hàm không làm cả và trả v giá trị "1111111111". Nếu chuỗi <n2> hợp lệ, ta đếm
lần chuỗi "Pink" hoặc "pink" xuất hiện trong <n2> dòng tiếp theo. Gọi số lần tìm
thấy y cntP. Ta biến đổi kết quả y qua 2 bước sau:
Bước 1: Nếu cntP số chữ số ít hơn 5 thì cập nhật:
cntP =cntP2
Ngược lại, không làm cả.
Bước 2: Nếu cntP chưa đủ 10 chữ số, ta thêm các chữ số 9 vào cuối cùng cho đến
khi đủ 10 chữ số.
Hàm trả v giá trị cntP đúng 10 chữ số.
Lưu ý: Các testcases sẽ đảm bảo số lần xuất hiện một số không vượt quá 9 chữ số.
dụ 3: Các d v <n2> chuỗi không hợp lệ:
12a: không hợp lệ do chuỗi y chỉ 3 tự, tự cui cùng ’a’ không phải
một chữ số.
00003: chuỗi y 5 chữ số, nhưng số nguyên biểu diễn tương ứng 3, không
nằm trong khoảng [5,100].
dụ 4: Với tập tin ntb2 nội dung như sau:
Dòng Nội dung Số chuỗi "pink" hoặc "Pink"
1 00005
2 pink–Pink 2
3 Hello Pink 99Pinky77 2
4 I’m doing an easy Assignment, my Pink 1
5 Really?! 1Pink2 3pink4 5Pink6 7pink8 9pink9 5
6 Yep./-good luck and good night, pink 1
Bài tập lớn môn Kỹ thuật lập trình - HK 2 năm học 2021 - 2022 Trang 4/14