Câu hỏi:
11/10/2026 6
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ị.
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ị.
Trả lời:
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)
Để 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Ủ ĐỀ
Câu 1:
Sử dụng cây tìm kiếm nhị phân để hiển thị các món trong tệp menu.inp ở Bài 8 theo thứ tự giá tiền tăng dần. Mỗi dòng in ra gồm tên món và giá tiền. Nếu có hai hoặc nhiều món cùng giá tiền thì các món đó được hiển thị theo thứ tự xuất hiện trong tệp menu.inp.
Sử dụng cây tìm kiếm nhị phân để hiển thị các món trong tệp menu.inp ở Bài 8 theo thứ tự giá tiền tăng dần. Mỗi dòng in ra gồm tên món và giá tiền. Nếu có hai hoặc nhiều món cùng giá tiền thì các món đó được hiển thị theo thứ tự xuất hiện trong tệp menu.inp.
Câu 2:
Trong bài 9, chúng ta đã học thao tác duyệt cây. Với bài toán thực tế quản lí danh bạn điện thoại, làm thế nào để 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ạ.
Trong bài 9, chúng ta đã học thao tác duyệt cây. Với bài toán thực tế quản lí danh bạn điện thoại, làm thế nào để 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ạ.
Câu 3:
Hãy vẽ cây tìm kiếm nhị phân ứng với
a) Dữ liệu tệp contacts.inp ở trong phần thực hành.
b) Từ cây nhận được ở ý a, thêm liên hệ “Anh, Nguyễn Văn Tùng, 0982 000 134”.
Hãy vẽ cây tìm kiếm nhị phân ứng với
a) Dữ liệu tệp contacts.inp ở trong phần thực hành.
b) Từ cây nhận được ở ý a, thêm liên hệ “Anh, Nguyễn Văn Tùng, 0982 000 134”.
Câu 4:
Sử dụng cây tìm kiếm nhị phân để viết chương trình quản lí danh sách học sinh của một lớp. Thông tin mỗi học sinh gồm mã (duy nhất), tên đầy đủ, ngày sinh. Chương trình cho phép thêm mới thông tin các học sinh, in danh sách sắp xếp theo mã từ nhỏ đến lớn và từ lớn đến nhỏ, tìm kiếm học sinh theo mã.
Sử dụng cây tìm kiếm nhị phân để viết chương trình quản lí danh sách học sinh của một lớp. Thông tin mỗi học sinh gồm mã (duy nhất), tên đầy đủ, ngày sinh. Chương trình cho phép thêm mới thông tin các học sinh, in danh sách sắp xếp theo mã từ nhỏ đến lớn và từ lớn đến nhỏ, tìm kiếm học sinh theo mã.
Câu hỏi mới nhất
Xem thêm »-
-
-
-
Trong CSDL QL_ThuVien, hãy xác định khóa chính của bảng MƯỢN SÁCH sau. Biết rằng trong một ngày quy định không được mượn một cuốn sách nhiều lần.
Số thẻ Mã số sách Ngày mượn Ngày trả TV-02
TO-012
5/9/2015
30/9/2015
TV-04
TN-103
12/9/2015
15/9/2015
TV-02
TN-102
24/9/2015
5/10/2015
TV-02
TO-012
5/10/2015
...
...
...
...
-
-
-
-
-
-
