class Fraction

attr_reader :n, :d

def initialize(n, d)

raise "Can't have zero denominator." if d == 0

n, d = -n, -d if d < 0

g = n.gcd(d)

if g == 1

@n = n

@d = d

else

@n = n / g

@d = n / g

end

end

def plus(f)

Fraction.new((@n*f.d)+(@d*f.n), @d*f.d)

end

def minus(f)

Fraction.new((@n*f.d)-(@d*f.n), @d*f.d)

end

def times(f)

Fraction.new(@n*f.n, @d*f.d)

end

def divide(f)

Fraction.new(@n*f.d, @d*f.n)

end

def to_s

"#{@n}/#{@d}"

end

end

f1 = Fraction.new(1, 3)

f2 = Fraction.new(-1, 7)

puts "#{f1} + #{f2} = #{f1.plus(f2)}"

puts "#{f1} + #{f2} = #{f1.minus(f2)}"

puts "#{f1} + #{f2} = #{f1.times(f2)}"

puts "#{f1} + #{f2} = #{f1.divide(f2)}"

Nothing too awfully complex here, but if you have questions, let me know.

## No comments:

## Post a Comment