Sha256: 43af9b555e9b4ca4cea691cbe6424687834e6385c45c84695bec937cd92d15c6
Contents?: true
Size: 1.98 KB
Versions: 2
Compression:
Stored size: 1.98 KB
Contents
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 #Constructor de la clase Fraccion def initialize(n, d) @n = n / mcd(n,d) @d = d / mcd(n,d) end #Pasa a string el objeto Fraccion def imprimirFraccion "#{@n}/#{@d}" end #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 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 #Calcula el valor absoluto def abs if (@n < 0) ^ (@d < 0) if @n < 0 Fraccion.new(@n*-1, @d) else Fraccion.new(@n, @d*-1) end elsif (@n < 0) && (@d < 0) Fraccion.new(@n*-1, @d*-1) else Fraccion.new(@n, @d) end end #Calcula el inverso de una fraccion def reciprocal Fraccion.new(@d, @n) end #Calcula el opuesto de una fraccion def -@ Fraccion.new(@n*-1, @d) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
prct09-1.1.0 | lib/Fraccion.rb |
prct09-1.0.0 | lib/Fraccion.rb |