Ngược lại,HP bị nhỏ hơn 0 thì phải thiết lập lại bằng 0.• EXP1 và EXP2 lần lượt là chỉ số kinh nghiệm của Sherlock và Watson trong lúc pháán, họ tìm thấy được càng nhiều manh mối thì chỉ
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Kỹ thuật Lập trình - CO1027 Bài tập lớn SHERLOCK A STUDY IN PINK - Phần Phiên 1.0 TP HỒ CHÍ MINH, THÁNG 02/2024 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH ĐẶC TẢ BÀI TẬP LỚN Phiên 1.0 Chuẩn đầu Sau hồn thành tập lớn này, sinh viên ơn lại 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 chiều mảng chiều • Xử lý chuỗi ký tự • Hàm lời gọi hàm Dẫn nhập Bài tập lớn (BTL) phóng tác dựa tập mùa phim Sherlock đài BBC Bộ phim thực dựa tiểu thuyết Sherlock Holmes tác giả Sir Arthur Conan Doyle John Watson bác sĩ quân y nghỉ ngơi London sau bị thương Afghanistan Anh suy nghĩ đến việc đổi sang hộ khác với giá th rẻ vơ tình gặp lại người bạn cũ Watson sau bạn giới thiệu đến gặp Sherlock Holmes để thuê phòng số 221B đường Baker, bà Hudson chủ sở hữu Từ đó, Watson bị kéo vào vụ án đầy thử thách Sherlock, Sherlock có người bạn đồng hành hành trình phá án Vụ án gần người phụ nữ trang phục màu hồng Vụ án khác với vụ án trước chỗ: nạn nhân dùng móng tay cào lên mặt sàn để lại thông điệp Kết điều tra trường cho thấy nạn nhân bị hành lý, với tài mình, Sherlock tìm thấy hành lý bị Anh đem phòng số 221B đường Baker tìm kiếm dấu vết tên tội phạm Watson trở lúc tham gia với Sherlock Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 1/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Dữ liệu nhập Dữ liệu nhập chương trình chứa file, tên file lưu biến file_input File chứa thông tin sau: HP1␣HP2 EXP1␣EXP2 M1␣M2 E1␣E2␣E3 Trong đó: • HP1 HP2 số sức khoẻ Sherlock Watson, số nguyên dao động từ đến 666 Trong trường hợp tính tốn nào, HP bị vượt 666 phải thiết lập lại 666 Ngược lại, HP bị nhỏ phải thiết lập lại • EXP1 EXP2 số kinh nghiệm Sherlock Watson lúc phá án, họ tìm thấy nhiều manh mối số kinh nghiệm tăng Đây số nguyên nằm khoảng từ đến 600 Khi EXP vượt 600 phải thiết lập lại 600, xuống phải thiết lập lại • M1 M2 số tiền ban đầu Sherlock Watson, số nguyên đoạn [0, 3000] Khi số tiền vượt 3000 phải thiết lập lại 3000, xuống phải thiết lập lại • E mã kiện nhiệm vụ BTL này, số nguyên đoạn [0, 99] Lưu ý: • Trong trường hợp tính tốn số khơng ngun cho HP, EXP M, số phải làm trịn lên • Trong nhiệm vụ có truyền vào tham số E, E nằm ngồi khoảng cho trường hợp nhiệm vụ đó, hàm nhiệm vụ khơng làm trả -99 Nhiệm vụ Sinh viên yêu cầu xây dựng chương trình giả tưởng ngơn ngữ C++ để mơ lại q trình giải vụ án Sherlock Watson: A study in Pink, thông qua nhiệm vụ mô tả bên Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 2/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 4.1 Nhiệm vụ 1: Cuộc gặp gỡ (1.5 điểm) Trong lần gặp gỡ, Watson chứng kiến khả suy luận thiên tài Sherlock Sherlock đoán Watson trở từ chiến trường Afghanistan chi tiết khác đằng sau sống Watson Sinh viên yêu cầu viết hàm để mơ tả lại q trình mà Sherlock giải thích cho Watson suy luận Qua q trình này, EXP Watson Sherlock thay đổi • Tên hàm: firstMeet • Tham số đầu vào: – EXP1: số kinh nghiệm Sherlock – EXP2: số kinh nghiệm Watson – E1: số biểu diễn kiện • Kết trả về: Số nguyên tổng EXP Sherlock Watson Lưu ý: Trong hàm nhiệm vụ nhiệm vụ sau, tham số biểu diễn cho số thay đổi truyền theo kiểu tham khảo Khi có yêu cầu cập nhật số, sinh viên cần thực cập nhật biến tham khảo Khi đó, biến truyền vào cập nhật theo 4.1.1 Trường hợp (0.5 điểm) Trong trường hợp E1 đoạn [0, 3], Sherlock giải thích anh biết Watson vừa trở từ Afghanistan Sau thông tin mà Sherlock mô tả làm thay đổi số EXP Watson: Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 3/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Thơng Giá trị E1 Quan sát Sherlock Tác dụng tin Kiểu tóc cách ăn nói Watson Cộng 29 EXP giống quân đội Khuôn mặt rám nắng không bị rám nắng cổ tay, chứng tỏ Watson Cộng 45 EXP từ nước Watson bước khập khiễng, gặp nhau, anh chọn đứng mà không yêu cầu ghế nên anh gặp vấn đề tâm Cộng 75 EXP lý sau bị thương Đây bị thương hành động chiến trường Sherlock giải thích Thông tin 1, 2, EXP cộng thêm tương ứng với tổng thông tin Từ thơng tin trên, Sherlock đốn Watson bác sĩ quân y từ nước ngồi trở về, phạm vi tìm kiếm anh giảm xuống đất nước: Afghanistan Iraq Lúc định Sherlock (số nguyên D) phụ thuộc vào yếu tố mã kiện E1 kinh nghiệm Sherlock EXP1 theo quan hệ sau: D=E1 ∗ + EXP1 ∗ EXP2 Nếu D số chẵn, Sherlock đưa dự đoán thiên Afghanistan (và lựa chọn đúng), lúc EXP anh cộng thêm khoảng D/200 Ngược lại, D số lẻ, Sherlock nghiêng khả Iraq, lựa chọn sai EXP anh bị giảm khoảng D/100 Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 4/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 4.1 Với liệu nhập là: 172␣172 400␣300 450␣450 3␣1␣0 Với kiện E1 = tức Sherlock giải thích dựa vào thơng tin Lúc EXP2 = 300 + 29 + 45 + 75 = 449 Giá trị định: D = ∗ + 400 ∗ = 2809 số lẻ Làm tròn lên Nên EXP1 bị giảm xuống còn: EXP1 = 400 − (2803/100) = 371.91 −−−−−−−→ 372 Hàm trả output = EXP1 + EXP2 = 449 + 372 = 821 4.1.2 Trường hợp (1.0 điểm) Trong trường hợp E1 đoạn [4, 99], Sherlock giải thích anh biết Watson có người anh trai Sau thông tin mà Sherlock mô tả làm thay đổi EXP Watson: Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 5/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Thơng Khoảng Quan sát Sherlock Tác dụng tin E1 [4, 19] Watson có điện thoại đắt tiền Cộng (E1/4 + 19) anh lại tìm người ghép, EXP [20, 49] điện thoại người khác tặng [50, 65] Watson Cộng (E1/9 + 21) [66, 79] Điện thoại có nhiều vết xước biểu EXP đặt chung với nhiều đồ [80, 99] khác chìa khố, tiền xu Watson Cộng (E1/16 + 17) không đối xử với đồ EXP xa xỉ với anh Đây người chủ trước gây với điện thoại (Như mô tả trước.) Trên điện thoại có khắc tên: Harry Watson, thể thành (Như mô tả trước.) viên cũ gia đình tặng cho anh Sherlock giải thích thơng tin 1; sau Watson nghe xong cập nhật EXP2, EXP2 > 200 Sherlock tiếp tục giải thích thơng tin Wat- son cập nhật EXP2 tương ứng Sherlock giải thích thơng tin đến thông tin 2; Watson nghe xong cập nhật EXP2, EXP2 > 400 Sherlock tiếp tục giải thích thơng tin Watson cập nhật EXP2 tương ứng Lưu ý: Nếu Watson Sherlock giải thích thông tin 1, 3, Watson cộng thêm 15% EXP có (sau cập nhật EXP cho thông tin) Sau Sherlock giải thích cho Watson, Watson cho biết: "Harry tên viết tắt cho Harriet" Do vậy, Harry chị gái Watson anh trai Bị bất ngờ trước sai lầm này, EXP Sherlock bị giảm E1 EXP Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 6/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 4.2 Với EXP1 = 500, EXP2 = 450, E1 = 40 Theo thơng tin 2, ta có: Làm tròn lên EXP2 = EXP2 + (E1/9 + 21) ≈ 475.44 −−−−−−−→ 476 EXP1 Sherlock bị giảm xuống: Hàm trả giá trị: EXP1 = EXP1 − E1 = 500 − 40 = 460 output = 476 + 460 = 936 Ví dụ 4.3 Với EXP1 = 500, EXP2 = 450, E1 = 81 Theo thông tin 5, EXP2 Watson trước tiên cập nhật theo thông tin 2, ta có: Làm tròn lên EXP2 = EXP2 + (E1/4 + 19) ≈ 489.25 −−−−−−−→ 490 EXP2 = EXP2 + (E1/9 + 21) = 520 Vì EXP2 > 400 nên Sherlock tiếp tục giải thích thơng tin EXP2 Watson tiếp tục tăng lên: Làm tròn lên EXP2 = EXP2 + (E1/16 + 17) = 542.06 −−−−−−−→ 543 Vì Watson giải thích thơng tin 1, 2, 3, Watson cộng thêm 15%: Làm tròn lên Lớn 600 EXP2 = EXP2 ∗ 1.15 −−−−−−−→ 624.45 −−−−−−−→ 600 EXP1 Sherlock bị giảm xuống: Hàm trả giá trị: EXP1 = EXP1 − E1 = 419 output = 600 + 419 = 1019 Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 7/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 4.2 Nhiệm vụ 2: Truy tìm hành lý (2.5 điểm) Sau lần gặp gỡ đầu tiên, Watson ngạc nhiên với khả suy luận thiên tài Sherlock Ngay ngày hôm sau, hai người đến xem hộ số 221B đường Baker bà Hudson Lúc Thanh tra Thám tử Lestrade - người phụ trách vụ tự tử gần đến nhờ Sherlock điều tra vụ án Qua điều tra trường, Sherlock phát nạn nhân từ nơi có mưa đến bị hành lý Sau tra thời tiết Sherlock tìm nơi gần có mưa Cardiff Anh bắt đầu thử tìm đường từ Cardiff đến trường xảy vụ án để tìm kiếm hành lý nạn nhân Sinh viên yêu cầu viết hàm để mơ tả lại q trình tìm kiếm hành lý Sherlock, thông tin hàm mô tả sau: • Tên hàm: traceLuggage • Tham số đầu vào: – Chỉ số sức khoẻ Sherlock HP1 – Chỉ số kinh nghiệm Sherlock EXP1 – Số tiền Sherlock M1 – Sự kiện E2 • Kết trả về: HP1 + EXP1 + M1 Sau loại trừ khả năng, Sherlock tìm thấy đường có khả mà tên tội phạm đưa nạn nhân vất bỏ hành lý bên đường ngày phát hành lý xe Sherlock phải thử đường để tìm hành lý bị Trong đường sau đây, tuỳ thuộc vào máu kinh nghiệm Sherlock mà tạo tỉ lệ tìm vali khác Cụ thể: 4.2.1 Con đường 01 Gọi S số phương gần với giá trị EXP1 Nếu EXP1 ≥ S, xác suất để Sherlock tìm thấy vali đường là: P1 = 100% Nếu không: P1 = ( EXP1 + 80)/123 S Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 8/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 4.2.2 Con đường 02 Trên đường này, Sherlock cần chi khoản kiện trải qua đường Với số tiền M1 mình, Sherlock cần trải qua kiện sau đây: • Nếu HP1 < 200, Sherlock dừng lại cửa hàng ven đường mua thức ăn nước uống để hồi phục sức khoẻ Lúc HP Sherlock cộng thêm 30% HP có, đồng thời tiền bị trừ 150 Nếu HP1 không nhỏ 200, Sherlock cần mua nước uống lúc HP cộng thêm 10% HP có, đồng thời tiền bị trừ 70 • Quãng đường cần di chuyển dài nên Sherlock cần thuê taxi xe ngựa Giá tiền thuê taxi để hết quãng đường 200, xe ngựa 120 Nếu EXP Sherlock < 400, Sherlock chọn taxi, ngược lại xe ngựa Lúc này, EXP Sherlock tăng 13% • Trên quãng đường đi, Sherlock gặp người vô gia cư người hứa tiết lộ manh mối nhìn thấy vali đâu cho Sherlock nghe Sherlock giúp đỡ tiền Nếu EXP Sherlock < 300, Sherlock tin lời giúp đỡ người vô gia cư m = 100 nghe người hướng dẫn Nếu EXP Sherlock từ 300 trở lên, Sherlock giúp đỡ m = 120 nhờ người dẫn đường Mặc dù vậy, người vô gia cư nhầm lẫn với vali trống khác EXP Sherlock bị giảm 10% Nếu E2 số lẻ, kiện tiếp tục lặp lại có thời điểm kiện hoàn thành, số tiền cần chi trả lớn 50% số tiền có lúc bắt đầu đường 02 này, Sherlock chọn tiếp tục đến cuối quãng đường mà không trải qua kiện Lúc HP1 giảm 17%, đồng thời EXP1 tăng 17% Ngược lại, E2 số chẵn, Sherlock thực lượt hành động tiếp tục đến cuối Trong trường hợp này, M không đủ để thực hết hành động, Sherlock dừng thực sau hoàn thành hành động làm cho M1 = EXP HP cập nhật với E2 số lẻ Xác suất P2 tìm thấy vali tuyến đường tính lúc cuối đường cách tính đường 01 số tiền cần chi trả có phải tổng số tiền chi trả + với số tiền cần chi cho kiện số tiền cần chi cho kiện ? 4.2.3 Con đường 03 vế đầu Cho mảng số cố định gồm 10 phần tử 10 giá trị xác suất P = {32, 47, 28, 79, 100, 50, 22, 83, 64, 11} Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 9/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Gọi i số giá trị xác suất Pi mà Sherlock tìm thấy vali đường (i đánh số từ 0) Nếu E2 số có chữ số, giá trị giá trị i Nếu E2 số có chữ số, tính tổng chữ số lấy số hàng đơn vị giá trị tổng làm giá trị cho i Sau hết tuyến đường, tuyến đường mà Sherlock qua có xác suất 100%, tức Sherlock nhầm lẫn cần tính tốn lại Lúc EXP1 giảm 25% Nếu khơng phải tất 100%, trung bình cộng giá trị xác suất xác suất cuối tìm vali Nếu giá trị nhỏ 50%, Sherlock vất vả tìm vali, cuối cùng, HP1 giảm 15% EXP1 tăng 15% Ngược lại giá trị lớn 50%, Sherlock nhanh chóng tìm vali, cuối cùng, HP1 giảm 10% EXP1 tăng 20% (Lưu ý: EXP HP tính tốn giá trị sau qua 03 tuyến đường) Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 10/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 4.4 Với E2 = 39, HP1 = 333, EXP1 = 430, M1 = 890 Ta có: Giá trị số phương gần EXP1 S = 441, nên: Xác suất P1 = ( 441 430 + 80)/123 = 0.66 Trên đường 02: 50% số tiền ban đầu là: 890 ∗ 0.5 = 445 E2 = 39 số lẻ nên: • Do HP1 = 333 > 200 nên: M1 = 890 − 70 = 820 Làm tròn lên HP1 = 333 ∗ 1.1 = 366.3 −−−−−−−→ 367 Tổng số tiền chi 70 < 445 • Do EXP1 = 430 > 400 nên: M1 = 820 − 120 = 700 Làm tròn lên EXP1 = 430 ∗ 1.13 = 485.9 −−−−−−−→ 486 Tổng số tiền chi 70 + 120 = 190 < 445 • Do EXP1 = 486 > 300 nên: M1 = 700 − 120 = 580 Làm tròn lên EXP1 = 486 ∗ 0.9 = 437.4 −−−−−−−→ 438 Tổng số tiền chi 190 + 120 = 310 < 445 Tiếp tục lặp lại kiện: • Do HP1 = 367 > 200 nên: M1 = 580 − 70 = 510 Làm tròn lên HP1 = 367 ∗ 1.1 = 403.7 −−−−−−−→ 404 Tổng số tiền chi 310 + 70 = 380 < 445 • Do EXP1 = 540 > 400 nên: M1 = 510 − 120 = 390 Làm tròn lên EXP1 = 438 ∗ 1.13 = 494.94 −−−−−−−→ 495 Tổng số tiền chi 380 + 120 = 500 > 445 Lúc Sherlock dừng lại đến cuối đường Làm tròn lên HP1 = 404 ∗ 0.83 = 335.32 −−−−−−−→ 336 Làm tròn lên EXP1 = 495 ∗ 1.17 = 579.15 −−−−−−−→ 580 Số phương gần EXP1 576 nên Xác suất P2 = 100% Trên đường thứ 03: Với E3 = 39 Tổng chữ số 3+ = 12 Do đó: i = Vậy P3 = P [2] = 28% Xác suất trung bình: P = P1+P2+P3 = 65% > 50% Do vậy: Làm tròn lên HP1 = 336 ∗ 0.9 = 302.4 −−−−−−−→ 303 Lớn 600 EXP1 = 580 ∗ 1.2 = 696 −−−−−−−→ 600 Hàm trả về: 303 + 600 + 390 = 1293 Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 11/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 4.3 Nhiệm vụ 3: Đuổi theo taxi (3 điểm) Sau tìm hành lý, Sherlock suy luận rằng: Nạn nhân cầm theo điện thoại Chiếc điện thoại khơng có trường, khơng có hành lý Vậy, chỗ tên tội phạm Sherlock bảo Watson gửi tin nhắn đến điện thoại nạn nhân, Watson nhắn vừa tỉnh dậy sau bị ngất khơng biết có chuyện xảy Sau đó, hai hẹn người giữ điện thoại đến gặp địa để lấy lại đồ Sau tin nhắn ấy, Sherlock chắn rằng, tên tội phạm, lo lắng nghe nạn nhân sống Tên tội phạm đến điểm hẹn để xem tình trạng thực tế nạn nhân Sherlock Watson đến cửa hàng bên đường cách điểm hẹn khoảng 5m theo dõi Một taxi đến dừng đó, người ngồi taxi nhìn ngồi với vẻ tìm kiếm Khi người vơ tình nhìn hướng Sherlock, xe nổ máy rời Sherlock thông thuộc rõ đường thành phố anh sống Anh Watson chạy qua lối tắt đuổi theo taxi Sinh viên yêu cầu viết hàm sau để mơ tả lại q trình Thơng tin hàm sau: • Tên hàm: chaseTaxi • Tham số đầu vào: – Các thông tin Sherlock Watson HP1, EXP1 HP2, EXP2 – Mã kiện E3 • Yêu cầu hàm: – Khởi tạo ma trận 10x10 với phần tử mảng số nguyên khởi tạo giá trị Mảng chiều biểu diễn đồ mà taxi chya5 với Sherlock Watson đuổi theo Giá trị vị trí điểm số kỹ taxi vị trí – Bắt đầu vị trí (0,0), xe taxi theo chiều theo hàng Với lần qua điểm, điểm số taxi điểm ((E3 ∗ j) + (i ∗ 2)) ∗ (i − j) (với i số hàng j số cột) – Ta định nghĩa đường chéo trái ma trận vị trí X(i, j) đường theo hướng chéo từ vị trí hàng cột cho qua X kết thúc vị trí hàng cuối cột cuối Hướng chéo định nghĩa hướng mà số hàng cột thay đổi đơn vị (thay đổi tăng giảm) Ngược lại, đường chéo phải ma trận vị trí X(i, j) đường theo hướng chéo từ vị trí hàng cột cuối cho Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 12/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH qua X kết thúc vị trí hàng đầu cột đầu Ví dụ ta có ma trận: 123 456 789 Đường chéo trái điểm có toạ độ (1,0) bao gồm vị trí (1,0) (2,1), tức giá trị Trong đó, đường chéo phải điểm có toạ độ (1,2) bao gồm vị trí (1,2) (0,1) tức giá trị (Lưu ý: Chỉ số hàng cột 0, hàng từ xuống, cột từ trái sang) – Trong đó, Sherlock Watson theo lối tắt (đi theo cột) Ta cần ma trận để lưu điểm họ Điểm số họ qua địa điểm giá trị lớn đường chéo trái đường chéo phải taxi qua điểm (cần phải tính tất giá trị điểm vị trí cho taxi trước tính tốn điểm cho Sherlock Watson) Nếu điểm số số âm, lấy giá trị tuyệt đối – Xe taxi gặp Sherlock Watson điểm (i, j) Với i số giá trị điểm taxi lớn E3 ∗ Và j số giá trị điểm taxi nhỏ -E3 Nếu i j số có 02 chữ số tiếp tục cộng 02 chữ số lại tổng chữ số – Tại vị trí gặp đó, giá trị tuyệt đối điểm số taxi lớn người họ, họ không duổi kịp taxi Ngược lại, họ bắt kịp taxi – Nếu đuổi kịp, EXP HP người tăng tương ứng 12% 10% Ngược lại bị trừ tương ứng 12% 10% • Kết trả về: Hàm trả số điểm lớn tương ứng so xe taxi với Sherlock Watson điểm gặp (Lưu ý: Trả giá trị âm điểm số số âm) ma trận 2d Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 13/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 4.5 Với E3 = 59, HP1 = 400, EXP1 = 600, HP2 = 350, EXP2 = 500 Ta có ma trận điểm số vị trí qua taxi là: -59 -236 -531 -944 -1475 -2124 -2891 -3776 -4779 -120 -358 -714 -1188 -1780 -2490 -3318 -4264 63 -181 -480 -897 -1432 -2085 -2856 -3745 18 130 124 -242 -602 -1080 -1676 -2390 -3222 32 201 252 185 -303 -724 -1263 -1920 -2695 50 276 384 374 246 -364 -846 -1446 -2164 72 355 520 567 496 307 -425 -968 -1629 98 438 660 764 750 618 368 -486 -1090 128 525 804 965 1008 933 740 429 -547 162 616 952 1170 1270 1252 1116 862 490 Số giá trị dương ma trận lớn (E3 ∗ 2) 37 Vậy i = + → 10 → + = Số giá trị âm ma trận nhỏ (−E3) 44 Vậy j = + = Vị trí gặp (1, 8) Tại vị trí này, điểm taxi -3318 Tại vị trí này, điểm số Sherlock Watson 660 Do abs(-3318) > 660 nên Sherlock Watson không đuổi kịp taxi Các giá trị cập nhật lần lượt: EXP1 = EXP1 ∗ 0.88 = 528 HP1 = HP1 ∗ 0.9 = 360 EXP2 = EXP2 ∗ 0.88 = 440 HP2 = HP2 ∗ 0.9 = 315 Hàm trả về: -3318 Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 14/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 4.6 Với E3 = 99, HP1 = 400, EXP1 = 600, HP2 = 350, EXP2 = 500 Sau tính tốn ma trận điểm số vị trí taxi qua, ta có: Số giá trị dương ma trận lớn (E3 ∗ 2) 35 Vậy i = + = Số giá trị âm ma trận nhỏ (−E3) 44 Vậy j = + = Vị trí gặp (8, 8) Tại vị trí này, điểm taxi Tại vị trí này, điểm số Sherlock Watson 1442 Do abs(0) < 1442 nên Sherlock Watson đuổi kịp taxi Các giá trị cập nhật lần lượt: EXP1 = EXP1 ∗ 1.12 = 672 HP1 = HP1 ∗ 1.1 = 440 EXP2 = EXP2 ∗ 1.12 = 560 HP2 = HP2 ∗ 1.1 = 385 Hàm trả về: 1442 4.4 Nhiệm vụ 4: Mật hợp lệ (1.5 điểm) Sau đuổi theo Taxi, Sherlock Watson quay lại hộ để nghỉ ngơi Sherlock bị ý Laptop tìm hành lý Bên ngồi hành lý có thẻ có địa email nạn nhân, anh thử dùng email cho tên đăng nhập, cịn mật anh thử tất mật thông thường không Trong hành lý, Sherlock cịn tìm thấy sổ ghi lại nhiều chuỗi ký tự khác nhau, mật để đăng nhập Tuy nhiên, đa số số lại vi phạm quy tắc đặt mật cho Laptop Vì có q nhiều mật khẩu, SV yêu cầu viết hàm sau để kiểm tra tính hợp lệ mật Thơng tin hàm sau: • Tên hàm: checkPassword • Tham số đầu vào: – s: chuỗi cần kiểm tra có phải mật hợp lệ hay không – email: chuỗi chứa email nạn nhân Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 15/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH • u cầu hàm: Gọi se chuỗi ký tự nằm trước ký tự ’@’ email nạn nhân Email đảm bảo có ký tự ’@’ có chiều dài tối đa 100 ký tự Yêu cầu hợp lệ mật phải thỏa mãn đồng thời điều kiện sau: – Có ký tự có tối đa 20 ký tự – Mỗi ký tự mật chữ số, chữ thường, chữ in hoa, ký tự đặc biệt Ký tự đặc biệt ký tự sau: ’@’, ’#’, ’%’, ’$’, ’ !’ – Không chứa chuỗi se – Không chứa nhiều ký tự liên tiếp – Chứa ký tự đặc biệt • Kết trả về: – Nếu s mật hợp lệ trả -10 – Nếu s có độ dài ngắn độ dài tối thiểu trả -1 – Nếu s có độ dài dài độ dài tối đa trả -2 – Nếu s có chứa se trả -(300+) với vị trí xuất se – Nếu s có chứa nhiều ký tự liên tiếp trả -(400+) với vị trí chuỗi gồm nhiều ký tự liên tiếp – Nếu s khơng chứa ký tự đặc biệt trả -5 – Các trường hợp lại trả vị trí ký tự vi phạm yêu cầu hợp lệ nêu u cầu hàm • Lưu ý: có nhiều điều kiện bị vi phạm hàm trả điều kiện xuất trước phần Kết trả Ví dụ 4.7 Với email = "pink@gmail.com", s = "123xyz" Ta có: se = "pink" Chuỗi s có độ dài 6, ngắn độ dài tối thiểu Hàm trả giá trị: −1 Ví dụ 4.8 Với email = "pink@gmail.com", s = "012345pink#pink" Ta có: se = "pink" Chuỗi s có chứa se vị trí xuất = Hàm trả giá trị: −(300 + 6) = −306 Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 16/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH 4.5 Nhiệm vụ 5: Tìm mật Laptop (1.5 điểm) Sau loại bỏ mật khơng hợp lệ, cịn nhiều mật cần phải thử để tìm mật Laptop Sherlock để ý có mật giống xuất Sherlock đoán mật xuất nhiều lần mật Laptop SV yêu cầu viết hàm sau để tìm mật Laptop Thơng tin hàm sau: • Tên hàm: findCorrectPassword • Tham số đầu vào: – arr_pwds: mảng gồm mật – num_pwds: số lượng mật có mảng arr_pwds • Kết trả về: Vị trí mật mảng arr_pwds Một mật mật có số lần xuất mảng arr_pwds nhiều có độ dài dài số mật xuất nhiều Vì có nhiều mật nên hàm trả vị trí mật • Ghi khác: Testcase đảm bảo có khơng q 30 mật phân biệt mảng arr_pwds Ví dụ 4.9 Với arr_pwds = {"123xyz", "pink#pink", "pink123", "xxxx@xxxx", "pink#pink", "pink123", "pink123"} Ta có: • Mật "pink123" xuất lần • Mật "pink#pink" xuất lần • Mật "123xyz" xuất lần • Mật "xxxx@xxxx" xuất lần Do vậy, mật "pink123" có số lần xuất nhiều Vị trí "pink123" arr_pwds Hàm trả giá trị: Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 17/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH Ví dụ 4.10 Với arr_pwds = {"pink123", "xxxx@xxxx", "123xyz", "pink#pink", "pink#pink", "pink123"} Ta có: • Mật "pink123" xuất lần có độ dài • Mật "pink#pink" xuất lần có độ dài • Mật "123xyz" xuất lần • Mật "xxxx@xxxx" xuất lần Hai mật "pink123" "pink#pink" có số lần xuất nhiều (đều 2) Nhưng mật "pink#pink" dài "pink123" nên mật "pink#pink" Vị trí "pink#pink" arr_pwds Hàm trả giá trị: 4.6 Tạm kết Sau mở laptop, Desktop nạn nhân có số phần mềm văn phịng phần mềm định vị Phần mềm cài đặt kết nối đến điện thoại nạn nhân May mắn là, tên đăng nhập mật phần mềm giống với thông tin đăng nhập laptop Phần mềm bắt đầu tìm kiếm, khu vực hình bắt đầu thu nhỏ phạm vi hiển thị địa 221B phố Baker Bà Hudson chạy lên báo Taxi đậu đậu nhà, tài xế nhờ bà chuyển lời: "Taxi đặc biệt dành cho Sherlock Holmes." Sherlock hiểu chuyện, anh bảo Watson lại tiếp tục tìm kiếm, anh cần ngồi hít thở chút Sherlock làm để đối phó với tài xế taxi ngồi cửa, người mà khả cao thủ vụ án tự tử Liệu Watson có theo kịp Sherlock hỗ trợ anh đánh bại tên tội phạm Chúng ta tiếp tục thực nhiệm vụ Sherlock Watson phần Bài tập lớn Chúc bạn làm Bài tập lớn vui vẻ!!! Bài tập lớn môn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 18/21 TRƯỜNG ĐẠI HỌC BÁCH KHOA - ĐHQG-HCM KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH u cầu Để hồn thành tập lớn này, sinh viên phải: Đọc toàn tập tin mô tả Tải xuống tập tin initial.zip giải nén Sau giải nén, sinh viên nhận tập tin: main.cpp, main.h, study_in_pink1.h, study_in_pink1.cpp, file liệu đọc mẫu Sinh viên phải nộp tập tin study_in_pink1.h study_in_pink1.cpp nên không sửa đổi tập tin main.h chạy thử chương trình Sinh viên sử dụng câu lệnh sau để biên dịch: g++ -o main main.cpp study_in_pink1.cpp -I -std=c++11 Sinh viên sử dụng câu lệnh sau để chạy chương trình: ./main sa_tc_01_input Các câu lệnh dùng command prompt/terminal để biên dịch chạy chương trình Nếu sinh viên dùng IDE để chạy chương trình, sinh viên cần ý: thêm đầy đủ tập tin vào project/workspace IDE; thay đổi lệnh biên dịch IDE cho phù hợp IDE thường cung cấp nút (button) cho việc biên dịch (Build) chạy chương trình (Run) Khi nhấn Build IDE chạy câu lệnh biên dịch tương ứng, thông thường câu lệnh biên dịch file main.cpp Sinh viên cần tìm cách cấu hình IDE để thay đổi lệnh biên dịch: thêm file study_in_pink1.cpp, thêm option -std=c++11, -I Chương trình chấm tảng Unix Nền tảng chấm trình biên dịch sinh viên khác với nơi chấm thực tế Nơi nộp BKeL cài đặt để giống với nơi chấm thực tế Sinh viên phải chạy thử chương trình nơi nộp phải sửa tất lỗi xảy nơi nộp BKeL để có kết chấm thực tế Sửa đổi file study_in_pink1.h, study_in_pink1.cpp để hoàn thành tập lớn đảm bảo hai u cầu sau: • Chỉ có lệnh include tập tin study_in_pink1.h #include "main.h" include tập tin knight.cpp #study_in_pink1 "knight.h" Ngồi ra, khơng cho phép có #include khác tập tin • Hiện thực hàm mô tả Nhiệm vụ BTL Sinh viên khuyến khích viết thêm hàm để hồn thành BTL Bài tập lớn mơn Kỹ thuật lập trình - HK năm học 2023 - 2024 Trang 19/21