Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int GCD(int a, int b)
  6. {
  7.     while (b)
  8.     {
  9.         a %= b;
  10.         swap(a, b);
  11.     }
  12.     return a;
  13. }
  14.  
  15. class Rational
  16. {
  17. public:
  18.     Rational() : p(0), q(1)
  19.     {}
  20.  
  21.     Rational(int numerator, int denominator) : p(numerator), q(denominator)
  22.     {
  23.         if (p > 0 && q < 0)
  24.         {
  25.             p = -p;
  26.             q = -q;
  27.         }
  28.  
  29.         if (p == 0)
  30.             q = 1;
  31.  
  32.         int t = GCD(p, q);
  33.         p /= t;
  34.         q /= t;
  35.     }
  36.  
  37.     int Numerator() const
  38.     {
  39.         return p;
  40.     }
  41.  
  42.     int Denominator() const
  43.     {
  44.         return q;
  45.     }
  46.  
  47. private:
  48.     int p;
  49.     int q;
  50. };
  51.  
  52. bool operator==(const Rational &a, const Rational &b)
  53. {
  54.     return (a.Denominator() == b.Denominator() && a.Numerator() == b.Numerator());
  55. }
  56.  
  57. Rational operator+(const Rational &a, const Rational &b)
  58. {
  59.     return Rational(a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(),
  60.                     a.Denominator() * b.Denominator());
  61. }
  62.  
  63. Rational operator-(const Rational &a, const Rational &b)
  64. {
  65.     return Rational(a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(),
  66.                     a.Denominator() * b.Denominator());
  67. }
  68.  
  69. void printRational(const Rational &r)
  70. {
  71.     cout << r.Numerator() << "/" << r.Denominator();
  72. }
  73.  
  74. void testRational(int n1, int d1, int n2, int d2)
  75. {
  76.     Rational r1(n1, d1);
  77.     Rational r2(n2, d2);
  78.     printRational(r1);
  79.     cout << " and ";
  80.     printRational(r2);
  81.     cout << "\nSum: ";
  82.     printRational(r1 + r2);
  83.     cout << " ";
  84.     printRational(r2 + r1);
  85.     cout << "\nDiff: ";
  86.     printRational(r1 - r2);
  87.     cout << " ";
  88.     printRational(r2 - r1);
  89.     cout << "\nEqu: " << (r1 == r2) << " = " << (r2 == r1) << endl << endl;
  90. }
  91.  
  92. int main()
  93. {
  94.     testRational(1, 1, 1, 1);
  95.     testRational(1, 1, 2, 2);
  96.     testRational(2, 2, 2, 2);
  97.     testRational(-1, -1, -1, -1);
  98.     cout << endl;
  99.     testRational(-1, 1, -2, 2);
  100.     testRational(1, -1, 2, -2);
  101.     testRational(-1, 1, 2, -2);
  102.  
  103.     testRational(0, -1, 2, -2);
  104.  
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement