class Frac
Clase para el trabajo con fracciones.
Attributes
Se definen set y get para acceder a las variables de la clase.
Se definen set y get para acceder a las variables de la clase.
Public Class Methods
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
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
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
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
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
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
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
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
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
Devuelve el denominador.
# File lib/lpp_t_04_matrix.rb, line 318 def denom() # Devuelve el denominador. @denominador end
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
Devuelve el numerador.
# File lib/lpp_t_04_matrix.rb, line 313 def num() # Devuelve el numerador. @numerador end
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
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
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