[Buổi 26][Vòng đời & operator][Lab] Bài 2: Fraction Operators
Fraction Operators
Bối cảnh
Một Fraction object tự chuẩn hóa dấu và rút gọn ngay khi tạo.
Hãy overload + và == theo semantics tự nhiên.
Yêu cầu
- Class Fraction có constructor
(num,den)với den!=0. - Normalize bằng gcd, denominator luôn dương.
- Overload
operator+vàoperator==. - Đọc hai phân số; in tổng dạng a/b và
EQUAL/DIFF.
Yêu cầu tổ chức code
Phải có constructor và overload operator+, operator==.
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
Bốn số nguyên a b c d với b,d!=0.
Output
Hai dòng.
Ràng buộc
|value|≤10^6.
Ví dụ 1
Input
1 2 1 3
Output
5/6
DIFF
Giải thích
1/2 + 1/3 = 5/6, constructor/operator kết quả phải normalize để giữ phân số rút gọn. Hai input không bằng nhau nên dòng hai DIFF. Output là 5/6 rồi DIFF.
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
1 2 2 4
Output
1/1
EQUAL
Giải thích
1/2 và 2/4 được constructor chuẩn hóa cùng thành 1/2, nên operator== trả true. Tổng của hai phân số bằng 1, được biểu diễn canonical 1/1. Vì vậy output 1/1 và EQUAL.
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: LAB
- Độ khó: Medium
- Concepts: constructors, operator+, operator==, normalization, gcd
- Giới hạn kiến thức: B01-B26
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments