TopStudy

Đáp án và lời giải

Chuyên đề Tin 12 CTST Bài 1.3. Ứng dụng của hàng đợi

Về trang đề

Câu 1

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Liệt kê một số hoạt động hàng ngày cần dùng đến hàng đợi: phân bố tài nguyên của hệ điều hành, thứ tự gửi email, in tài liệu, xếp hàng mua vé, lấy số khám bệnh ở bệnh viện, xếp hàng thanh toán ở siêu thị,…

Câu 2

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Hàng đợi có những ứng dụng sau: phân bố tài nguyên của hệ điều hành, thứ tự gửi email, in tài liệu, xếp hàng mua vé, lấy số khám bệnh ở bệnh viện, xếp hàng thanh toán ở siêu thị,…

Câu 3

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Hàng đợi máy in được sử dụng như sau: Được sử dụng để quản lí thứ tự khi xử lý lệnh in. Khi nhiều tài liệu cần được in, thì các tài liệu được thêm vào vùng đệm máy in. Các tài liệu cần được in thêm vào hàng đợi của máy in với thao tác enqueue, sau đó máy in sẽ tuần tự lấy tài liệu cần in với thao tác là dequeue để thực hiện in.

Hình minh hoạ

Câu 4

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Máy chủ email thường xử lí các yêu cầu từ nhiều người dùng theo thứ tự như sau: Sử dụng hàng đợi để quản lí các yêu cầu đến từ máy khách, nhằm đảm bảo xử lý các yêu cầu theo thứ tự thích hợp (yêu cầu nào đến trước thì phục vụ trước). Các yêu cầu được enqueue vào hàng đợi và được dequeue để xử lý theo cơ chế FIFO.

Hình minh hoạ

Câu 5

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Trình bày ứng dụng của hàng đợi trong thuật toán First-Come, First-Served thường được dùng trong sắp xếp các tiến trình chờ xử lí của CPU:

Sử dụng hàng đợi để quản lí các nhiệm vụ cần thực hiện. Một trong những cách tiếp cận đơn giản được gọi là “đến trước, phục vụ trước” (First-Come, First-Served). Nghĩa là các nhiệm vụ được thêm vào cuối hàng đợi với thao tác enqueue theo thứ tự yêu cầu. Sau đó, các nhiệm vụ lấy ra khỏi hàng đợi với thao tác dequeue để thực hiện.

Hình minh hoạ

Câu 6

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Hãy viết chương trình in ra màn mình tên người chiến thắng với danh sách n (n ≥ 1) người chơi và số nguyên dương m (m > 0) được nhập từ bàn phím. Chạy chương trình với số người chơi n = 5.

Dữ liệu vào: danh sách tên các người chơi và số nguyên dương m (m > 0).

Dữ liệu ra: tên của người chiến thắng.

* Mã giả trò chơi Hot Potato:

hotPotato (players, m):

Nếu m <= 9 :

raise ValueError('Số lần chuyển phải lớn hơn zero') if len(players) == 0:

raise ValueError('Không có người chơi') Tạo queue rỗng

son trở thêm danh sách các người chơi vào queue

for p in players: Thêm p vào queue player = "

while queue khác rỗng:

for i in range(m)

Lấy ra player từ queue Thêm player vào queue Lấy ra player từ queue return player

#Tên người thắng #Còn người chơi

#Chuyển củ khoai m lần

#Loại người cầm củ khoai

* Code như sau:

def hotPotato (players, m):

if m <= 0 :

raise ValueError('Số lần chuyển phải lớn hơn zero')

if len(players) == 0:

raise ValueError("Không có người chơi')

queue initQueue()

for p in players:enqueue(queue, p)

player = "

#Tạo hàng đợi rỗng

#Thêm danh sách các người chơi vào queue

while not isEmptyQueue(queue):#Còn người chơi

for i in range(m): player dequeue(queue) enqueue(queue, player) player = dequeue(queue) return player

#Chuyển củ khoai m lần

#Loại người cầm củ khoai #Trả về tên người thắng

players = list(map(str, input('Nhập danh sách người chơi:').split()))

m = int(input('Nhập số lần chuyển: '))

if len(players) == 0:

print("Không có người chơi")

elif m <= 0:

print("Số lần chuyển > 9")

else:

winner hotPotato (players, m)

print("Danh sách người chơi:", players) print("Số lần chuyển:", m)

print("Người chiến thắng:", winner)

Câu 7

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

*Mã giả kiểm tra số Palindrome:

isPalindrome (a)

Nếu a ( @

raise ValueError('Giá trị tham số nhỏ hơn zero') Khởi tạo hàng đợi queue rỗng

Khởi tạo ngăn xếp stack rỗng while a khác 9 :

r = số dư a chia 10 Thêm r vào queue Thêm r vào stack

a = a chia nguyên 19 while queue khác rỗng Lấy ra digitl từ queue Lấy ra digit2 từ stack if digit1 khác digit2: return False

return True

#Lấy từng giá trị của a đưa vào queue và stack