class Fraccion
Attributes
metodo que permite acceder a los atributos de la clase
metodo que permite acceder a los atributos de la clase
Public Class Methods
# File lib/prac09/fraccion.rb, line 8 def initialize(n,d) simp=gcd(n,d) #guarda el maximo comun divisor if d!=0 @numerador=n @denominador=d end #utiliza el maximo comun divisor para simplificar la fraccion @numerador, @denominador = n/simp, d/simp end
Public Instance Methods
metodo para calcular el resto de la division de dos fracciones
# File lib/prac09/fraccion.rb, line 105 def % (object) #guarda la division de las fracciones division=self.abs/object.abs #calcula el resto resto=object.abs * (division - Fraccion.new(division.to_float.to_i,1)) if (object.numerador < 0) #si el numerador es negativo imprime el opuesto del resto return -resto end #lo imprime resto end
metodo para calcular la multiplicacion de dos fracciones
# File lib/prac09/fraccion.rb, line 89 def *(object) if(object.is_a?(Numeric)) object = Fraccion.new(object,1) end Fraccion.new(@numerador*object.numerador,@denominador*object.denominador) end
metodo para calcular la suma de dos fracciones
# File lib/prac09/fraccion.rb, line 68 def +(object) if (object.instance_of?(Fraccion)==true) aux=mcm(@denominador,object.denominador) return Fraccion.new((((aux*@numerador)/@denominador)+(aux*object.numerador)/object.denominador),aux) end if (object.instance_of?( Fixnum )==true) aux=Fraccion.new(object, 1) m=mcm(@denominador,aux.denominador) return Fraccion.new((((m*@numerador)/@denominador) + (m*aux.numerador)/aux.denominador),m) end end
metodo para calcular la resta de dos fracciones
# File lib/prac09/fraccion.rb, line 83 def -(object) aux=mcm(@denominador,object.denominador) Fraccion.new((((aux*@numerador)/@denominador)-(aux*object.numerador)/object.denominador),aux) end
metodo para calcular el opuesto de una fraccion
# File lib/prac09/fraccion.rb, line 51 def -@ () if(@numerador>0 && @denominador<0) @numerador = @numerador.abs @denominador = @denominador.abs elsif(@numerador<0 && @denominador>0) @numerador = @numerador.abs @denominador = @denominador.abs else @numerador = -(@numerador.abs) @denominador = @denominador.abs end Fraccion.new(@numerador,@denominador) end
metodo para calcular la division de dos fracciones
# File lib/prac09/fraccion.rb, line 97 def /(object) #multiplica numerador con numerador y denominador con denominador Fraccion.new(@numerador*object.denominador,@denominador*object.numerador) end
Utilizamos el metodo del modulo Comparable para realizar operaciones comparacionales de fracciones
# File lib/prac09/fraccion.rb, line 120 def <=> (object) self.to_float<=>object.to_float end
metodo para calcular el valor absoluto de una fraccion
# File lib/prac09/fraccion.rb, line 41 def abs () Fraccion.new(@numerador.abs,@denominador.abs) end
# File lib/prac09/fraccion.rb, line 146 def coerce(object) [self,object] end
metodo que devuelve el denominador
# File lib/prac09/fraccion.rb, line 26 def denom() @denominador end
# File lib/prac09/fraccion.rb, line 124 def gcd(n, d) n1,n2 = n.abs,d.abs gcd = 1 k = 1 while (k <= n1 and k <= n2) if (n1 % k == 0 and n2 % k == 0) gcd = k end k += 1 end return gcd end
metodo para hallar el minimo comun multiplo de los dos numeros pasados como parametros
# File lib/prac09/fraccion.rb, line 139 def mcm(a,b) #mediante el metodo de euclides, resolvemos el minimo comun multiplo mediante el #maximo comun divisor aux=gcd(a,b) (a/aux)*b end
metodo que devuelve el numerador
# File lib/prac09/fraccion.rb, line 21 def num() @numerador end
metodo para calcular el reciproco de una fraccion
# File lib/prac09/fraccion.rb, line 46 def reciprocal () Fraccion.new(@denominador,@numerador) end
metodo para mostrar por la consola la fraccion en punto flotante
# File lib/prac09/fraccion.rb, line 36 def to_float (@numerador.to_f()/@denominador.to_f) end
metodo para mostrar por la consola la fraccion
# File lib/prac09/fraccion.rb, line 31 def to_s "#{@numerador}/#{@denominador}" end