class Fraccion

Definicion de la clase Fraccion

Attributes

denominador[R]
numerador[R]

Public Class Methods

new(numerador, denominador) click to toggle source
# File lib/racional.rb, line 7
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
# File lib/racional.rb, line 97
def %(other) # Calcula el resto al dividir dos Fraccionciones (modulo)
    result = self./(other)
    result = (result.numerador%result.denominador).to_i
end
*(other) click to toggle source
# File lib/racional.rb, line 89
def *(other) # Calcula la multiplicacion de dos Fraccionciones.
    Fraccion.new(@numerador * other.numerador, @denominador * other.denominador)
end
+(other) click to toggle source
# File lib/racional.rb, line 64
def +(other) # Calcula la suma de dos Fraccionciones.
    if other.class == Fraccion
        Fraccion.new(@numerador*other.denominador + other.numerador*@denominador , @denominador*other.denominador)
    elsif other.class == Fixnum
        Fraccion.new(@numerador + other*@denominador , @denominador)
    end
            
end
-(*other) click to toggle source
# File lib/racional.rb, line 73
def -(*other) # Calcula la resta de dos Fraccionciones.
    if (other[0].class == Fraccion)
        Fraccion.new(@numerador*other[0].denominador - other[0].numerador*@denominador , @denominador*other[0].denominador)
    else
        if (@numerador > 0 && @denominador > 0)
            Fraccion.new(-1 * @numerador, @denominador)
        elsif (@numerador > 0 && @denominador < 0)
            Fraccion.new(@numerador, -1 * @denominador)
        elsif (@numerador < 0 && @denominador > 0)
            Fraccion.new(-1 * @numerador, @denominador)
        else (@numerador < 0 && @denominador < 0)
            Fraccion.new(@numerador, -1 * @denominador)
        end                    
    end
end
/(other) click to toggle source
# File lib/racional.rb, line 93
def /(other) # Calcula la division de dos Fraccionciones.
    Fraccion.new(@numerador * other.denominador, @denominador * other.numerador)
end
<=>(other) click to toggle source
# File lib/racional.rb, line 44
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
# File lib/racional.rb, line 48
def abs() # Se calcula el valor absoluto de una Fraccioncioncion.
        if (@numerador > 0 && @denominador > 0)
                Fraccioncion.new(@numerador, @denominador).to_s
        elsif (@numerador > 0 && @denominador < 0)
                Fraccion.new(@numerador, -1 * @denominador).to_s
        elsif (@numerador < 0 && @denominador > 0)
                Fraccion.new(-1 * @numerador, @denominador).to_s
        else (@numerador < 0 && @denominador < 0)
                Fraccion.new(-1 * @numerador,-1 * @denominador).to_s
        end                                                  
end
denom() click to toggle source
# File lib/racional.rb, line 16
def denom() # Devuelve el denominador.
            @denominador
    end
num() click to toggle source
# File lib/racional.rb, line 12
def num() # Devuelve el numerador.
            @numerador
    end
reciprocal() click to toggle source
# File lib/racional.rb, line 60
def reciprocal() # Calcula el reciproco de una Fraccioncion.
        Fraccion.new(@denominador, @numerador)
end
to_f() click to toggle source
# File lib/racional.rb, line 40
def to_f() # Imprime el resultado de la Fraccioncioncion como un float.
            @numerador.to_f/@denominador
    end
to_s() click to toggle source
# File lib/racional.rb, line 20
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