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

  1. // FRAC1.CPP
  2.  
  3. #include "frac1.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. // ----------- Overloaded unary - operator
  64. Fraction operator-( const Fraction &one )
  65. {
  66.     return Fraction( -one.numerator, one.denominator );
  67. }
  68.  
  69. // ----------- Greatest common factor
  70. // computed using iterative version of Euclid's algorithm
  71. long Fraction::gcf( long first, long second )
  72. {
  73.     int temp;
  74.  
  75.     first = labs( first );
  76.     second = labs( second );
  77.  
  78.     while( second > 0 )
  79.     {
  80.         temp = first % second;
  81.         first = second;
  82.         second = temp;
  83.     }
  84.  
  85.     return first;
  86. }
  87.  
  88.