Câu hỏi:

11/07/2024 135

Tiếp tục với ứng dụng quản lí danh bạ, chức năng hiển thị danh sách liên hệ theo thứ tự từ điển. Do hạn chế của màn hình, mỗi trang chỉ hiển thị được 20 liên hệ. Hãy thêm tính năng in các liên hệ ở trang n bất kì do người dùng nhập vào, điều kiện n nguyên, lớn hơn 0 và nhỏ hơn hoặc bằng tổng số trang có thể hiển thị.

Quảng cáo

Trả lời:

verified
Giải bởi Vietjack

Để thực hiện chức năng in các liên hệ ở trang n bất kỳ trong danh sách liên hệ theo thứ tự từ điển, chúng ta cần tính toán và hiển thị chỉ một phần của danh sách liên hệ tùy thuộc vào trang được yêu cầu. Dưới đây là một cách để thực hiện điều này:

class PhoneBook:

    def __init__(self):

        self.contacts = []

        self.page_size = 20

    def insert(self, contact):

        self.contacts.append(contact)

        self.contacts.sort(key=lambda x: x.name)

    def display_contacts(self, page_number):

        total_pages = (len(self.contacts) + self.page_size - 1) // self.page_size

        if page_number < 1 or page_number > total_pages:

            print("Invalid page number. Please enter a number between 1 and {}.".format(total_pages))

            return

        start_index = (page_number - 1) * self.page_size

        end_index = min(start_index + self.page_size, len(self.contacts))  

        print("Contacts - Page", page_number, "/", total_pages)

        for i in range(start_index, end_index):

            print("Name:", self.contacts[i].name, "- Phone:", self.contacts[i].phone_number)

# Sử dụng

phone_book = PhoneBook()

# Thêm các liên hệ

phone_book.insert(Contact("Anh An", "0901.000.159"))

phone_book.insert(Contact("Bố", "0983 000 131"))

phone_book.insert(Contact("Mẹ", "0962 000 481"))

phone_book.insert(Contact("ICTLab Station", "024 124 000 313"))

phone_book.insert(Contact("John Doe", "123456789"))

phone_book.insert(Contact("Alice Smith", "987654321"))

phone_book.insert(Contact("Bob Johnson", "456789123"))

phone_book.insert(Contact("Anh, Nguyễn Văn Tùng", "0982 000 134"))

# Hiển thị danh sách liên hệ theo trang

page_number = int(input("Enter page number: "))

phone_book.display_contacts(page_number)

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

Lời giải

Để hiển thị các món trong tệp menu.inp theo thứ tự giá tiền tăng dần bằng cây tìm kiếm nhị phân, chúng ta cần đọc dữ liệu từ tệp, sau đó chèn mỗi món vào cây tìm kiếm nhị phân dựa trên giá tiền của món. Nếu có nhiều món có cùng giá tiền, chúng ta có thể sử dụng danh sách liên kết hoặc danh sách kết hợp để lưu trữ các món có cùng giá tiền. Dưới đây là một cách để thực hiện điều này:

class MenuItem:

    def __init__(self, name, price):

        self.name = name

        self.price = price

class TreeNode:

    def __init__(self, menu_item):

        self.menu_item = menu_item

        self.left = None

        self.right = None

        self.same_price = []  # Danh sách các món có cùng giá tiền

class MenuDatabase:

    def __init__(self):

        self.root = None

    def insert(self, menu_item):

        self.root = self._insert_recursive(self.root, menu_item)

    def _insert_recursive(self, root, menu_item):

        if root is None:

            return TreeNode(menu_item)

        if menu_item.price < root.menu_item.price:

            root.left = self._insert_recursive(root.left, menu_item)

        elif menu_item.price > root.menu_item.price:

            root.right = self._insert_recursive(root.right, menu_item)

        else:

            root.same_price.append(menu_item)

        return root

    def display_menu_by_price(self, root):

        if root:

           self.display_menu_by_price(root.left)

            print("Name:", root.menu_item.name, "- Price:", root.menu_item.price)

            for item in root.same_price:

                print("Name:", item.name, "- Price:", item.price)

           self.display_menu_by_price(root.right)

# Đọc dữ liệu từ tệp menu.inp và chèn mỗi món vào cây tìm kiếm nhị phân

menu_db = MenuDatabase()

with open("menu.inp", "r") as file:

    for line in file:

        name, price = line.strip().split(", ")

        menu_item = MenuItem(name, float(price))

        menu_db.insert(menu_item)

# In danh sách món theo thứ tự giá tiền tăng dần

print("Menu sorted by price (ascending):")

menu_db.display_menu_by_price(menu_db.root)

Lời giải

Với bài toán thực tế quản lí danh bạn điện thoại, để sử dụng các thao tác đó vào cây tìm kiếm nhị phân để thêm, tìm kiếm, hiển thị toàn bộ các liên hệ theo thứ tự sắp xếp của tên lên hệ trong danh bạ ta phải viết ứng dụng quản lí danh bạ, sử dụng cấu trúc dữ liệu cây tìm kiếm nhị phân để viết ứng dụng này.

Lời giải

Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.

Nâng cấp VIP

Vietjack official store
Đăng ký gói thi VIP

VIP +1 - Luyện thi tất cả các đề có trên Website trong 1 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +3 - Luyện thi tất cả các đề có trên Website trong 3 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +6 - Luyện thi tất cả các đề có trên Website trong 6 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +12 - Luyện thi tất cả các đề có trên Website trong 12 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay