class Fraction attr_accessor :numerator, :denominator def initialize( numerator, denominator ) @numerator = numerator @denominator = denominator end def to_f @numerator / @denominator end def to_i self.to_f.to_i end def to_s "#{@numerator}/#{@denominator}" end def +( other ) numerator = ( @numerator * other.denominator ) + ( other.numerator * @denominator ) denominator = @denominator * other.denominator Fraction.new( numerator, denominator ) end def -( other ) numerator = ( @numerator * other.denominator ) - ( other.numerator * @denominator ) denominator = @denominator * other.denominator Fraction.new( numerator, denominator ) end def /( other ) numerator = @numerator * other.denominator denominator = @denominator * other.numerator Fraction.new( numerator, denominator ) end def *( other ) numerator = @numerator * other.numerator denominator = @denominator * other.denominator Fraction.new( numerator, denominator ) end def <=>( other ) self.to_f <=> other.to_f end end f1 = Fraction.new( 4, 6 ) f2 = Fraction.new( 1, 3 ) f3 = f1 * f2 puts f3 f4 = f1 + f2 puts f4 f5 = f1 - f2 puts f5 f6 = f1 / f2 puts f6 puts f1 <=> f2