Võ Tiến Kỹ Thuật Lập Trình Tài liệu qua vòng giữ xe trước khi vào BTL Lý Thuyết Bài Tập Lớn SHERLOCK A STUDY IN PINK - Phần 2 Thảo luận BTL môn KTLT, DSA, NMLT, PPL .com/groups/211867931379013 Tp. Hồ Chí Minh, Tháng 3/2024 https://www.com/groups/211867931379013 Trang 1/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến Mục lục 1 Các kiên thức cần có 3 2 Enum trong c++ 4 3 Array 9 4 Pointer 14 4.1 Cách dùng cơ bản .2 con trỏ NULL .3 Cách Dùng array .4 Cấp phất động. 19 5 Function 23 6 Ifstream và string 26 7 Lập trình hướng đối tượng (OOP) 27 7.2 Định nghĩa Class .1 Get và Set .8 Static data members .9 Con trỏ This.
42 8 Danh sách liên kết 43 9 Ứng Dụng BTL: 46 10 Chơi Game 50 https://www.com/groups/211867931379013 Trang 2/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến 1 Các kiên thức cần có 1. Operations Phần này các bạn tự tìm hiểu nha nằm ở phần BTL trước rồi 2. Control Flow - If Phần này các bạn tự tìm hiểu nha nằm ở phần BTL trước rồi 3.
Control Flow - Loop Phần này các bạn tự tìm hiểu nha nằm ở phần BTL trước rồi 4. String Phần này các bạn tự tìm hiểu nha nằm ở phần BTL trước rồi 5. Structure Phần này không dùng trong BTL này các bạn cũng có thể tìm hiểu và ứng dụng nó trong BTL này 9. xử lí file với thư viện ifstream 11.
Linked list https://www.com/groups/211867931379013 Trang 3/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến 2 Enum trong c++ KTLT2: Enum Enum trong C++ là một kiểu dữ liệu do người dùng định nghĩa, cho phép bạn tạo ra một tập hợp các giá trị hằng số nguyên được đặt tên. Điều này giúp cho việc lập trình trở nên rõ ràng và dễ quản lý hơn khi bạn cần một tập hợp các giá trị cố định, như các ngày trong tuần, các mùa trong năm, hoặc các trạng thái của một máy trạng thái. enum Color { RED, GREEN, BLUE }; Trong ví dụ trên, Color là tên của kiểu dữ liệu enum và RED , GREEN , BLUE là các giá trị của nó.
Mặc định, giá trị đầu tiên RED sẽ có giá trị là 0, GREEN sẽ là 1, và BLUE sẽ là 2. Bạn có thể gán giá trị cụ thể cho các giá trị enum nếu muốn: enum Color { RED = 1, GREEN = 2, BLUE = 4 }; Cách sử dụng enum: Color color = Color::RED; Color color = RED; Color color = Color(0) Bài tập tự tìm hiểu: Đọc nội dung code sau để trả lời các câu hỏi 1,2 1 enum Color { 2 RED, 3 GREEN, 4 BLUE 5 }; 1. Trong khai báo enum sau, giá trị của RED là bao nhiêu? a) 0 b) 1 c) -1 d) Không xác định solution : TODO 2. Trong khai báo enum sau, giá trị của GREEN là bao nhiêu? a) 1 b) 2 c) 3 d) 4 solution : TODO 3.
Trong khai báo enum sau, giá trị của BLUE là bao nhiêu? 1 enum Color { 2 RED = 3, 3 GREEN, 4 BLUE 5 }; https://www.com/groups/211867931379013 Trang 4/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến a) 1 b) 5 c) 3 d) 4 solution : TODO 4. Trong khai báo enum sau, kết quả đoạn code sau 1 enum ElementType {PATH = 2, WALL, FAKE_WALL = 6}; 2 int main() 3 { 4 std::cout << int(PATH) << " " 5 << int(ElementType::FAKE_WALL - ElementType::WALL); 6 } a) 2 3 b) 2 2 c) 1 2 d) 1 3 solution : TODO 5. Trong khai báo enum sau, kết quả result 1 enum ElementType {PATH = 2, WALL, FAKE_WALL = 6}; 2 int main() 3 { 4 ElementType result = ElementType(3); 5 } a) WALL b) PATH c) FAKE_WALL d) UNKNOWN solution : TODO 6.
Trong khai báo enum sau, kết quả 1 enum ElementType {PATH = 2, WALL, FAKE_WALL = 6}; 2 3 std::string elementTypeName(ElementType element) { 4 switch (element) { 5 case PATH: return "PATH"; 6 case WALL: return "WALL"; 7 case FAKE_WALL: return "FAKE_WALL"; 8 default: return "UNKNOWN"; 9 } 10 } 11 12 int main() 13 { 14 ElementType result = ElementType(4); // Không hợp lệ, sẽ trả về "UNKNOWN" 15 16 std::cout << elementTypeName(result); 17 return 0; 18 } a) WALL b) PATH c) FAKE_WALL d) UNKNOWN solution : TODO 7. Trong khai báo enum sau, kết quả https://www.com/groups/211867931379013 Trang 5/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến 1 enum RobotType { C=0, S, W, SW }; 2 int main() 3 { 4 int RobotHP[] = {2, 4, 5, 7}; 5 6 7 std :: cout << RobotHP[C] << " " << RobotHP[SW]; 8 return 0; 9 } 10 a) 2 7 b) 7 2 c) Lỗi biên dịch d) Lỗi thực thi solution : TODO 8. Trong khai báo enum sau, kết quả 1 #include <iostream> 2 3 enum RobotType { C=0, S, W, SW }; 4 5 int main() { 6 RobotType Type = C; 7 8 9 std::cout << (Type == RobotType(C)); 10 11 return 0; 12 } 13 14 a) 1 b) 2 c) -1 d) 0 solution : TODO 9.
Trong khai báo enum sau, kết quả 1 #include <iostream> 2 3 enum RobotType { C=3, S, W, SW }; 4 5 int main() { 6 RobotType Type = C; 7 8 9 std::cout << (Type == RobotType(C)); 10 11 return 0; 12 } 13 14 https://www.com/groups/211867931379013 Trang 6/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến a) 1 b) 2 c) -1 d) 0 solution : TODO 10. Trong khai báo enum sai ở dòng nào 1 #include <iostream> 2 3 enum RobotType { C = 0, S , W , SW }; 4 enum ItemType { MAGIC_BOOK = 0, ENERGY_DRINK, FIRST_AID, ↪ EXCEMPTION_CARD,PASSING_CARD }; 5 int main() { 6 7 8 9 std::cout << ((RobotType::C) == (ItemType::MAGIC_BOOK)); 10 11 return 0; 12 } 13 14 a) 2 b) 3 c) 9 d) 4 solution : TODO 11. Trong khai báo enum sai hàng nào 1 #include <iostream> 2 3 enum RobotType { C = 0, S, W, SW }; 4 5 void printRobotType(RobotType type) { 6 switch(type) { 7 case C: 8 std::cout << "C"; 9 break; 10 case S: 11 std::cout << "S"; 12 break; 13 case W: 14 std::cout << "W"; 15 break; 16 case SW: 17 std::cout << "SW"; 18 break; 19 default: 20 std::cout << "!!!"; 21 } 22 } 23 24 int main() { 25 RobotType robot = SW; 26 printRobotType(10); 27 28 return 0; 29 } https://www.com/groups/211867931379013 Trang 7/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL.
Võ Tiến 30 31 a) 3 b) 25 c) 26 d) không có lỗi solution : TODO 12. Trong khai báo enum in ra gì 1 #include <iostream> 2 3 enum RobotType { C = 0, S, W, SW }; 4 5 void printRobotType(RobotType type) { 6 switch(type) { 7 case C: 8 std::cout << "C"; 9 break; 10 case S: 11 std::cout << "S"; 12 break; 13 case W: 14 std::cout << "W"; 15 break; 16 case SW: 17 std::cout << "SW"; 18 break; 19 default: 20 std::cout << "!!!"; 21 } 22 } 23 24 int main() { 25 RobotType robot = SW; 26 printRobotType(RobotType(10)); 27 28 return 0; 29 } 30 31 a) !! b) SW c) w d) S solution : TODO https://www.com/groups/211867931379013 Trang 8/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến 3 Array KTLT2: Array Array là một cấu trúc dữ liệu cơ bản cho phép lưu trữ một tập hợp cố định các phần tử có cùng kiểu dữ liệu. Mảng được sử dụng để lưu trữ dữ liệu một cách liên tục trong bộ nhớ, và mỗi phần tử trong mảng có thể được truy cập thông qua chỉ số của nó.
• Khai báo mảng: Để khai báo một mảng, bạn cần xác định kiểu dữ liệu của các phần tử và số lượng phần tử mà mảng có thể chứa. 1 int myArray[10]; // Mảng của 10 số nguyên 2 int myArray[N]; // N không phải const thì không cho phép sai • Khởi tạo mảng: Bạn có thể khởi tạo mảng với một danh sách các giá trị cụ thể hoặc để trình biên dịch tự động gán giá trị. 1 int myArray[5] = {1, 2, 3, 4, 5}; // Khởi tạo mảng với giá trị cụ thể 2 int myArray[] = {1, 2, 3, 4, 5}; // Kích thước mảng được xác định bởi số ↪ lượng giá trị • Truy cập phần tử mảng: Bạn có thể truy cập hoặc thay đổi giá trị của một phần tử trong mảng thông qua chỉ số của nó. 1 int value = myArray[2]; // Truy cập phần tử thứ ba trong mảng 2 myArray[0] = 9; // Thay đổi giá trị của phần tử đầu tiên trong mảng • Kích thước mảng: Kích thước của mảng không thể thay đổi sau khi nó đã được khai báo.
Để xác định kích thước của mảng, bạn có thể sử dụng toán tử sizeof. 1 // Tính số lượng phần tử trong mảng 2 int size = sizeof(myArray) / sizeof(myArray[0]); • Mảng đa chiều: C++ cũng hỗ trợ mảng đa chiều, thường được sử dụng để biểu diễn bảng, ma trận, hoặc thông tin không gian nhiều hơn. 1 int matrix[3][4]; // Mảng hai chiều với 3 hàng và 4 cột https://www.com/groups/211867931379013 Trang 9/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến • Mảng có 5 phần tử, mỗi phần tử chứa một ký tự từ chữ “ARRAY”.
• Mỗi phần tử được biểu diễn với ba thuộc tính: Địa chỉ, Giá trị Mảng và Chỉ số. • Các địa chỉ được ghi từ 11 đến 15. • Giá trị mảng được ghi với các chữ cái A, R, R, A, Y tương ứng. • Các chỉ số được ghi từ 01 đến 05.
• Có chỉ dẫn về Giới hạn Dưới tại chỉ số 01 và Giới hạn Trên tại chỉ số 05. Này không giống trong c++ là bắt đầu từ 00 Một số cách truy cập phần tử array xem ở phần pointer Bài tập tự tìm hiểu: 1. Kích thước của một mảng trong C++ phải được xác định như thế nào? a) Tại thời điểm chạy b) Tại thời điểm biên dịch c) Bất kỳ lúc nào d) Không cần xác định solution : TODO 2. Làm thế nào để truy cập phần tử đầu tiên của mảng myArray? a) myArray[0] b) myArray[1] c) myArray.begin() solution : TODO 3.
Kết quả output? 1 int myNumbers[5] = {2, 4, 6, 8, 10}; 2 cout << myNumbers[3]; a) 2 b) 4 c) 8 d) 10 solution : TODO 4. Kết quả output? https://www.com/groups/211867931379013 Trang 10/61 Thảo luận BTL môn KTLT, DSA, NMLT, PPL. Võ Tiến 1 int myNumbers[5] = {2}; 2 cout << myNumbers[2]; a) 2 b) 4 c) lỗi d) 0 solution : TODO 5. Điều gì sẽ xảy ra nếu bạn cố gắng truy cập một chỉ số ngoài giới hạn của mảng? a) Chương trình sẽ tự động thêm phần tử mới b) Chương trình sẽ báo lỗi tại thời điểm biên dịch c) Chương trình có thể gây ra lỗi thời gian chạy d) Chương trình sẽ trả về giá trị mặc định solution : TODO 6.
Một mảng hai chiều trong C++ có thể được hiểu như thế nào?