Guest User

Untitled

a guest
Jun 7th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.03 KB | None | 0 0
  1. #ifndef RATIONALNUMBER_H_INCLUDED
  2. #define RATIONALNUMBER_H_INCLUDED
  3.  
  4. #include <stdexcept>
  5. #include <iostream>
  6. #include <iomanip>
  7.  
  8. using namespace std;
  9.  
  10. class RationalNumber {
  11. public:
  12.     RationalNumber(int num, int denom)
  13.     :numerator(num), denominator(denom){
  14.         setNum(num);
  15.         setDenom(denom);
  16.  
  17.         if (denom == 0) {
  18.             throw invalid_argument("Denominator cannot be zero.");
  19.         } else if (denom < 0) {
  20.             throw invalid_argument("Denominator cannot be negative.");
  21.         }
  22.  
  23.         cout << "\n" << fractionForm();
  24.         simplify();
  25.  
  26.         cout << " simplifies to " << fractionForm() << "\n" << endl;
  27.     }
  28.  
  29.     void setNum(int num) {
  30.         num = numerator;
  31.     }
  32.  
  33.     int getNum() {
  34.         return numerator;
  35.     }
  36.  
  37.     void setDenom(int denom) {
  38.         denominator = denom;
  39.     }
  40.  
  41.     int getDenom () {
  42.         return denominator;
  43.     }
  44.  
  45.     string simplify() {
  46.         for (int i = denominator * numerator; i > 1; i--) {
  47.             if (numerator == 0) {
  48.                 return "1";
  49.             }
  50.             if ((denominator % i == 0) && (numerator % i == 0)) {
  51.                     denominator = denominator / i;
  52.                     numerator = numerator / i;
  53.                 if (denominator == 1) {
  54.                     return to_string(numerator);
  55.                 } else {
  56.                     return to_string(numerator) + "/" + to_string(denominator);
  57.                 }
  58.             }
  59.          }
  60.         //cout << numerator << "/" << denominator << endl;
  61.      }
  62.  
  63.     string fractionForm() {
  64.        // return to_string(num) + "/" + to_string(denom);
  65.        //return getNum() + "/" + getDenom();
  66.         if (numerator == 0 || (numerator == 1 && denominator == 1)) {
  67.             return "1";
  68.         }
  69.         if(denominator == 1) {
  70.             return to_string(numerator);
  71.         } else {
  72.             return to_string(numerator) + "/" + to_string(denominator);
  73.         }
  74.     }
  75.  
  76.     void operator+(RationalNumber& fraction) const{
  77.         cout << "\n---A D D I N G   " << fraction.numerator << "/" << fraction.denominator << "   T O   " << numerator << "/" << denominator << " ---" << endl;
  78.  
  79.         if (fraction.denominator != denominator) {
  80.             fraction.numerator = (numerator * fraction.denominator) + (fraction.numerator * denominator);
  81.             fraction.denominator = denominator * fraction.denominator;
  82.  
  83.         } else if (fraction.denominator == denominator) {
  84.             fraction.numerator = (numerator + fraction.numerator);
  85.         }
  86.  
  87.         if (fraction.numerator != fraction.denominator) {
  88.             fraction.simplify();
  89.             cout << "   = " << fraction.fractionForm() << endl;
  90.         } else if (fraction.numerator == fraction.denominator) {
  91.             cout << "   = 1" << endl;
  92.         }
  93.  
  94.     }
  95.  
  96.     void operator-(RationalNumber& fraction) const{
  97.         cout << "\n---S U B T R A C T I N G    " << fraction.numerator << "/" << fraction.denominator << "   F R O M   " << numerator << "/" << denominator << "---" << endl;
  98.  
  99.         if (fraction.denominator != denominator) {
  100.             fraction.numerator = (fraction.numerator * denominator);
  101.             fraction.denominator = denominator * fraction.denominator;
  102.             fraction.simplify();
  103.  
  104.         } else if (fraction.denominator == denominator) {
  105.             fraction.numerator = (numerator - fraction.numerator);
  106.         }
  107.  
  108.         if (fraction.numerator != fraction.denominator) {
  109.             fraction.simplify();
  110.  
  111.             cout << "   = " << fraction.fractionForm() << endl;
  112.         } else if (fraction.numerator == fraction.denominator) {
  113.             cout << "   = 1" << endl;
  114.         }
  115.  
  116.     }
  117.  
  118.     void operator*(RationalNumber& fraction) const{
  119.         cout << "\n---M U L T I P L Y I N G   " << numerator << "/" << denominator << "   B Y   " << fraction.numerator << "/" << fraction.denominator << "---" << endl;
  120.  
  121.         fraction.numerator = numerator * fraction.numerator;
  122.         fraction.denominator = denominator * fraction.denominator;
  123.         fraction.simplify();
  124.         cout << "   = " << fraction.fractionForm() << endl;
  125.     }
  126.  
  127.     void operator/(RationalNumber& fraction) {
  128.         cout << "\n---D I V I D I N G   " << fractionForm() << "   B Y   " << fraction.fractionForm() << "---" << endl;
  129.         int num{};
  130.         int denom{};
  131.  
  132.         denom = denominator * fraction.numerator;
  133.         num = numerator * fraction.denominator;
  134.         fraction.denominator = denom;
  135.         fraction.numerator = num;
  136.  
  137.         fraction.simplify();
  138.         cout << "   = " << fraction.fractionForm() << endl;
  139.     }
  140.  
  141. private:
  142.     int numerator{};
  143.     int denominator{};
  144. };
  145.  
  146. #endif // RATIONALNUMBER_H_INCLUDED
  147. #include <iostream>
  148. #include "RationalNumber.h"
  149.  
  150. using namespace std;
  151.  
  152. int main()
  153. {
  154.     RationalNumber test{4, 8};
  155.     RationalNumber rat{3, 12};
  156.  
  157.     RationalNumber a{4, 32};
  158.     RationalNumber b{4, 4};
  159.  
  160.     a + b;
  161.  
  162.     rat * test;
  163.  
  164.     RationalNumber c{1, 4};
  165.     RationalNumber d{1, 8};
  166.  
  167.     c / d;
  168.  
  169.     return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment