Advertisement
Guest User

Rational

a guest
Dec 5th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <set>
  5. #include <sstream>
  6. using namespace std;
  7.  
  8. int NOD(int a, int b){
  9.     while (a > 0 && b > 0) {
  10.         if (a > b) {
  11.             a %= b;
  12.         } else {
  13.             b %= a;
  14.         }
  15.     }
  16.     return (a+b);
  17. }
  18.  
  19. class Rational {
  20. public:
  21.     Rational() {
  22.         chisl = 0;
  23.         znam = 1;
  24.     }
  25.  
  26.     Rational(const int& numerator, const int& denominator) {
  27.         int c;
  28.         int a = numerator;
  29.         int b = denominator;
  30.         bool isA, isB;
  31.  
  32.         if (a < 0 && b < 0){
  33.             a *= -1;
  34.             b *= -1;
  35.         }
  36.         else if (a < 0 && b > 0){
  37.             a *= -1;
  38.             isA = true;
  39.         }
  40.         else if (a > 0 && b < 0){
  41.             b *= -1;
  42.             isB = true;
  43.         }
  44.  
  45.         if (a != 0){
  46.             c = NOD(a, b);
  47.             chisl = a / c;
  48.             znam = b / c;
  49.         } else {
  50.             chisl = 0;
  51.             znam = 1;
  52.         }
  53.  
  54.         if (isA || isB){
  55.             chisl *= -1;
  56.         }
  57.     }
  58.  
  59.     int Numerator() const {
  60.         return chisl;
  61.     }
  62.  
  63.     int Denominator() const {
  64.         return znam;
  65.     }
  66.  
  67. private:
  68.    int chisl;
  69.    int znam;
  70. };
  71.  
  72. bool operator==(const Rational& lhs, const Rational& rhs){
  73.     if (lhs.Numerator() == rhs.Numerator()
  74.             && lhs.Denominator() == rhs.Denominator()){
  75.         return true;
  76.     } else {
  77.         return false;
  78.     }
  79. }
  80.  
  81. bool operator!=(const Rational& lhs, const Rational& rhs){
  82.     if (lhs.Numerator() == rhs.Numerator()
  83.             && lhs.Denominator() == rhs.Denominator()){
  84.         return false;
  85.     } else {
  86.         return true;
  87.     }
  88. }
  89.  
  90. Rational operator+(const Rational& lhs, const Rational& rhs){
  91.     int temp;
  92.     int temp1 = lhs.Denominator();
  93.     if (rhs.Denominator() != lhs.Denominator()){
  94.         temp1 = rhs.Denominator() * lhs.Denominator();
  95.         temp = lhs.Numerator() * rhs.Denominator()
  96.                 + rhs.Numerator() * lhs.Denominator();
  97.     } else {
  98.         temp = lhs.Numerator() + rhs.Numerator();
  99.     }
  100.     int c = NOD(temp, temp1);
  101.     return Rational (temp/c, temp1/c);
  102. }
  103.  
  104. Rational operator-(const Rational& lhs, const Rational& rhs){
  105.     int temp;
  106.     int temp1 = lhs.Denominator();
  107.     if (rhs.Denominator() != lhs.Denominator()){
  108.         temp1 = rhs.Denominator() * lhs.Denominator();
  109.         temp = lhs.Numerator() * rhs.Denominator()
  110.                 - rhs.Numerator() * lhs.Denominator();
  111.     } else {
  112.         temp = lhs.Numerator() - rhs.Numerator();
  113.     }
  114.     int c = NOD(temp, temp1);
  115.     return Rational (temp/c, temp1/c);
  116. }
  117.  
  118. Rational operator*(const Rational& lhs, const Rational& rhs){
  119.     int temp = lhs.Numerator() * rhs.Numerator();
  120.     int temp1 = lhs.Denominator() * rhs.Denominator();
  121.     int c = NOD(temp, temp1);
  122.     return Rational(temp/c, temp1/c);
  123. }
  124.  
  125. Rational operator/(const Rational& lhs, const Rational& rhs){
  126.     int temp = lhs.Numerator() * rhs.Denominator();
  127.     int temp1 = lhs.Denominator() * rhs.Numerator();
  128.     int c = NOD(temp, temp1);
  129.     return Rational(temp/c, temp1/c);
  130. }
  131.  
  132. ostream& operator<<(ostream& stream, const Rational& lol){
  133.     stream << lol.Numerator() << "/" << lol.Denominator();
  134.     return stream;
  135. }
  136.  
  137. istream& operator>>(istream& stream, Rational& lol){
  138.     int a,b;
  139.     if (stream){
  140.         stream >> a;
  141.         stream.ignore(1);
  142.         stream >> b;
  143.         stream.ignore(1);
  144.         lol = Rational(a,b);
  145.     }
  146.     return stream;
  147. }
  148.  
  149. bool operator<(const Rational& lhs, const Rational& rhs){
  150.     if (lhs.Denominator() == rhs.Denominator()){
  151.         if (lhs.Numerator() < rhs.Numerator()){
  152.             return true;
  153.         } else {
  154.             return false;
  155.         }
  156.     }
  157.     else {
  158.         int a = lhs.Numerator() * rhs.Denominator();
  159.         int b = rhs.Numerator() * lhs.Denominator();
  160.         if (a < b){
  161.             return true;
  162.         } else {
  163.             return false;
  164.         }
  165.     }
  166. }
  167.  
  168. bool operator>(const Rational& lhs, const Rational& rhs){
  169.     if (lhs.Denominator() == rhs.Denominator()){
  170.         if (lhs.Numerator() < rhs.Numerator()){
  171.             return false;
  172.         } else {
  173.             return true;
  174.         }
  175.     }
  176.     else {
  177.         int a = lhs.Numerator() * rhs.Denominator();
  178.         int b = rhs.Numerator() * lhs.Denominator();
  179.         if (a < b){
  180.             return false;
  181.         } else {
  182.             return true;
  183.         }
  184.     }
  185. }
  186.  
  187. int main() {
  188.     return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement