Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.81 KB | None | 0 0
  1. #include <iostream>
  2. #include "Rational.h"
  3.  
  4. int gcd(int a, int b) {
  5.  
  6.     while (b) {
  7.         a %= b;
  8.         int z = a;
  9.         a = b;
  10.         b = z;
  11.     }
  12.  
  13.     return a;
  14. }
  15.  
  16. int NOK(int a, int b)
  17. {
  18.     return a * b / gcd(a, b);
  19. }
  20.  
  21. void FractionReduction(Rational& r) {
  22.     int num = r.getNumenator();
  23.     int denom = r.getDenominator();
  24.     int c = gcd(num, denom);
  25.  
  26.     num /= c;
  27.     denom /= c;
  28.  
  29.     r.setNumenator(num);
  30.     r.setDenominator(denom);
  31. }
  32.  
  33. Rational::Rational(int num, int denom) {
  34.     numenator = num;
  35.     denominator = denom;
  36.     if (denominator == 0) {
  37.         throw DivisionByZeroException("Division by zero exception");
  38.     }
  39.    
  40. }
  41.  
  42. void Rational::setNumenator(int a) {
  43.     numenator = a;
  44. }
  45.  
  46. void Rational::setDenominator(int a) {
  47.     denominator = a;
  48. }
  49.  
  50. int Rational::getDenominator() const {
  51.     return denominator;
  52. }
  53.  
  54. int Rational::getNumenator() const {
  55.     return numenator;
  56. }
  57.  
  58. double Rational::getDouble() const {
  59.     return static_cast<double> (numenator) / denominator;
  60. }
  61.  
  62. std::ostream& operator<< (std::ostream& out, const Rational &rational) {
  63.     out << rational.numenator << "/" << rational.denominator << std::endl;
  64.     return out;
  65. }
  66.  
  67. std::istream& operator>> (std::istream& in, Rational &rational) {
  68.     in >> rational.numenator;
  69.     in >> rational.denominator;
  70.     rational = Rational(rational.numenator, rational.denominator);
  71.     return in;
  72. }
  73.  
  74. Rational& operator*=(Rational& r1, const Rational r2)
  75. {  
  76.     int a = r1.getNumenator() *r2.getNumenator();
  77.     int b = r1.getDenominator() * r2.getDenominator();
  78.     r1.setNumenator(a);
  79.     r1.setDenominator(b);
  80.     FractionReduction(r1);
  81.     return r1;
  82. }
  83.  
  84. Rational& operator+=(Rational& r1, const Rational& r2) {
  85.     int denom1 = r1.getDenominator();
  86.     int denom2 = r2.getDenominator();
  87.     int nok = NOK(denom1, denom2);
  88.  
  89.     denom1 = nok / denom1;
  90.     denom2 = nok / denom2;
  91.  
  92.     int num = denom1 * r1.getNumenator() + denom2 * r2.getNumenator();
  93.  
  94.     r1.setNumenator(num);
  95.     r1.setDenominator(nok);
  96.  
  97.     FractionReduction(r1);
  98.  
  99.     return r1;
  100. }
  101.  
  102. bool operator==(const Rational& lhs, const Rational& rhs)
  103. {
  104.     if (lhs.getDouble() == rhs.getDouble()) {
  105.         return true;
  106.     }
  107.  
  108.     else {
  109.         return false;
  110.     }
  111. }
  112.  
  113. bool operator>(const Rational& lhs, const Rational& rhs)
  114. {
  115.     if (lhs.getDouble() > rhs.getDouble()) {
  116.         return true;
  117.     }
  118.  
  119.     else {
  120.         return false;
  121.     }
  122. }
  123.  
  124. Rational operator+(const Rational& r1, const Rational& r2) {
  125.     Rational r;
  126.     int denom1 = r1.getDenominator();
  127.     int denom2 = r2.getDenominator();
  128.     int nok = NOK(denom1, denom2);
  129.  
  130.     denom1 = nok / denom1;
  131.     denom2 = nok / denom2;
  132.  
  133.     int num = denom1 * r1.getNumenator() + denom2 * r2.getNumenator();
  134.  
  135.     r.setNumenator(num);
  136.     r.setDenominator(nok);
  137.  
  138.     FractionReduction(r);
  139.  
  140.     return r;
  141. }
  142.  
  143. Rational operator*(const Rational& r1, const Rational& r2) {
  144.     Rational r;
  145.  
  146.     int a = r1.getNumenator() * r2.getNumenator();
  147.     int b = r1.getDenominator() * r2.getDenominator();
  148.  
  149.     r.setNumenator(a);
  150.     r.setDenominator(b);
  151.  
  152.     FractionReduction(r);
  153.  
  154.     return r;
  155. }
  156.  
  157. Rational& operator-(Rational& r)
  158. {
  159.     int a = r.getNumenator() * -1;
  160.  
  161.     r.setNumenator(a);
  162.  
  163.     return r;
  164. }
  165.  
  166. DivisionByZeroException::DivisionByZeroException(std::string error)
  167.     :m_error(error)
  168.     {
  169.     }
  170. const char* DivisionByZeroException::getError(){ return m_error.c_str(); }
  171.  
  172. int main()
  173. {
  174.     try {
  175.         /*Rational drob1(15, 3);
  176.         FractionReduction(drob1);
  177.         std::cout << drob1;*/
  178.         /*Rational drob2(5, 4);*/
  179.         /*std::cin >> drob;
  180.         std::cout << drob;*/
  181.         //std::cout << drob.getDouble();
  182.         /*drob1 *= drob2;
  183.         std::cout << drob1;*/
  184.         /*bool equals = drob1 == drob2;
  185.         bool less = drob1 > drob2;
  186.         std::cout << less;*/
  187.         /*std::cout << -drob1;*/
  188.         Rational drob;
  189.         Rational drob1(3,2);
  190.         Rational drob2(1,2);
  191.         drob = -drob2 + drob1;
  192.         std::cout << drob;
  193.  
  194.     }
  195.     catch (DivisionByZeroException& exception) {
  196.         std::cerr << "A Rational exception  occured (" << exception.getError() << ")\n";
  197.     }
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement