// Page 158-160 public class Fraction { private int nume,deno; private void reduce() // reduce to lowest form { int n = nume; int d = deno; while(d != 0) { int r = n % d; n = d; d = r; } if (n != 0) { nume /= n; deno /= n; } if (deno < 0) { nume *= (-1); deno *= (-1); } } public Fraction() { nume = 0; deno = 1; } public Fraction (int n, int d) { nume = n; deno = d; } public void set (int n, int d) { nume = n; deno = d; } public Fraction add(Fraction x) // this + x ==> add { Fraction temp = new Fraction(this.nume*x.deno+this.deno*x.nume,this.deno*x.deno); temp.reduce(); return temp; } public Fraction sub(Fraction x) // this - x ==> sub { Fraction temp = new Fraction(this.nume*x.deno-this.deno*x.nume,this.deno*x.deno); temp.reduce(); return temp; } public Fraction mult(Fraction x) { Fraction temp = new Fraction(nume*x.nume, deno*x.deno); temp.reduce(); return temp; } public Fraction div(Fraction x) { Fraction temp = new Fraction(nume*x.deno, deno*x.nume); temp.reduce(); return temp; } public void writeOut() { reduce(); System.out.print(nume + "/" + deno); } public double evaluate () { return (double)nume/deno; } }