// DDeight.3  Rational.java
// following with page 363 fig8.11 of DD
public class Rational {

private  int numerator ;
private  int denominator ;



public   Rational(int n, int d){
  this.setRational( n, d ); 
     }

  public  Rational(Rational r){
 this.setRational( r.getNumerator(),
     r.getDenominator() ); }

public Rational() {
  this.setRational(1,1); }
 
//Set methods
public  Rational setRational(int n, int d ) {
   
   

   this.setNumerator(n);
    this.setDenominator(d);

    lowestTerms();

   return this; }

public Rational setNumerator( int n) {
    this.numerator = n;
    return this; }

 public Rational setDenominator( int d) {
    this.denominator = d;
    return this; }








// Get Methods

public int getNumerator(){ return numerator ; }

public int getDenominator(){ return denominator ; }


  private void lowestTerms() {

   int n1 = Math.abs(numerator); 
   int n2 = Math.abs(denominator);
    int greatest = gcd( n1, n2 );
   numerator = numerator / greatest;
   denominator = denominator / greatest;
   }

private int gcd( int nn1, int nn2 ){  // find gcd of two numbers and return it
  int greatest = 1; // greatest common divisor
  int n1 = Math.abs( nn1 );
  int n2 = Math.abs( nn2 );
  int smaller = n1;
  if (n1 > n2 ) smaller = n2;
  for ( int i=2 ; i <= smaller; i ++ ) {
  	if(  ((n1 % i) == 0) && ((n2 % i ) == 0 ) && i > greatest ) greatest = i ; }
  return greatest; }



public Rational sum( Rational r ) {

   int nn = numerator * r.denominator + denominator *  
          r.numerator ;
   int dd = denominator * r.denominator;
    
return   new Rational( nn, dd );
}


public Rational subtract( Rational r ) {

   int nn = numerator * r.denominator - denominator *  
          r.numerator ;
   int dd = denominator * r.denominator;
    
return   new Rational( nn, dd );
}

public Rational multiply( Rational r ) {

   int nn = numerator * r.numerator ;  
   
   int dd = denominator * r.denominator;
    
return   new Rational( nn, dd );
}

public Rational divide( Rational r ) {
   

   int nn = numerator * r.denominator ;  
         
   int dd = denominator * r.numerator;
    
return   new Rational( nn, dd );
}


public String toFloatString() {
return (" " + ( (float) ( numerator)   /   (float) (denominator ) )) ; }

public String  toString() {
return ( " " + numerator + "/" + denominator ) ; }

}// end of class Rational


