Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)

Fraction

By: GGMethos on Nov 20th, 2012  |  syntax: C++  |  size: 3.51 KB  |  hits: 153  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. class Fraction
  5. {
  6. public:
  7. Fraction( );
  8. Fraction(int, int);
  9. void reduce( );
  10. void setFraction(int , int );
  11. void getFraction(int&, int&);
  12. void display( );
  13. friend const Fraction operator + (const Fraction& lhs, const Fraction& rhs);
  14. friend const Fraction operator -  (const Fraction& lhs, const Fraction& rhs);
  15. friend const Fraction operator * (const Fraction& lhs, const Fraction& rhs);
  16. friend const Fraction operator /  (const Fraction& lhs, const Fraction& rhs);
  17. private:
  18. int myNumerator, myDenominator, myGCF;
  19. };
  20. Fraction :: Fraction():myNumerator(0), myDenominator(1)
  21. {}
  22. Fraction :: Fraction(int n, int d)
  23. {
  24. myNumerator = n;
  25. myDenominator = d;
  26. reduce( );
  27. }
  28. void Fraction :: reduce()
  29. {int gcf;
  30. bool finished=false;  
  31. if (myDenominator == 0)
  32. myDenominator = 1;
  33. if (myNumerator < 0 && myDenominator < 0)
  34. {myNumerator = -myNumerator;
  35. myDenominator= -myDenominator;
  36. }
  37. if (myNumerator > 0 && myDenominator < 0)
  38. {myNumerator= -myNumerator;
  39. myDenominator= -myDenominator;
  40. }
  41. if (abs(myNumerator) > abs(myDenominator))  // set gcf to larger of denominator / numerator
  42. gcf = abs(myDenominator);
  43. else
  44. gcf = abs(myNumerator);
  45. while ( !finished && gcf  >= 2 )
  46. {
  47. if ( myNumerator % gcf == 0 && myDenominator % gcf == 0) // find greatest common factor
  48. {myNumerator = myNumerator / gcf;
  49. myDenominator = myDenominator / gcf;  
  50. finished = true;
  51. }
  52. gcf--;
  53. }
  54. }
  55. void Fraction :: setFraction(int n, int d)
  56. {
  57. myNumerator = n;  
  58. myDenominator = d;
  59. reduce( );
  60. }
  61. void Fraction :: getFraction(int &n, int &d)
  62. {
  63. n = myNumerator;
  64. d = myDenominator;  
  65. reduce( );  
  66. }
  67. void Fraction :: display()
  68. {cout << myNumerator << "/" << myDenominator;
  69. }
  70. const Fraction  operator + (const Fraction& lhs, const Fraction& rhs)  
  71. {
  72. Fraction temp;
  73. temp.myDenominator = lhs.myDenominator * rhs.myDenominator;
  74. temp.myNumerator =  lhs.myNumerator * rhs.myDenominator +  
  75. rhs.myNumerator * lhs.myDenominator;
  76. temp.reduce();
  77. return temp;
  78. }
  79. const Fraction  operator - ( const Fraction& lhs, const Fraction& rhs)
  80. {
  81. Fraction temp;
  82. temp.myDenominator = lhs.myDenominator * rhs.myDenominator;
  83. temp.myNumerator =  lhs.myNumerator * rhs.myDenominator - rhs.myNumerator * lhs.myDenominator;
  84. temp.reduce();
  85. return temp;
  86. }
  87. const Fraction  operator * (const Fraction& lhs, const Fraction& rhs)
  88. {
  89. Fraction temp;
  90. temp.myNumerator = lhs.myNumerator * rhs.myNumerator;
  91. temp.myDenominator =  lhs.myDenominator * rhs.myDenominator;
  92. temp.reduce();
  93. return temp;
  94. }
  95. const Fraction operator / (const Fraction& lhs, const Fraction& rhs)
  96. {
  97. Fraction temp;
  98. temp.myNumerator = rhs.myDenominator * lhs.myNumerator;
  99. temp.myDenominator =  rhs.myNumerator * lhs.myDenominator;
  100. temp.reduce();
  101. return temp;
  102. }
  103. int main( )
  104. {Fraction frac1, frac2(2, 3), result;
  105. int n, d;
  106. cout << "  Fraction Class Program " << endl << endl;
  107. cout << " Enter the numerator, press enter, then enter the denominator followed by enter: ";
  108. cin >> n >> d;
  109. frac1.setFraction(n, d);
  110. result = frac1 + frac2;
  111. frac1.display ();
  112. cout << " + " ;
  113. frac2.display();
  114. cout << " = ";
  115. result.display();
  116. cout << endl;
  117. result = frac1 - frac2;
  118. frac1.display();
  119. cout << " - ";
  120. frac2.display();
  121. cout << " = ";            
  122. result.display();
  123. cout << endl;
  124. result = frac1 * frac2;
  125. frac1.display();
  126. cout << " * " ;
  127. frac2.display();
  128. cout << " = ";
  129. result.display();
  130. cout << endl;
  131. result = frac1 / frac2;
  132. frac1.display();
  133. cout << " / " ;
  134. frac2.display();
  135. cout << " = ";
  136. result.display();
  137. cout << endl;
  138. return 1;
  139. }