Hãy viết chương trình mô phỏng quá trình xếp và lấy sách ra khỏi một ngăn tủ
Giải Chuyên đề Tin 12 Bài 3: Thực hành với dữ liệu ngăn xếp - Kết nối tri thức
Vận dụng 1 trang 15 Chuyên đề Tin học 12: Hãy viết chương trình mô phỏng quá trình xếp và lấy sách ra khỏi một ngăn tủ. Cho trước một số quyển sách, lần lượt xếp các quyển sách này vào ngăn tủ. Khi lấy ra, sách sẽ được lấy ra theo thứ tự quyển nào đưa vào sau sẽ được lấy ra trước. Để lấy được một quyền sách, chúng ta phải lấy các quyền sách ở phía ngoài ra trước. Ví dụ các quyển sách được xếp vào tủ theo thứ tự như sau: [English, Physic, Maths, Chemistry, History, Biology]
Nếu muốn lấy quyển sách Maths ra khỏi ngăn sách thì chúng ta cần lấy các quyển Biology, History, Chemistry ra trước.
Cho trước tệp chứa tên các quyển sách. Hãy tạo một ngăn xếp và đưa các quyển sách trong tệp vào ngăn xếp. Sau đó cho người dùng nhập vào tên quyển sách muốn lấy ra và in ra màn hình số quyển sách cần lấy ra trước khi lấy được quyển sách muốn lấy.
Lời giải:
Hướng dẫn và gợi ý cho bài toán: Có thể sử dụng ngăn xếp (stack) - một cấu trúc dữ liệu hoạt động theo nguyên tắc "Last In, First Out" (LIFO). Các bước thực hiện:
- Bước 1: Đọc danh sách các quyển sách từ tệp và đưa vào ngăn xếp.
- Bước 2: Yêu cầu người dùng nhập tên quyển sách muốn lấy ra.
- Bước 3: Duyệt qua ngăn xếp để tìm quyển sách đó, đồng thời đếm số quyển sách cần lấy ra trước nó.
Mã Python mẫu:
# Hàm để đọc danh sách các quyển sách từ tệp
def read_books_from_file(file_path):
with open(file_path, 'r') as file:
books = [line.strip() for line in file]
return books
# Hàm để mô phỏng quá trình lấy sách ra khỏi ngăn tủ
def simulate_book_retrieval(books, book_to_retrieve):
stack = books[:]
count = 0
while stack:
current_book = stack.pop()
count += 1
if current_book == book_to_retrieve:
return count
return -1 # Trường hợp không tìm thấy quyển sách cần lấy
def main():
# Đường dẫn tới tệp chứa danh sách các quyển sách
file_path = ‘books.txt’
# Đọc danh sách các quyển sách từ tệp
books = read_books_from_file(file_path)
# Yêu cầu người dùng nhập tên quyển sách muốn lấy ra
book_to_retrieve = input("Nhập tên quyển sách bạn muốn lấy ra: ")
# Mô phỏng quá trình lấy sách ra
count = simulate_book_retrieval(books, book_to_retrieve)
if count == -1:
print(f"Không tìm thấy quyển sách '{book_to_retrieve}' trong ngăn tủ.")
else:
print(f"Cần lấy {count-1} quyển sách trước khi lấy được quyển '{book_to_retrieve}'.")
if __name__ == "__main__":
main()
Giải thích mã:
- Hàm read_books_from_file: Đọc danh sách các quyển sách từ tệp và lưu vào một danh sách.
- Hàm simulate_book_retrieval:
Tạo một ngăn xếp từ danh sách các quyển sách.
Duyệt qua ngăn xếp bằng cách pop từng quyển sách ra và đếm số lượng quyển sách đã lấy.
Nếu tìm thấy quyển sách cần lấy, trả về số lượng sách đã lấy.
- Hàm main:
Đọc danh sách các quyển sách từ tệp.
Yêu cầu người dùng nhập tên quyển sách muốn lấy.
Gọi hàm mô phỏng quá trình lấy sách và in kết quả.
Lưu ý: rằng bạn cần phải có tệp books.txt chứa danh sách các quyển sách, mỗi quyển sách trên một dòng. Dưới đây là một ví dụ về nội dung tệp books.txt:
English
Physic
Maths
Chemistry
History
Biology
Chạy chương trình và nhập tên quyển sách muốn lấy ra để xem kết quả.
Lời giải bài tập Chuyên đề Tin 12 Bài 3: Thực hành với dữ liệu ngăn xếp hay, ngắn gọn khác:
Xem thêm lời giải bài tập Chuyên đề học tập Tin học 12 Kết nối tri thức hay, ngắn gọn khác:
Xem thêm các tài liệu học tốt lớp 12 hay khác:
- Giải Chuyên đề Tin học 12 Kết nối tri thức
- Giải Chuyên đề Tin học 12 Chân trời sáng tạo
- Giải Chuyên đề Tin học 12 Cánh diều
- Giải lớp 12 Kết nối tri thức (các môn học)
- Giải lớp 12 Chân trời sáng tạo (các môn học)
- Giải lớp 12 Cánh diều (các môn học)
Sách VietJack thi THPT quốc gia 2025 cho học sinh 2k7:
- Giải Tiếng Anh 12 Global Success
- Giải sgk Tiếng Anh 12 Smart World
- Giải sgk Tiếng Anh 12 Friends Global
- Lớp 12 Kết nối tri thức
- Soạn văn 12 (hay nhất) - KNTT
- Soạn văn 12 (ngắn nhất) - KNTT
- Giải sgk Toán 12 - KNTT
- Giải sgk Vật Lí 12 - KNTT
- Giải sgk Hóa học 12 - KNTT
- Giải sgk Sinh học 12 - KNTT
- Giải sgk Lịch Sử 12 - KNTT
- Giải sgk Địa Lí 12 - KNTT
- Giải sgk Giáo dục KTPL 12 - KNTT
- Giải sgk Tin học 12 - KNTT
- Giải sgk Công nghệ 12 - KNTT
- Giải sgk Hoạt động trải nghiệm 12 - KNTT
- Giải sgk Giáo dục quốc phòng 12 - KNTT
- Giải sgk Âm nhạc 12 - KNTT
- Giải sgk Mĩ thuật 12 - KNTT
- Lớp 12 Chân trời sáng tạo
- Soạn văn 12 (hay nhất) - CTST
- Soạn văn 12 (ngắn nhất) - CTST
- Giải sgk Toán 12 - CTST
- Giải sgk Vật Lí 12 - CTST
- Giải sgk Hóa học 12 - CTST
- Giải sgk Sinh học 12 - CTST
- Giải sgk Lịch Sử 12 - CTST
- Giải sgk Địa Lí 12 - CTST
- Giải sgk Giáo dục KTPL 12 - CTST
- Giải sgk Tin học 12 - CTST
- Giải sgk Hoạt động trải nghiệm 12 - CTST
- Giải sgk Âm nhạc 12 - CTST
- Lớp 12 Cánh diều
- Soạn văn 12 Cánh diều (hay nhất)
- Soạn văn 12 Cánh diều (ngắn nhất)
- Giải sgk Toán 12 Cánh diều
- Giải sgk Vật Lí 12 - Cánh diều
- Giải sgk Hóa học 12 - Cánh diều
- Giải sgk Sinh học 12 - Cánh diều
- Giải sgk Lịch Sử 12 - Cánh diều
- Giải sgk Địa Lí 12 - Cánh diều
- Giải sgk Giáo dục KTPL 12 - Cánh diều
- Giải sgk Tin học 12 - Cánh diều
- Giải sgk Công nghệ 12 - Cánh diều
- Giải sgk Hoạt động trải nghiệm 12 - Cánh diều
- Giải sgk Giáo dục quốc phòng 12 - Cánh diều
- Giải sgk Âm nhạc 12 - Cánh diều