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