Câu hỏi:

26/06/2024 15

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. 

Siêu phẩm 30 đề thi thử THPT quốc gia 2024 do thầy cô VietJack biên soạn, chỉ từ 100k trên Shopee Mall.

Mua ngay

Quảng cáo

Trả lời:

verified
Giải bởi Vietjack

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ả.

CÂU HỎI HOT CÙNG CHỦ ĐỀ

Câu 1:

Hãy sửa chương trình trong Nhiệm vụ 1 để thêm chức năng đi đến trang web kế tiếp (go forward). Sau khi người dùng chọn chức năng trở về trang web trước đó thì có thể sử dụng chức năng go forward để quay lại trang web vừa duyệt. 

Xem đáp án » 26/06/2024 22

Câu 2:

Sửa chương trình trong Nhiệm vụ 2 để in ra màn hình tổng số cặp đóng mở ngoặc của từng loại xuất hiện trong biểu thức.

Xem đáp án » 26/06/2024 15

Câu 3:

Cải tiến chương trình trong Nhiệm vụ 2 để có thể kiểm tra biểu thức có chứa ba loại dấu đóng mở ngoặc "()", "[]", "{}"

Xem đáp án » 26/06/2024 15

Câu 4:

Trong bài trước, các em đã học cách thiết lập kiểu dữ liệu ngăn xếp. Kiểu dữ liệu ngăn xếp được sử dụng khá phổ biến trong các ứng dụng thực tế. Theo em, có thể sử dụng kiểu dữ liệu này để mô phỏng chức năng quay lại trang web đã duyệt trong các trình duyệt thông dụng như Google Chrome hay Bing được không?

Xem đáp án » 26/06/2024 12

Bình luận


Bình luận