home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK4 / SAMPLES / CPPTUTOR / FRAC2.CP$ / FRAC2
Encoding:
Text File  |  1991-11-11  |  2.1 KB  |  100 lines

  1. // FRAC2.CPP
  2.  
  3. #include "frac2.h"
  4. #include <math.h>
  5. #include <iostream.h>
  6.  
  7. // ----------- Default constructor
  8. Fraction::Fraction()
  9. {
  10.     numerator = 0;
  11.     denominator = 1;
  12. }
  13.  
  14. // ----------- Constructor
  15. Fraction::Fraction( long num, long den )
  16. {
  17.     int factor;
  18.  
  19.     if( den == 0 )
  20.         den = 1;
  21.     numerator = num;
  22.     denominator = den;
  23.     if( den < 0 )
  24.     {
  25.         numerator = -numerator;
  26.         denominator = -denominator;
  27.     }
  28.     factor = gcf( num, den );
  29.     if( factor > 1 )
  30.     {
  31.         numerator /= factor;
  32.         denominator /= factor;
  33.     }
  34. }
  35.  
  36. // ----------- Function to print a Fraction
  37. void Fraction::display() const
  38. {
  39.     cout << numerator << '/' << denominator;
  40. }
  41.  
  42. // ----------- Conversion operator to float
  43. Fraction::operator float() const
  44. {
  45.     return (float)numerator / (float)denominator;
  46. }
  47.  
  48. // ----------- Overloaded + operator
  49. Fraction operator+( const Fraction &first, const Fraction &second )
  50. {
  51.     long factor,
  52.          mult1,
  53.          mult2;
  54.  
  55.     factor = Fraction::gcf( first.denominator, second.denominator );
  56.     mult1 = first.denominator / factor;
  57.     mult2 = second.denominator / factor;
  58.  
  59.     return Fraction( first.numerator * mult2 + second.numerator * mult1,
  60.                      first.denominator * mult2 );
  61. }
  62.  
  63. Fraction operator+( long first, const Fraction &second )
  64. {
  65.     return Fraction( second.numerator + first * second.denominator,
  66.                      second.denominator );
  67. }
  68.  
  69. Fraction operator+( const Fraction &first, long second )
  70. {
  71.     return Fraction( second * first.denominator + first.numerator,
  72.                      first.denominator );
  73. }
  74.  
  75. // ----------- Overloaded unary - operator
  76. Fraction operator-( const Fraction &one )
  77. {
  78.     return Fraction( -one.numerator, one.denominator );
  79. }
  80.  
  81. // ----------- Greatest common factor
  82. // computed using iterative version of Euclid's algorithm
  83. long Fraction::gcf( long first, long second )
  84. {
  85.     int temp;
  86.  
  87.     first = labs( first );
  88.     second = labs( second );
  89.  
  90.     while( second > 0 )
  91.     {
  92.         temp = first % second;
  93.         first = second;
  94.         second = temp;
  95.     }
  96.  
  97.     return first;
  98. }
  99.  
  100.