class Frac

Clase para el trabajo con fracciones.

Attributes

denominador[R]

Se definen set y get para acceder a las variables de la clase.

numerador[R]

Se definen set y get para acceder a las variables de la clase.

Public Class Methods

new(numerador, denominador) click to toggle source

Se define el constructor.

# File lib/lpp_t_04_matrix.rb, line 307
def initialize(numerador, denominador) # Se define el constructor.
            mcd = gcd(numerador,denominador)
            @numerador , @denominador = numerador/mcd, denominador/mcd
    end

Public Instance Methods

%(other) click to toggle source

Calcula el resto al dividir dos fracciones (modulo)

# File lib/lpp_t_04_matrix.rb, line 405
def %(other) # Calcula el resto al dividir dos fracciones (modulo)
    result = self./(other)
    result = (result.numerador%result.denominador).to_i
end
*(other) click to toggle source

Calcula la multiplicacion de dos fracciones.

# File lib/lpp_t_04_matrix.rb, line 391
def *(other) # Calcula la multiplicacion de dos fracciones.
    if other.class == Frac
        Frac.new(@numerador * other.numerador, @denominador * other.denominador)
    elsif other.class == Fixnum
        Frac.new(@numerador * other, @denominador)
    end
end
+(other) click to toggle source

Calcula la suma de dos fracciones.

# File lib/lpp_t_04_matrix.rb, line 372
def +(other) # Calcula la suma de dos fracciones.
    if other.class == Frac
        Frac.new(@numerador*other.denominador + other.numerador*@denominador , @denominador*other.denominador)
    elsif other.class == Fixnum
        Frac.new(@numerador + other*@denominador , @denominador)
    end
            
end
-(other) click to toggle source

Calcula la resta de dos fracciones.

# File lib/lpp_t_04_matrix.rb, line 382
def -(other) # Calcula la resta de dos fracciones.
    if (other.class == Frac)
        Frac.new(@numerador*other.denominador - other.numerador*@denominador , @denominador*other.denominador)
    else
            Frac.new(@numerador - other*@denominador , @denominador)
    end
end
/(other) click to toggle source

Calcula la division de dos fracciones.

# File lib/lpp_t_04_matrix.rb, line 400
def /(other) # Calcula la division de dos fracciones.
    Frac.new(@numerador * other.denominador, @denominador * other.numerador)
end
<=>(other) click to toggle source

Se define el operador <=> para el modulo comparable.

# File lib/lpp_t_04_matrix.rb, line 349
def <=>(other) # Se define el operador <=> para el modulo comparable.
    @numerador.to_f/@denominador <=> other.numerador.to_f/other.denominador
end
abs() click to toggle source

Se calcula el valor absoluto de una fraccion.

# File lib/lpp_t_04_matrix.rb, line 354
def abs() # Se calcula el valor absoluto de una fraccion.
    if (@numerador > 0 && @denominador > 0)
            Frac.new(@numerador, @denominador).to_s
    elsif (@numerador > 0 && @denominador < 0)
            Frac.new(@numerador, -1 * @denominador).to_s
    elsif (@numerador < 0 && @denominador > 0)
            Frac.new(-1 * @numerador, @denominador).to_s
    else (@numerador < 0 && @denominador < 0)
            Frac.new(-1 * @numerador,-1 * @denominador).to_s
    end                                                
end
coerce(other) click to toggle source

Se define el metodo coerce para operar enteros con fracciones.

# File lib/lpp_t_04_matrix.rb, line 411
def coerce(other) # Se define el metodo coerce para operar enteros con fracciones.
    [self,other]
end
denom() click to toggle source

Devuelve el denominador.

# File lib/lpp_t_04_matrix.rb, line 318
def denom() # Devuelve el denominador.
            @denominador
    end
gcd(u, v) click to toggle source

Metodo que calculo el maximo comun divisor de dos numeros.

# File lib/lpp_t_04_matrix.rb, line 416
def gcd(u, v) # Metedo que calculo el maximo comun divisor de dos numeros.
  u, v = u.abs, v.abs
  while v != 0
    u, v = v, u % v
  end
  u
end
num() click to toggle source

Devuelve el numerador.

# File lib/lpp_t_04_matrix.rb, line 313
def num() # Devuelve el numerador.
            @numerador
    end
reciprocal() click to toggle source

Calcula el reciproco de una fraccion.

# File lib/lpp_t_04_matrix.rb, line 367
def reciprocal() # Calcula el reciproco de una fraccion.
    Frac.new(@denominador, @numerador)
end
to_f() click to toggle source

Imprime el resultado de la fraccion como un float.

# File lib/lpp_t_04_matrix.rb, line 344
def to_f() # Imprime el resultado de la fraccion como un float.
            @numerador.to_f/@denominador
    end
to_s() click to toggle source

Si el denominador es 1, solo se imprimer el numerador

# File lib/lpp_t_04_matrix.rb, line 323
def to_s
    if @denominador == 1 # Si el denominador es 1, solo se imprimer el numerador
            "#{@numerador}"
    elsif @denominador == -1 #En el caso de que b=-1 y a>0 รณ a=-1
            if @numerador>0 || @numerador==-1
                    "#{-@numerador}"
            else #Si b=-1 y a es menor que cero, imprime el valor de a
                    "#{@numerador}"
            end
    elsif (@numerador>0 && @denominador>0 && @denominador!=1) #Caso nomal, a y b son mayores que cero, imprime a/b
            "#{@numerador}/#{@denominador}"
    elsif (@numerador>0 && @denominador<0 && @denominador!=-1) # b es menor que cero, se le cambia el signo a todo para que se imprima: -a/b
            "#{-@numerador}/#{-@denominador}"
    elsif (@numerador<0 && @denominador<0 && @denominador!=-1) # a y b son menor que cero, se le cambia el signo a todo para que imprima a/b
            "#{-@numerador}/#{-@denominador}"
    elsif (@numerador<0 && @denominador>0 && @denominador!=1) # a es menor que cero, se imprime igual: -a/b
            "#{@numerador}/#{@denominador}"
    end        
end