Prompt Title: PrinterQueue Management.

Created 1 year ago
Votes 0
Views 339 times
0
Human: Cho template của class PrinterQueue có 2 phương thức bắt buộc: 1. addNewRequest(int priority, string fileName) Phương thức đầu tiên sẽ thêm 1 file vào danh sách hàng đợi của máy in (bao gồm độ ưu tiên và tên file). Test case sẽ có tối đa 100 file cùng lúc trong hàng đợi 2. print() Phương thức thứ hai sẽ in tên file kèm xuống dòng và xóa nó ra khỏi hàng đợi. Nếu không có file nào trong hàng đợi, phương thức sẽ in ra "No file to print" kèm xuống dòng. PrinterQueue tuân theo các quy tắc sau: fileName có độ ưu tiên cao nhất sẽ được in trước. Các fileName có cùng độ ưu tiên sẽ in theo thứ tự FIFO (First In First Out) order. Nhiệm vụ của bạn là hiện thực class PrinterQueue thỏa mãn các yêu cầu dữ liệu trên Lưu ý: Bạn có thể thay đổi mọi thứ, thêm thư viện cần thiết ngoại trừ thay đổi tên class, prototype của 2 public method bắt buộc. class PrinterQueue { // your attributes public: // your methods void addNewRequest(int priority, string fileName) { // your code here } void print() { // your code here // After some logic code, you have to print fileName with endline } };
ChatGPT:

Để giải quyết bài toán này, chúng ta sẽ sử dụng một danh sách liên kết để lưu trữ các yêu cầu in và sắp xếp chúng theo độ ưu tiên và thứ tự nhập vào.

Đối với phương thức addNewRequest, chúng ta sẽ tìm kiếm vị trí thích hợp để chèn yêu cầu in vào danh sách theo độ ưu tiên và thứ tự nhập vào. Sau đó, chúng ta sẽ thêm yêu cầu in mới vào danh sách liên kết.

Đối với phương thức print, chúng ta sẽ kiểm tra xem danh sách liên kết có rỗng hay không. Nếu danh sách liên kết rỗng, chúng ta sẽ in ra thông báo "No file to print" kèm xuống dòng. Ngược lại, chúng ta sẽ in tên file đầu tiên trong danh sách, sau đó xóa nó ra khỏi danh sách.

Dưới đây là một cách để hiện thực class PrinterQueue thỏa mãn yêu cầu bài toán:

arduino
#include <iostream> #include <string> using namespace std; class PrinterQueue { private: struct PrintRequest { int priority; string fileName; PrintRequest* next; }; PrintRequest* head = nullptr; int count = 0; public: void addNewRequest(int priority, string fileName) { if (count == 100) { cout << "Queue is full" << endl; return; } PrintRequest* newRequest = new PrintRequest(); newRequest->priority = priority; newRequest->fileName = fileName; newRequest->next = nullptr; if (head == nullptr) { head = newRequest; } else { PrintRequest* curr = head; PrintRequest* prev = nullptr; while (curr != nullptr && curr->priority >= priority) { prev = curr; curr = curr->next; } if (prev == nullptr) { newRequest->next = head; head = newRequest; } else { prev->next = newRequest; newRequest->next = curr; } } count++; } void print() { if (head == nullptr) { cout << "No file to print" << endl; return; } cout << head->fileName << endl; PrintRequest* temp = head; head = head->next; delete temp; count--; } };

Trong ví dụ trên, chúng ta sử dụng một danh sách liên kết đơn để lưu trữ các yêu cầu in. Mỗi yêu cầu in được biểu diễn bởi một nút trong danh sách liên kết, chứa độ ưu tiên và tên file.

Trong phương thức addNewRequest, chúng ta sử dụng một vòng lặp để tìm kiếm vị trí thích hợp để chèn yêu cầu in mới vào danh sách

avatar
vue
Shared 1 prompt
Created 1 year ago

Leave a Comment

Related Tag Prompts

0
0
C++
1 year ago 2023-03-09 16:21:32 BumBood
0
0
C++ writer
1 year ago 2023-03-10 16:24:29 Daz
0
0
Unreal Engine Q&A.
1 year ago 2023-03-15 05:51:25 Mzee
0
0
C++ Matrix Constructor Error
1 year ago 2023-03-25 06:10:44 Ghazanfar
0
0
Convertir HTML a C++.
1 year ago 2023-03-31 13:34:27 igna
0
0
Robot Maze Solver.
1 year ago 2023-04-07 07:20:48 Constantin
0
0
Mastering C++17/20 Features
1 year ago 2023-04-08 16:00:23 Son Pham
0
0
获取时间戳差值
1 year ago 2023-04-11 08:04:01 v
0
0
教学
1 year ago 2023-05-07 12:01:15 xly
0
0
Advantages of Enums & Constexpr
1 year ago 2023-07-26 09:43:19 Asaf
0
1
Learning C++
1 year ago 2023-09-27 13:49:52 Steven