Advertisement
Evgenistan

Denomination

Aug 11th, 2022 (edited)
849
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <string>
  2. #include <vector>
  3. #include <iostream>
  4. #include <numeric>
  5. #include <cmath>
  6.  
  7. using namespace std;
  8. class Rational {
  9. public:
  10.     Rational() = default;
  11.     //{
  12.         //numerator_ = 0;
  13.         //denominator_ = 1;
  14.     //};
  15.  
  16.     Rational(int num)
  17.     {
  18.         numerator_ = num;
  19.     }
  20.     Rational(int num1, int num2)
  21.     {
  22.         if ( num2 != 0 )
  23.         {
  24.             numerator_ = num1;
  25.             denominator_ = num2;
  26.         }
  27.     }
  28.  
  29.     int Numerator() const {
  30.         return numerator_;
  31.     }
  32.  
  33.     int Denominator() const {
  34.         return denominator_;
  35.     }
  36. private:
  37.     int numerator_ = 0;
  38.     int denominator_ = 1;
  39. };
  40.  
  41. Rational Add(Rational r1, Rational r2) {
  42.     int numerator = r1.Numerator() * r2.Denominator() + r2.Numerator() * r1.Denominator();
  43.     int denominator = r1.Denominator() * r2.Denominator();
  44.    
  45.     /* if (denominator < 0)
  46.     {
  47.         numerator *=  (-1);
  48.         denominator *= (-1);
  49.     }*/
  50.    
  51.     if ( denominator < 0 )
  52.     {
  53.         numerator = abs(numerator);
  54.         denominator = abs(denominator);
  55.     }
  56.    
  57.     int numerator_temp =  numerator / gcd(numerator, denominator);
  58.     denominator = denominator / gcd(numerator, denominator);
  59.     numerator = numerator_temp;
  60.     // Создаём и возвращаем дробь с заданным числителем и знаменателем
  61.  
  62.     return Rational{numerator, denominator};
  63. }
  64. int main() {
  65.     Rational zero;     // Дробь 0/1 = 0
  66.     const Rational seven(7); // Дробь 7/1 = 7
  67.     const Rational one_third(1, 3); // Дробь 1/3
  68.  
  69.     vector<Rational> numbers;
  70.     numbers.push_back(Rational{7, 8});
  71.  
  72.     // Следующие 2 строки эквивалентны - добавляют в numbers дробь 3/1
  73.     numbers.push_back(Rational{3});
  74.     numbers.push_back(3);
  75.  
  76.     Rational sum = Add(Rational{1,6}, one_third);
  77.     // Выведет 1/2
  78.     cout << sum.Numerator() << "/" << sum.Denominator();
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement