1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập lớn kĩ thuật lập trình đề tài cho mảng 2 chiều chứa các số nguyên dương không trùng nhau mô pheng mê cung 1 robot được đặt ở vị trí x y

23 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cho mảng 2 chiều chứa các số nguyên dương (không trùng nhau) mô phỏng mê cung, 1 robot được đặt ở vị trí (x,y). Robot chỉ có thể đi theo 4 hướng(trên, dưới, trái, phải). Robot sẽ lựa chọn hướng(ô) có giá trị lớn để đi, các ô đi rồi sẽ không đi lại. Điểm được tính bằng tổng giá trị các ô robot đi qua. Xây dựng ứng dụng đảm bảo các tính năng cơ bản:
Tác giả Huỳnh Thái Dương
Người hướng dẫn Nguyễn Ngọc Thạch
Trường học Trường Đại học Giao thông Vận tải Thành phố Hồ Chí Minh
Chuyên ngành Kĩ Thuật Lập Trình
Thể loại Bài tập lớn
Năm xuất bản 2022-2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 23
Dung lượng 2,52 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI THÀNH PHỐ HỒ CHÍMINH BÁO CÁO BÀI TẬP LỚNMôn học: Kĩ Thuật Lập Trình Đề tài Đề tài : Cho mảng 2 chiều chứa các số nguyên dương khôn

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI THÀNH PHỐ HỒ CHÍ

MINH

BÁO CÁO BÀI TẬP LỚNMôn học: Kĩ Thuật Lập Trình

Đề tài Đề tài : Cho mảng 2 chiều chứa các số nguyên dương (không:

trùng nhau) mô phEng mê cung, 1 robot được đặt ở vị trí (x,y) Robot chỉcó thể đi theo 4 hướng(trên, dưới, trái, phải) Robot sẽ lựa chọnhướng(ô) có giá trị lớn để đi, các ô đi r[i sẽ không đi l\i Điểm được tínhb]ng t^ng giá trị các ô robot đi qua Xây dựng ứng dbng đảm bảo cáctính năng cơ bản:

1 Áp dbng các kidn thức trong môn ke thuật lập trình đêquy/struct/ chp phát đing/ đọc ghi file.

2 Cài đặt thuật toán xuht được kdt quả.3 Trưlng hợp đặt 2 robot ở 2 vị trí khác nhau Xuht kdt quả 2robot, so sánh kdt quả, xuht nhmng vị trí 2 robot đi trùng ô nhau.

4 Cho phnp 2 ngưli chơi đặt 2 robot ở vị trí bht ko trên ma trận,mpi lượt chỉ được 1 robot di chuyển, các ô robot đi r[i, robot khác khôngđược đi l\i Xuht kdt quả cqa 2 robot.

5 Bài toán mở, sinh viên có mở ring, thêm 1 số tính năng sángt\o Ví db: visualize đưlng đi robot, mô phEng step by step,…

Sinh viên thực hiên: Huỳnh Thái DươngMã số sinh viên: 2251330011

Mã học phần: 010112400107

Trang 2

Chúng em còn nhiều thiếu xót mong thầy góp ý và giúp đỡchúng em ạ Cảm ơn cô đã giúp em cùng các bạn đã có những kiếnthức nền tảng quý báu để lập trình

Kính chúc cô nhiều sức khỏe và luôn chèo lái con thuyền đến bến bờthành công ạ

Trang 3

1.Khai báo chương trình 5

3.Hàm Read maze: hàm đọc thông tin từ file input 65.Hàm Find path và push _ element :tìm đưlng đi cqa robot 8

a FIndpath 8

b.Push_element 9

6.Hàm Write_result: ghi kdt quả ra file output 9

7.Mode_Single_player chd đi chơi với các trưlng hợp cb thể: 10

8.Các hàm chức năng 13

9.Hàm main 17

VI.Các tính năng cqa chương trình 20

VII KẾT LUẬN 20

Trang 4

1.Ưu điểm: 202.Nhược điểm: 203.Kidn nghị và hướng phát triển: 20

Trang 5

I.ĐỀ TÀI

Đề tài Đề tài : Cho mảng 2 chiều chứa các số nguyên dương:(không trùng nhau) mô phỏng mê cung, 1 robot được đặt ở vịtrí (x,y) Robot chỉ có thể đi theo 4 hướng(trên, dưới, trái, phải).Robot sẽ lựa chọn hướng(ô) có giá trị lớn để đi, các ô đi rồi sẽkhông đi lại Điểm được tính b_ng t`ng giá trị các ô robot điqua Xây dựng ứng dụng đảm bảo các tính năng cơ bản:

1 cp dụng các kiến thức trong môn kd thuật lập trình đệquy/struct/ cfp phát đgng/ đọc ghi file

2 Cài đặt thuật toán xuft được kết quả.3 Trường hợp đặt 2 robot ở 2 vị trí khác nhau Xuft kết quả

2 robot, so sánh kết quả, xuft những vị trí 2 robot đitrùng ô nhau

4 Cho phip 2 người chơi đặt 2 robot ở vị trí bft kỳ trên matrận, mji lượt chỉ được 1 robot di chuyển, các ô robot đirồi, robot khác không được đi lại Xuft kết quả cka 2robot

5 Bài toán mở, sinh viên có mở rgng, thêm 1 số tính năngsáng tạo Ví dụ: visualize đường đi robot, mô phỏng stepby step,…

 Mê cung được đặt trong mgt file input có dạng:

6 52 1 14 12 173 16 22 91 234 56 87 31 6527 43 90 100 10176 54 32 99 66178 154 150 200 543Giả sử ta chọn chế đg mgt robot di chuyển và đặt ở vị trí(0,0) thì trong file output sẽ có dạng:

192 3 16 56 87 90 100 101 66 543 200 150 154 178 76 5443 27 4

Trang 6

III. Các kidn thức áp dbng

 Trong bài toán này, chúng ta áp dụng các kiến thức trong lập trình đệ quy, cấp phát động, đọc/ghi file và sử dụng struct để lưu trữ thông tin vềma trận và vị trí của robot

 Tài liệu tham khảo: slide bài giảng kỹ thuật lập trình, Kỹ thuật lập trình C cơ bản và nâng cao

IV. Cài đặt thuật toán

 Bài toán có thể được giải quyết b_ng thuật toán: chúng tasẽ đi tìm đường đi cka robot b_ng cách đi theo hướng có giá trị lớn nhft tại mji bước đi

 Khi đi đến ô tiếp theo, chúng ta sẽ đánh dfu ô đó đã đi qua Nếu không có ô nào có giá trị lớn hơn ô hiện tại, hoặc đã đi qua tft cả các ô trên ma trận, chúng ta sẽ tínht`ng giá trị các ô đã đi qua

V. CẤU TRÚC CHƯƠNG TRÌNH

1 Khai báo chương trình

 Các thư viên được sử dụng

biên dịch sử dụng không gian tên chuẩn, chứa tft cả các tên và kiểu thông dụng trong C++ Điều này tiết kiệm việc gõ std::

Trang 8

2 Định nghĩa Struct

 Chương trình sử dụng cấu trúc để lưu trữ thông tin về mê cung và bốt Cấu trúc Maze lưu trữ kích thước của mê cung, giá trị của các ô trong mê cung và danh sách các ô mà robot đã truy cập Cấu trúc Robot lưu trữ vị trí hiện tại của rô bốt, hướng mà rô bốt đang đối mặt và tổng giá trị của các ô mà rô bốt đã đi qua

rô-3.Hàm Read maze: hàm đọc thông tin từ fileinput

Hàm này sử dụng con trỏ và cấp phát động cho mê cung để chương trình có thể xử lý các mê cung có kích thước bất kỳ Đưa ra thông báo khi có ngoại lệ không mở được file.

Trang 9

4 Hàm is valid mode :kiểm tra xem một ô có hợp lệ để đi qua hay không.

 Hàm này kiểm tra các bước đi hợp lê cqa Robot,

trả về false trong trưlng hợp bước di chuyển vượtra ngoài mê cung hoặc đã đi qua, ngược l\i trả vềtrue.

Trang 10

5 Hàm Find path và push _ element :tìm đưlng đi cqa robot

a FIndpath

 B]ng cách qunt qua tht cả các bước đi hợp lê, tìm

bước di chuyển tidp theo có số điểm lớn nhht để đi Ndu tìm được bước đi hợp lê thì gọi đê quy để tidp tbc di chuyển tidp theo cho đd khi không còn bước di chuyển nào hợp lê.

 Với 2 mảng h]ng số: const int dx[] = {0, 0, -1,

1};

 const int dy[] = {-1, 1, 0, 0}; Sử dbng hai mảng này để lặp qua các bước di

chuyển như:

 Trên: ứng với dx[2] = -1 : x +dx[2] (giảm x đi mit

đơn vị ) và dy[2] = 0: y + dy[2] (y gim nguyên giá trị ban đầu.Tương tự với các hướng di chuyển khác

Trang 11

 Dưới: ứng với dx[3] = 1 và dy[3] = 0 Trái: ứng với dx[0] = 0 và dy[0] = -1 Phải: ứng với dx[1] = 0 và dy[1] = 0 Hàm này sử dbng hàm chức năng push_element

để lưu bước di chuyển cqa robot vào path_robot.b Push_element

 Sử dụng con trỏ với cfp phát đgng để thêm vị trí mới b_ngcách tạo mgt con trỏ tạm thời và cfp phát đgng con trỏ vớigiá trị size + 1 và lưu phần tử mới vào vị trí cuối cùng

6 Hàm Write_result: ghi kdt quả ra file output.

 Ghi kết quả vào file mà người dùng nhập vào, file đó có thể đã được tạo trước hoặc chương trình sẽ tạo file với tên file mà người dùng nhập vào để lưu dữ liệu

Trang 12

7 Mode_Single_player chd đi chơi với các trưlng hợp cb thể:

robot và xuft kết quả

 Hàm có sử dụng hàm gotoxy() để đưa con trỏ đến mgt vị trí cụ thể nh_m mô phỏng các bước di chuyển cka robot, hàm visualize để vẽ mê cung với các bước

 Trường hợp 2 robot

Trang 13

 In ra menu lựa chọn cho người dùng để thực hiện trò chơi Trong đó tham số go_back để thực hiện lựa chọn quay về menu trước Hàm start_two_players thực hiện chế đg chơi với tham số mode (true: ứng với chế đg 2 robot không đi trùng nhau và false: ứng với chế đg 2 robot có thể đi trùngô nhau).

Trang 15

8.Các hàm chức năng

 Hàm đưa con trỏ đến mgt vị trí cụ thể trên màn hình: gotoxy(int x, int y)

Hàm in ra menu chào mừng và menu chế độ trò chơi: welcome_game() , mode_game()

 Hàm tạo mê cung ngẫu nhiên với các giá trị khác nhau: create_random_maze(Maze** &maze, int &rows, int &cols)

Trang 16

 Hàm dùng để tìm đg dài cka chữ số (được sử dụng trong hàm visualize): length(int n)

 Hàm đặt mê cung về với ban đầu: reset_maze(Maze** &maze, int rows, int cols )

Trang 17

Hàm này được dùng để vẽ mê cung: visualize(Maze **maze, int rows, intcols, char mark = 'X')

Trang 18

 Hàm dùng để đưa ra lựa chọn kết thúc chương trình end_game()

 Hàm ghi điểm score_robot(Robot *path_robot, int step)

 Hàm thêm phần tử push_element(Robot *&path_robot, Robot new_element, int& size)

 Hàm hiển thị vị trí đi trùng nhau overlap_of_robots (Robot *path_robot1, int step1, Robot *path_robot2, int step2)\

Trang 19

 Hàm lựa chọn chế đg nhập mê cung maze_menu()

Trang 21

10.

Trang 22

VI. Các tính năng cqa chương trình.

 Đ c/ghi fileọ

Chương trình có tính năng đ c thông tin ma tr n và v trí c a robot t file ọậịkừinput.txt, và ghi kếết qu ra file output.txt.ả

 Tìm đưlng đi và hi n th kếết quểịả

 Tìm đưlng đi c a 2 robotq

Chương trình có tính năng cho phép đ t 2 robot v trí bấết kỳ trến ma tr n ặở ịậvà điếều khi n môỗi robot di chuy n lấền lểểượt Các ô đã đi qua b i robot seỗ ởkhông được đi l i b i robot kia Kếết qu c a 2 robot seỗ đạ ởả kược ghi ra file. Tìm các ô trùng nhau c a 2 robot:q

Sau khi tìm đường đi c a 2 robot, chkương trình seỗ tìm các ô mà 2 robot đã đi qua cùng nhau và hi n th lến màn hình.ểị

2.Nhược điểm:  Thuật toán tìm đường đi chưa được tối ưu tốt nhft, có thể

vẫn có những trường hợp lji mà chưa được khắc phục, vẫncòn cơ hgi để cải thiện trong việc xử lý lji, quản lý bg nhớ và tối ưu hóa thuật toán Mã nguồn vẫn còn mgt số đoạn không được hiệu quả khi chạy chương trình T` chức còn chưa tốt Chưa xử lý hết các ngoại lệ hoặc lji nhập vào cka chương trình

Trang 23

3.Kiến nghị và hướng phát triển: Từ những nhược điểm đã nhận ra ở phía trên em tim hiểucách để các step cka robot được rõ ràng và đẹp mắt hơn Trongtương lai, em rft mong sẽ làm được giao diện hiển thị trò chơi,in ra màn hình hay ho hơn, đầy đk màu sắc như video đầu tiênthầy Thạch gửi cho lớp tham khảo.

Bài tập lớn này không khó cũng không dễ, đòi hỏi ngườiviết code phải nắm vững những kiến thức cơ bản và nâng caocka c++ Do kinh nghiệm bản thân chưa có nhiều nên có thểbài code cka em đôi khi sẽ không được tối ưu trong mgt vàitrường hợp và em cần phải cố gắng, tự tìm kiếm nhiều kiếnthức để kĩ năng hoàn thiện hơn

Thông qua bài tập lớn này, em đã được ôn tập, thực hànhlại những kiến thức quý báu được thầy Nguyễn Ngọc Thạchtruyền đạt về lập trình Em rft mong sẽ được tiếp xúc với nhiềubài tập lớn hơn nữa để nâng cao trình đg cka chính bản thânmình qua đó tích lũy kinh nghiệm làm việc khi ra trường

Ngày đăng: 17/09/2024, 16:07

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w