Advertisement
chevengur

СПРИНТ № 4 | Жизненный цикл объекта | Урок 3: Параметризованный конструктор 2/2

Nov 19th, 2023
1,180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 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.  
  10.     Rational() = default;
  11.  
  12.     Rational(int num, int den): numerator_(num), denominator_(den){
  13.         Normalize();
  14.     }
  15.  
  16.     Rational(int num ): numerator_(num), denominator_(1){}
  17.  
  18.     int Numerator() const {
  19.         return numerator_;
  20.     }
  21.  
  22.     int Denominator() const {
  23.         return denominator_;
  24.     }
  25.    
  26.     void SetNumerator(int numerator) {
  27.         numerator_ = numerator;
  28.     }
  29.  
  30.     void SetDenominator(int denominator) {
  31.         if (denominator != 0) {
  32.             denominator_ = denominator;
  33.         }
  34.     }
  35.  
  36. private:
  37.  
  38.     void Normalize(){
  39.         int deno = gcd(numerator_, denominator_);
  40.         numerator_ /= deno;
  41.         denominator_ /= deno;
  42.  
  43.         if(numerator_ < 0 || denominator_ < 0){
  44.             numerator_ *= -1;
  45.             denominator_ *= -1;
  46.         }
  47.     }
  48.  
  49.  
  50.     int numerator_ = 0;
  51.     int denominator_ = 1;
  52. };
  53.  
  54. Rational Add(Rational r1, Rational r2) {
  55.     int numerator = r1.Numerator() * r2.Denominator() + r2.Numerator() * r1.Denominator();
  56.     int denominator = r1.Denominator() * r2.Denominator();
  57.     // Создаём и возвращаем дробь с заданным числителем и знаменателем
  58.     return Rational{numerator, denominator};
  59. }
  60. int main() {
  61.     Rational zero;     // Дробь 0/1 = 0
  62.     cout << zero.Numerator() << "/" << zero.Denominator() << endl;
  63.     const Rational seven(7); // Дробь 7/1 = 7
  64.     cout << seven.Numerator() << "/" << seven.Denominator() << endl;
  65.     const Rational one_third(1, 3); // Дробь 1/3
  66.     vector<Rational> numbers;
  67.     numbers.push_back(Rational{7, 8});
  68.     // Следующие 2 строки эквивалентны - добавляют в numbers дробь 3/1
  69.     numbers.push_back(Rational{3});
  70.     numbers.push_back(3);
  71.     Rational sum = Add(Rational{1,6}, one_third);
  72.     // Выведет 1/2
  73.     cout << sum.Numerator() << "/" << sum.Denominator();
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement