class Fraccion

Attributes

denom[R]
num[R]

Public Class Methods

new(num,denom) click to toggle source
# File lib/racional.rb, line 8
def initialize(num,denom)
 
  # Se encarga de comprobar que los datos sean numericos, si no lo son lanza una excepcion y sale del programa
  
  raise ArgumentError, 'El argumento no es numerico' unless num.is_a? Numeric 
  raise ArgumentError, 'El argumento no es numerico' unless denom.is_a? Numeric 
  if (denom == 0)
      raise ArgumentError, 'El argumento no puede valer 0' unless (denom !=0)
  end 
  aux = gcd(num,denom) 
  @num = num/aux # numerador en su forma simplificada
  @denom= denom/aux # denominador en su forma simplificada
end

Public Instance Methods

*(other) click to toggle source

metodo que calcula el producto de dos fracciones

# File lib/racional.rb, line 83
def *(other)
     Fraccion.new(@num*other.num,@denom*other.denom)
end
+(other) click to toggle source

metodo que calcula la suma de dos fracciones

# File lib/racional.rb, line 33
def +(other)
  if other.is_a? Fraccion     
    if (@denom == other.denom)   #si los denominadores son iguales
       Fraccion.new(@num + other.num, @denom)
    else  #si los denominadores son distintos
      aux3 = ((@denom/gcd(@denom,other.denom)) * other.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
      aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
      aux2 = ((aux3/other.denom) * other.num) # calculo del denominador de la segunda fraccion
      Fraccion.new((aux+aux2),aux3)
    end
  else
    tmp = Fraccion.new(other,1)
    if (@denom == tmp.denom)   #si los denominadores son iguales
       Fraccion.new(@num + other.num, @denom)
    else  #si los denominadores son distintos
      aux3 = ((@denom/gcd(@denom,tmp.denom)) * tmp.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
      aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
      aux2 = ((aux3/tmp.denom) * tmp.num) # calculo del denominador de la segunda fraccion
      Fraccion.new((aux+aux2),aux3)
    end
  end
end
-(other) click to toggle source

metodo que calcula la resta de dos fracciones

# File lib/racional.rb, line 58
 def -(other)
 if other.is_a? Fraccion     
   if (@denom == other.denom)   #si los denominadores son iguales
      Fraccion.new(@num - other.num, @denom)
   else  # si los denominadores son distintos
     aux3 = ((@denom/gcd(@denom,other.denom)) * other.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
     aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
     aux2 = ((aux3/other.denom) * other.num) # calculo del denominador de la segunda fraccion
     Fraccion.new((aux-aux2),aux3)
   end
 else
   tmp = Fraccion.new(other,1)
   if (@denom == tmp.denom)   #si los denominadores son iguales
      Fraccion.new(@num + other.num, @denom)
   else  #si los denominadores son distintos
     aux3 = ((@denom/gcd(@denom,tmp.denom)) * tmp.denom) # Calculo del mcm usando la propiedad (a*b/mcd(a,b))
     aux = ((aux3/@denom) * @num) # calculo del numerador de la primera fraccion
     aux2 = ((aux3/tmp.denom) * tmp.num) # calculo del denominador de la segunda fraccion
     Fraccion.new((aux-aux2),aux3)
   end
 end  
end
/(other) click to toggle source

metodo que calcula la division de dos fracciones

# File lib/racional.rb, line 89
def /(other)
     Fraccion.new(@num*other.denom,@denom*other.num)
end
<=>(other) click to toggle source

método que contempla el uso del modulo comparable <, >, <= y >=

# File lib/racional.rb, line 95
def <=>(other)
   return nil unless other.instance_of? Fraccion
   # self.to_f <=> other.to_f
   @num.to_f/@denom <=> other.num.to_f/other.denom
end
coerce(other) click to toggle source
# File lib/racional.rb, line 101
def coerce(other)
     [Fraccion.new(other,1),self]
end
to_s() click to toggle source

metodo que muestra la fraccion con formato de salida: a/b

# File lib/racional.rb, line 26
def to_s 
     "#{@num}/#{@denom}"
 end