nochnoikoshmar1

Untitled

Mar 20th, 2023
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 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. friend Rational operator * (Rational a, Rational b){
  42. return {a.Numerator() * b.Numerator(), a.Denominator() * b.Denominator()};
  43. }
  44. friend Rational operator / (Rational &a, Rational &b){
  45. return {a.Numerator() * b.Denominator(), a.Denominator() * b.Numerator()};
  46. }
  47. friend Rational operator += (Rational &a, Rational &b){
  48. return {a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(), a.Denominator() * b.Denominator()};
  49. }
  50. friend Rational operator -= (Rational &a, Rational &b){
  51. return {a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(), a.Denominator() * a.Denominator()};
  52. }
  53. friend Rational operator *= (Rational &a, Rational &b){
  54. return {a.Numerator() * b.Numerator(), a.Denominator() * b.Denominator()};
  55. }
  56. friend Rational operator /= (Rational &a, Rational &b){
  57. return {a.Numerator() * b.Denominator(), a.Denominator() * b.Numerator()};
  58. }
  59. friend Rational operator + (Rational a, Rational b){
  60. return {a.Numerator() * b.Denominator() + b.Numerator() * a.Denominator(), a.Denominator() * b.Denominator()};
  61. }
  62. friend Rational operator - (Rational &a, Rational &b){
  63. return {a.Numerator() * b.Denominator() - b.Numerator() * a.Denominator(), a.Denominator() * a.Denominator()};
  64. }
  65. friend Rational operator + (Rational &value){
  66. return value;
  67. }
  68. friend Rational operator - (Rational &value){
  69. return {-value.Numerator(), value.Denominator()};
  70. }
  71. friend bool operator > (const Rational a, const Rational b){
  72. return a < b;
  73. //return (a.Numerator() / static_cast<double>(a.Denominator())) > static_cast<double>(b.Numerator() / static_cast<double>(b.Denominator()));
  74. }
  75. friend bool operator < (const Rational a, const Rational b){
  76. //return (a.Numerator() / static_cast<double>(a.Denominator())) < (b.Numerator() / static_cast<double>(b.Denominator()));
  77. return (static_cast<int>(a.numerator_) * static_cast<int>(b.denominator_)) < (static_cast<int>(b.numerator_) * static_cast<int>(a.denominator_));
  78. }
  79. friend bool operator == (const Rational a, const Rational b){
  80. return (a) == (b);
  81. /*if((a.Numerator() == b.Numerator()) && (a.Denominator() == b.Denominator())){
  82. return true;
  83. } else{
  84. return false;
  85. }*/
  86. }
  87. friend bool operator != (const Rational a, const Rational b){
  88. return !(a == b);
  89. }
  90. friend bool operator <= (const Rational a, const Rational b){
  91. return !(a > b);
  92. }
  93. friend bool operator >= (const Rational a, const Rational b){
  94. return !(a < b);
  95. }
  96. ~Rational(){};
  97. private:
  98. void Normalize(){
  99. if(denominator_ < 0){
  100. numerator_ = -numerator_;
  101. denominator_ = -denominator_;
  102. }
  103. int n = gcd(numerator_, denominator_);
  104. numerator_ /= n;
  105. denominator_ /= n;
  106. }
  107. int numerator_ = 0;
  108. int denominator_ = 1;
  109. };
  110. int main(){
  111. setlocale(LC_ALL,"");
  112. Rational r1, r2;
  113.  
  114. cout << "Введите первую дробь: "s;
  115. cin >> r1;
  116.  
  117. cout << "Введите вторую дробь: "s;
  118. cin >> r2;
  119.  
  120. cout << "Их сумма равна: "s << r1 + r2 << endl;
  121.  
  122. cout << "Введите целое число: "s;
  123. int integer;
  124. cin >> integer;
  125.  
  126. cout << "Их сумма равна: "s << r1 + integer << endl;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment