Advertisement
kutuzzzov

Урок 3-2

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