Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.54 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <sstream>
  4. #include <fstream>
  5. #include <algorithm>
  6. #include <vector>
  7. using namespace std;
  8. class Rational
  9. {
  10. public:
  11.     Rational()
  12.     {
  13.         numenator = 0;
  14.         denominator = 1;
  15.     }
  16.  
  17.     Rational(int num, int denom) //Конструктор должен делать дробь несократимой
  18.     {
  19.         numenator = num;
  20.         denominator = denom;
  21.         int tmp = nod(num, denom);
  22.         numenator /= tmp;
  23.         denominator /= tmp;
  24.         if(denominator < 0)
  25.         {
  26.             denominator *= -1;
  27.             numenator *= -1;
  28.         }
  29.     }
  30.  
  31.     int Numerator() const //Возвращает числитель
  32.     {
  33.         return numenator;
  34.     }
  35.  
  36.     int Denominator() const  //Возвращает знаминатель
  37.     {
  38.         return denominator;
  39.     }
  40. private:
  41.     int numenator;
  42.     int denominator;
  43.    
  44.     int nod(int a, int b)
  45.     {
  46.         int tmp = max(a, b);
  47.         while((a % tmp != 0) || (b % tmp != 0))
  48.         {
  49.             tmp--;
  50.         }
  51.         return tmp;
  52.     }
  53.    
  54. };
  55.  
  56. bool operator==(const Rational& r1, const Rational& r2)
  57. {
  58.     if((r1.Denominator()==r2.Denominator())&&(r1.Numerator()==r2.Numerator()))
  59.     {
  60.         return true;
  61.     }
  62.     else
  63.     {
  64.         return false;
  65.     }
  66. }
  67.  
  68. Rational operator*(const Rational& r1, const Rational& r2)
  69. {
  70.     Rational ret(r1.Numerator()*r2.Numerator(), r1.Denominator()*r2.Denominator());
  71.     return ret;
  72. }
  73.  
  74. Rational operator/(const Rational& r1, const Rational& r2)
  75. {
  76.     Rational ret(r1.Numerator() * r2.Denominator(), r1.Denominator() * r2.Numerator());
  77.     return ret;
  78. }
  79.  
  80. Rational operator+(const Rational& r1, const Rational& r2)
  81. {
  82.     int num1 = r1.Numerator();
  83.     int num2 = r2.Numerator();
  84.     int denom1 = r1.Denominator();
  85.     int denom2 = r2.Denominator();
  86.     if (denom1 == denom2)
  87.     {
  88.         Rational rat(num1 + num2, denom1);
  89.         return rat;
  90.     }
  91.     int tmpdenom1 = denom1;
  92.     int tmpdenom2 = denom2;
  93.     num1 *= tmpdenom2;
  94.     denom1 *= tmpdenom2;
  95.     num2 *= tmpdenom1;
  96.     denom2 *= tmpdenom1;
  97.     Rational rat(num1+num2, denom1);
  98.     return rat;
  99. }
  100.  
  101. Rational operator-(const Rational& r1, const Rational& r2)
  102. {
  103.     int num1 = r1.Numerator();
  104.     int num2 = r2.Numerator();
  105.     int denom1 = r1.Denominator();
  106.     int denom2 = r2.Denominator();
  107.     if (denom1 == denom2)
  108.     {
  109.         Rational rat(num1 - num2, denom1);
  110.         return rat;
  111.     }
  112.     int tmpdenom1 = denom1;
  113.     int tmpdenom2 = denom2;
  114.     num1 *= tmpdenom2;
  115.     denom1 *= tmpdenom2;
  116.     num2 *= tmpdenom1;
  117.     denom2 *= tmpdenom1;
  118.     Rational rat(num1 - num2, denom1);
  119.     return rat;
  120. }
  121.  
  122. ostream& operator<<(ostream& stream, Rational rat)
  123. {
  124.     stream << rat.Numerator() << '/' << rat.Denominator();
  125.     return stream;
  126. }
  127.  
  128.  
  129. int main()
  130. {
  131.     //Это всё тесты.
  132.     {
  133.         const Rational r(3, 10);
  134.         if (r.Numerator() != 3 || r.Denominator() != 10)
  135.         {
  136.             cout << "Rational(3, 10) != 3/10" << endl;
  137.             return 1;
  138.         }
  139.     }
  140.    
  141.     {
  142.         const Rational r(8, 12);
  143.         if (r.Numerator() != 2 || r.Denominator() != 3) {
  144.             cout << "Rational(8, 12) != 2/3" << endl;
  145.             return 2;
  146.         }
  147.     }
  148.    
  149.    
  150.     {
  151.         const Rational r(-4, 6);
  152.         if (r.Numerator() != -2 || r.Denominator() != 3) {
  153.             cout << "Rational(-4, 6) != -2/3" << endl;
  154.             return 3;
  155.         }
  156.     }
  157.    
  158.    
  159.     {
  160.         const Rational r(4, -6);
  161.         if (r.Numerator() != -2 || r.Denominator() != 3) {
  162.             cout << "Rational(4, -6) != -2/3" << endl;
  163.             return 3;
  164.         }
  165.     }
  166.    
  167.     {
  168.         const Rational r(0, 15);
  169.         if (r.Numerator() != 0 || r.Denominator() != 1) {
  170.             cout << "Rational(0, 15) != 0/1" << endl;
  171.             return 4;
  172.         }
  173.     }
  174.  
  175.     {
  176.         const Rational defaultConstructed;
  177.         if (defaultConstructed.Numerator() != 0 || defaultConstructed.Denominator() != 1) {
  178.             cout << "Rational() != 0/1" << endl;
  179.             return 5;
  180.         }
  181.     }
  182.    
  183.     cout << "OK" << endl;
  184.     return 0;
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement