[Buổi 30][Template & ngoại lệ][HW] Bài 3: Điểm số an toàn bằng ngoại lệ


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Điểm số an toàn bằng ngoại lệ

Bối cảnh

Một SafeScore object luôn giữ value trong [0,100]. set(x)add(delta) phải ném invalid_argument nếu giá trị mới nằm ngoài miền; khi exception xảy ra, state cũ phải giữ nguyên. Hệ thống xử lý q lệnh SET x, ADD x, GET, đếm tổng số lỗi và in summary ERRORS k.

Bài Medium yêu cầu exception được dùng cho điều kiện bất thường nhưng có thể phục hồi. Điểm quan trọng là validate trước mutation để catch không phải "sửa lại" state đã hỏng.

B30 kết hợp hai ý tưởng: generic code để tránh copy thuật toán theo kiểu dữ liệu và exception để tách luồng lỗi khỏi luồng thành công. Exception chỉ nên xuất hiện ở điểm precondition/validation thất bại; state hoặc aggregate không được cập nhật trước khi biết thao tác đã hợp lệ. Với template, hãy xác định rõ các toán tử/operation mà type T cần hỗ trợ.

Yêu cầu

  1. Class SafeScore.
  2. SET/ADD throw invalid_argument khi vi phạm.
  3. GET in value.
  4. Mutation in OK/ERROR.
  5. Cuối in ERRORS.

Input

Dòng 1 initial q; q command.

Output

Mỗi command một dòng; cuối ERRORS k.

Ràng buộc

0≤initial≤100, q≤5000.

Ví dụ 1

Input

50 6
GET
ADD 30
ADD 30
GET
SET -1
GET

Output

50
OK
ERROR
80
ERROR
80
ERRORS 2

Giải thích

GET đầu50. ADD30 hợp lệ đưa80. ADD30 tiếp sẽ thành110 nên ném exception, catch in ERROR và state vẫn80. GET in80. SET -1 cũng ERROR, GET cuối vẫn80. Có2 lỗi nên summary ERRORS 2.

Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.

Ví dụ 2

Input

0 4
ADD -1
SET 100
ADD 0
GET

Output

ERROR
OK
OK
100
ERRORS 1

Giải thích

ADD -1 từ0 invalid nên ERROR. SET100 OK, ADD0 vẫn hợp lệ và GET100. Tổng chỉ1 exception nên ERRORS 1.

Ví dụ này đồng thời kiểm tra cả nhánh thành công và tính ổn định khi có lỗi/generic state. Nếu validation fail, output lỗi phải xuất hiện mà dữ liệu hợp lệ trước đó vẫn được giữ. Nếu generic function được instantiate với type khác, cùng logic xử lý vẫn phải tạo kết quả tương ứng theo type đó.

Thông tin học tập

  • Module: M08
  • Buổi: B30
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: class, exception, validation, command simulation, invariant
  • Giới hạn kiến thức: B01-B30
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo