nochnoikoshmar1

Untitled

Mar 21st, 2023
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.61 KB | None | 0 0
  1. #include <cmath>
  2. #include <map>
  3. #include <string>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <set>
  7. #include <utility>
  8. #include <vector>
  9. #include <numeric>
  10. #include <chrono>
  11. #include <type_traits>
  12. #include <cassert>
  13. #include <sstream>
  14. #include <unordered_map>
  15. using namespace std;
  16. class Rational{
  17. public:
  18.     Rational() = default;
  19.     Rational(int numerator): numerator_(numerator), denominator_(1){}
  20.     Rational(int numerator, int denominator): numerator_(numerator), denominator_(denominator){
  21.         Normalize();
  22.     }
  23.     int Numerator() const{
  24.         return numerator_;
  25.     }
  26.     int Denominator() const{
  27.         return denominator_;
  28.     }
  29.     friend ostream &operator << (ostream &output, Rational rational){
  30.         return output << rational.Numerator() << '/' << rational.Denominator();
  31.     }
  32.     friend istream &operator >> (istream &input, Rational &rational){
  33.         int numerator;
  34.         int denominator;
  35.         char slash;
  36.         if((input >> numerator) && (input >> slash) && (slash == '/') && (input >> denominator)){
  37.             rational = Rational{numerator, denominator};
  38.         }
  39.         return input;
  40.     }    
  41.     Rational operator + (Rational value){
  42.         return value;
  43.     }
  44.     Rational operator - (Rational value){
  45.         return {-value.Numerator(), value.Denominator()};
  46.     }
  47.     friend bool operator > (const Rational a, const Rational b){
  48.         return a < b;
  49.         //return (a.Numerator() / static_cast<double>(a.Denominator())) > static_cast<double>(b.Numerator() / static_cast<double>(b.Denominator()));        
  50.     }
  51.     friend bool operator < (const Rational a, const Rational b){
  52.         //return (a.Numerator() / static_cast<double>(a.Denominator())) < (b.Numerator() / static_cast<double>(b.Denominator()));
  53.         return (static_cast<int>(a.numerator_) * static_cast<int>(b.denominator_)) < (static_cast<int>(b.numerator_) * static_cast<int>(a.denominator_));
  54.     }
  55.     friend bool operator == (const Rational a, const Rational b){
  56.         return (a) == (b);
  57.         /*if((a.Numerator() == b.Numerator()) && (a.Denominator() == b.Denominator())){
  58.             return true;
  59.         } else{
  60.             return false;
  61.         }*/
  62.     }
  63.     friend bool operator != (const Rational a, const Rational b){
  64.         return !(a == b);
  65.     }
  66.     friend bool operator <= (const Rational a, const Rational b){
  67.         return !(a > b);
  68.     }
  69.     friend bool operator >= (const Rational a, const Rational b){
  70.         return !(a < b);
  71.     }
  72.     //Rational operator + (Rational a, Rational b){
  73.     //    /*return {
  74.     //        a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(),
  75.     //        a.Denominator() * b.Denominator()
  76.     //    };*/
  77.     //    return a += b;
  78.     //}
  79.     //Rational operator - (Rational a, Rational b){
  80.     //    //return {a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(), a.Denominator() * a.Denominator()};
  81.     //    return a -= b;
  82.     //}
  83.     ~Rational(){};
  84. private:
  85.     void Normalize(){
  86.         if(denominator_ < 0){
  87.             numerator_ = -numerator_;
  88.             denominator_ = -denominator_;
  89.         }
  90.         int n = gcd(numerator_, denominator_);
  91.         numerator_ /= n;
  92.         denominator_ /= n;
  93.     }
  94.     int numerator_ = 0;
  95.     int denominator_ = 1;
  96. };
  97. Rational operator += (Rational a, Rational b){
  98.     /*return {
  99.         a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(),
  100.         a.Denominator() * b.Denominator()
  101.     };*/
  102.     return {a + b};
  103. }
  104. Rational operator -= (Rational a, Rational b){
  105.     //return {a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(), a.Denominator() * a.Denominator()};
  106.     //return a -= b;
  107.     return {-a.Numerator(), b.Denominator()};
  108. }
  109. Rational operator *= (Rational a, Rational b){
  110.     //return {a.Numerator() * b.Numerator(), a.Denominator() * b.Denominator()};
  111.     return a *= b;
  112. }
  113. Rational operator /= (Rational a, Rational b){
  114.     //return {a.Numerator() * b.Denominator(), a.Denominator() * b.Numerator()};
  115.     return a /= b;
  116. }
  117. Rational operator * (Rational a, Rational b){
  118.     return a *= b;
  119. }
  120. Rational operator / (Rational a, Rational b){
  121.     return a /= b;
  122. }
  123. int main(){
  124.     setlocale(LC_ALL,"");
  125.     Rational r1, r2;
  126.  
  127.     cout << "Введите первую дробь: "s;
  128.     cin >> r1;
  129.  
  130.     cout << "Введите вторую дробь: "s;
  131.     cin >> r2;
  132.  
  133.     cout << "Их сумма равна: "s << r1 + r2 << endl;
  134.  
  135.     cout << "Введите целое число: "s;
  136.     int integer;
  137.     cin >> integer;
  138.  
  139.     cout << "Их сумма равна: "s << r1 + integer << endl;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment