Advertisement
BeloMaximka

Belov_HW_O2_FRACTION

Sep 2nd, 2021 (edited)
866
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include "iostream"
  2. using namespace std;
  3. // Класс дробь. В полях знаменатель и числитель. Методы для ввода, сложения, вычитания, умножения, деления, вывода
  4. class Fraction
  5. {
  6. public:
  7.     void Set(int numerator, int denominator)
  8.     {
  9.         numer = numerator;
  10.         denom = denominator;
  11.     }
  12.     void Mult(Fraction second)
  13.     {
  14.         numer = numer * second.numer;
  15.         denom = denom * second.denom;
  16.         Reduce();
  17.     }
  18.     void Div(Fraction second)
  19.     {
  20.         numer = numer * second.denom;
  21.         denom = denom * second.numer;
  22.         Reduce();
  23.     }
  24.     void Sum(Fraction second)
  25.     {
  26.         Fraction result;
  27.         if (denom != second.denom)
  28.         {
  29.             result.denom = Adjust(second);
  30.         }
  31.         else
  32.         {
  33.             result.denom = denom;
  34.         }
  35.         result.numer = numer + second.numer;
  36.         numer = result.numer;
  37.         denom = result.denom;
  38.     }
  39.     void Substr(Fraction second)
  40.     {
  41.         Fraction result;
  42.         if (denom != second.denom)
  43.         {
  44.             result.denom = Adjust(second);
  45.         }
  46.         else
  47.         {
  48.             result.denom = denom;
  49.         }
  50.         result.numer = numer - second.numer;
  51.         numer = result.numer;
  52.         denom = result.denom;
  53.     }
  54.     void Print()
  55.     {
  56.         cout << numer << '/' << denom << endl;
  57.     }
  58.     void Reduce()
  59.     {
  60.         int bigger = numer > denom ? numer : denom;
  61.         int smaller = numer < denom ? numer : denom;
  62.         for (int i = smaller; i >= 1; i--)
  63.         {
  64.             if (bigger % i == 0 && smaller % i == 0)
  65.             {
  66.                 numer /= i;
  67.                 denom /= i;
  68.                 return;
  69.             }
  70.         }
  71.     }
  72. private:
  73.     int numer;
  74.     int denom;
  75.     int Adjust(Fraction& second)
  76.     {
  77.         // GCD - greatest common divisor
  78.         Fraction GCDdenom;
  79.         GCDdenom.numer = denom > second.denom ? denom : second.denom;
  80.         GCDdenom.denom = denom < second.denom ? denom : second.denom;
  81.         GCDdenom.Reduce();
  82.         int GDC = GCDdenom.numer * GCDdenom.denom;
  83.         numer *= GDC / denom;
  84.         second.numer *= GDC / second.denom;
  85.         return GDC;
  86.     }
  87. };
  88.  
  89. int main()
  90. {
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement