Programming Practice

寫一個 C++ 程式語言的有理數 (rational numbers) 專案。假設一個有理數 p/q 是使用兩個互質的整數 p q 來表示,且 q 不為零。如果 q 為零時,設定該有理數為 0/1 ,即 p 0 q 1 的有理數。 此專案包含有理數介面 rational_number_class.h 的頭檔,有理數實作 rational_number_class.cpp 的原始檔, 和應用主程式 rational_number_class_app.cpp 的原始檔。 rational_number_class.h 中宣告一個有理數的類別 class Rational,包含有理數的建構函式,"-" (unary minus), "+", "-", "*", "/", "==", "!=", "<"、">", "<=", ">=", "=", "+=", "-=", "*=", "/=", rabs() (有理數絕對值) 運算,和有理數輸出、輸入的友函數。

如果一個有理數的分子和分母不互質時, 將分子和分母化簡 (simplify),即是各除以它們的最大公因數。當輸出有理數時,若該有理數為正的有理數,則不輸出正、負號;若該有理數為負的有理數,則輸出負號;若該有理數為 n/1 時,則輸出整數 n

rational_number_class_app.cpp 主程式中包含下列的副程式和計算:

  1. 寫出有理數的 minimum 和 maximum 副程式:Rational min(const Rational, const Rational) 和 Rational max(const Rational, const Rational)。

  2. 宣告下列有理數的物件變數:a, b, c, d, e, r, ,s, 和 t。

  3. 輸入 a, b, c, d, 和 e 的有數數值。

  4. 計算 r = -a + b * c - d / e,並輸出此設定句和 r 的結果。

  5. 計算 s = max(a / b, c * d) - min(a + c + e, b / d),並輸出此設定句和 s 的結果。

  6. 計算 if (a >= b) t = |a / b| else t = -(a * b),並輸出此設定句和 t 的結果。

  7. 計算 s += a,並輸出此設定句和 s 的結果。

  8. 計算 t *= b * e,並輸出此設定句和 t 的結果。

程式執行範例:

Enter rational number a (in the form of: p/q): 2/4
**** a: 1/2

Enter rational number b (in the form of: p/q):
10/-18
**** b: -5/9

Enter rational number c (in the form of: p/q):
4/0
**** c: 0


Enter rational number d (in the form of: p/q):
-6/-3
**** d: 2

Enter rational number e (in the form of: p/q):
10/15
**** e: 2/3

Compute r = -a + b * c - d / e.
**** The result is: r = -7/2

Compute s = max(a / b, c * d) - min(a + c + e, b / d)
**** The result is: s = 5/18

Compute if (a >= b) t = |a / b| else t = -(a * b).
**** The result is: t = 9/10

Compute s += a.
**** The result is: s = 7/9

Compute t *= b * e.
**** The result is: t = -1/3