lib/Fraccion.rb in prct09-0.0.1 vs lib/Fraccion.rb in prct09-1.0.0
- old
+ new
@@ -1,63 +1,69 @@
class Fraccion
attr_reader :n, :d
include Comparable
-
+ #Calcula el máximo comun divisor de una fraccion
def mcd(a,b)
d = a.abs, b.abs
while d.min != 0
d = d.min, d.max%d.min
end
d.max
end
private :mcd
- #Construccion
+ #Constructor de la clase Fraccion
def initialize(n, d)
@n = n / mcd(n,d)
@d = d / mcd(n,d)
end
- #Pasar a string el objeto Fraccion
+ #Pasa a string el objeto Fraccion
def imprimirFraccion
"#{@n}/#{@d}"
end
- #Pasar a flotante el objeto Fraccion
+ #Pasa a flotante el objeto Fraccion
def imprimirFlotante
@n.to_f/@d.to_f
end
+
+ def coerce(other)
+ if (other.is_a?(Numeric))
+ [Fraccion.new(other.to_i,1),self]
+ end
+ end
- #Sobrecarga de operadores
-
+
+ #Sobrecarga del operador + para operar con fracciones
def + (other)
Fraccion.new(@n* other.d + other.n*@d, @d * other.d)
end
-
+ #Sobrecarga del operador - para operar con fracciones
def - (other)
Fraccion.new(@n* other.d - other.n*@d, @d * other.d)
end
-
+ #Sobrecarga del operador * para operar con fracciones
def * (other)
Fraccion.new(@n* other.n, @d * other.d)
end
-
+ #Sobrecarga del operador / para operar con fracciones
def / (other)
Fraccion.new(@n* other.d, @d * other.n)
end
-
+ #Sobrecarga del operador % para operar con fracciones
def % (other)
Fraccion.new((imprimirFlotante % other.imprimirFlotante*1000).to_i, 1000)
end
-
+ #Sobrecarga del <=> para poder comparar fracciones (==, <=, >=, ...)
def <=> (other)
imprimirFlotante <=> other.imprimirFlotante
end
- #valor absoluto
+ #Calcula el valor absoluto
def abs
if (@n < 0) ^ (@d < 0)
if @n < 0
Fraccion.new(@n*-1, @d)
else
@@ -71,16 +77,16 @@
Fraccion.new(@n, @d)
end
end
- #inverso de una fraccion
+ #Calcula el inverso de una fraccion
def reciprocal
Fraccion.new(@d, @n)
end
- #opuesta de una fraccion
+ #Calcula el opuesto de una fraccion
def -@
Fraccion.new(@n*-1, @d)
end
end