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