[Buổi 26][Vòng đời & operator][WS] Bài 1: Fraction Toolkit
Fraction Toolkit
Bối cảnh
Xây toolkit phân số nhỏ có constructor giữ invariant và các operator tự nhiên.
Không dùng inheritance/template.
Yêu cầu
- Class Fraction normalized.
- Command:
ADD a b c d,EQ ...,LT .... - ADD in phân số rút gọn; EQ/LT in TRUE/FALSE.
- operator+ / == / < phải nằm trong class.
Yêu cầu tổ chức code
Phải overload ít nhất +, ==, <.
Online Judge chấm output. Giảng viên có thể review thêm cấu trúc code để xác nhận học viên luyện đúng kỹ năng OOP của buổi.
Input
Dòng 1 q; q command.
Output
Mỗi command một dòng.
Ràng buộc
1≤q≤1000, denominator !=0.
Ví dụ 1
Input
3
ADD 1 2 1 3
EQ 1 2 2 4
LT 1 3 1 2
Output
5/6
TRUE
TRUE
Giải thích
ADD 1/2 + 1/3 tạo 5/6. EQ 1/2 và 2/4 là TRUE sau normalize. LT 1/3 < 1/2 là TRUE theo cross multiplication. Ba command lần lượt cho 5/6, TRUE, TRUE.
Mẫu này đồng thời kiểm tra invariant mà constructor/operator phải giữ. Kết quả không chỉ đúng về giá trị cuối mà còn phải được biểu diễn ở dạng canonical của class; các object nguồn vẫn giữ state riêng nếu phép toán được thiết kế theo value semantics.
Ví dụ 2
Input
2
ADD -1 2 1 2
LT 3 4 2 3
Output
0/1
FALSE
Giải thích
ADD -1/2 + 1/2 bằng0 và normalize thành 0/1. LT 3/4 < 2/3 là false vì 0.75 lớn hơn khoảng0.667. Output 0/1, FALSE.
Mẫu này đồng thời kiểm tra invariant mà constructor/operator phải giữ. Kết quả không chỉ đúng về giá trị cuối mà còn phải được biểu diễn ở dạng canonical của class; các object nguồn vẫn giữ state riêng nếu phép toán được thiết kế theo value semantics.
Thông tin học tập
- Module: M07
- Buổi: B26
- Loại bài: WORKSHOP
- Độ khó: Medium
- Concepts: constructors, operator+, operator==, operator<, normalized objects
- Giới hạn kiến thức: B01-B26
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments