*(b)
click to toggle source
def *(b)
r =Fraction.new
r.num_=@num_ * b.num_
r.den_=@den_ * b.den_
r.num_,r.den_ = minimiza(r.num_,r.den_)
return r
end
+(b)
click to toggle source
def +(b)
r=Fraction.new
if (@den_==b.den_)
r.num_ = @num_ + b.num_
r.den_ = @den_
else
r.num_ = @num_ * b.den_ + b.num_ * @den_
r.den_ = @den_ * b.den_
end
r.num_,r.den_ = minimiza(r.num_,r.den_)
return r
end
-(b)
click to toggle source
def -(b)
r =Fraction.new
if (@den_ == b.den_)
r.num_=@num_- b.num_
r.den_=@den_
else
r.num_=@num_ * b.den_ - b.num_ * @den_
r.den_ = @den_ * b.den_
end
r.num_,r.den_ = minimiza(r.num_,r.den_)
r
end
-@()
click to toggle source
def -@
Fraction.new(-@num_,@den_)
end
/(b)
click to toggle source
def /(b)
r =Fraction.new
r.num_=@num_ / b.num_
r.den_=@den_ * b.den_
r.num_,r.den_ = minimiza(r.num_,r.den_)
r
end
<=>(b)
click to toggle source
def <=>(b)
self.to_f <=> b.to_f
end
==(b)
click to toggle source
def ==(b)
return @num_.eql?(b.num_) && @den_.eql?(b.den_)
end
abs()
click to toggle source
def abs
c = @num_.to_f/@den_.to_f
return c.abs
end
coerce(other)
click to toggle source
def coerce(other)
[self,other]
end
minimiza(x,y)
click to toggle source
def minimiza(x,y)
d = gcd(x,y)
x = x/d
y = y/d
return x,y
end
reciprocal()
click to toggle source
def reciprocal
f=Fraction.new
f.num_=@den_
f.den_ = @num_
f
end
to_f()
click to toggle source
def to_f
@num_.to_f/@den_.to_f
end
to_s()
click to toggle source
def to_s
"#{@num_}/#{@den_}"
end