[Buổi 26][Vòng đời & operator][Lab] Bài 2: Fraction Operators


LÀM BÀI

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

Author:
Problem types
Allowed languages
C++

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 +== theo semantics tự nhiên.

Yêu cầu

  1. Class Fraction có constructor (num,den) với den!=0.
  2. Normalize bằng gcd, denominator luôn dương.
  3. Overload operator+operator==.
  4. Đọ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/22/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/1EQUAL.

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

There are no comments at the moment.

Zalo