Class: Racional

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/modai_prct12/racional.rb

Overview

Implemente una clase Ruby para representar los números racionales.

Un número racional es un número con un numerador y un denominador de la forma. a/b

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(num, denom) ⇒ Racional

Se inicializa la fracción en su forma reducida haciendo uso de gcd

Raises:

  • (TypeError)


11
12
13
14
15
16
17
18
19
# File 'lib/modai_prct12/racional.rb', line 11

def initialize(num, denom)

  raise TypeError, "El denominador debe ser mayor que cero" unless (denom != 0)

  div = gcd(num, denom)
  @num = num/div
  @denom = denom/div

end

Instance Attribute Details

#denomObject (readonly)

Gets y Sets de @num y @denom



22
23
24
# File 'lib/modai_prct12/racional.rb', line 22

def denom
  @denom
end

#numObject (readonly)

Gets y Sets de @num y @denom



22
23
24
# File 'lib/modai_prct12/racional.rb', line 22

def num
  @num
end

Instance Method Details

#%(o) ⇒ Object

Calcula el resto dos fracciones con % y dar el resultado de forma reducida



99
100
101
102
103
104
105
106
# File 'lib/modai_prct12/racional.rb', line 99

def %(o)

  if o.is_a? Integer
    o = Racional.new(o,1)
  end
  Racional.new(num%denom, o.num%o.denom)

end

#*(o) ⇒ Object

multiplica dos fracciones con * y dar el resultado de forma reducida



79
80
81
82
83
84
85
86
# File 'lib/modai_prct12/racional.rb', line 79

def *(o)

  if o.is_a? Integer
    o = Racional.new(o,1)
  end
  Racional.new(num*o.num,denom*o.denom)

end

#+(o) ⇒ Object

suma dos fracciones con + y dar el resultado de forma reducida



59
60
61
62
63
64
65
66
# File 'lib/modai_prct12/racional.rb', line 59

def +(o)
  
  if o.is_a? Integer
    o = Racional.new(o,1)
  end
  Racional.new(num*o.denom + o.num*denom, denom*o.denom)

end

#-(o) ⇒ Object

resta dos fracciones con - y dar el resultado de forma reducida



69
70
71
72
73
74
75
76
# File 'lib/modai_prct12/racional.rb', line 69

def -(o)

  if o.is_a? Integer
    o = Racional.new(o,1)
  end
  Racional.new(num*o.denom - o.num*denom, denom*o.denom)

end

#-@Object

Calcular el opuesto de una fraccion con -



54
55
56
# File 'lib/modai_prct12/racional.rb', line 54

def -@
  Racional.new(-denom, num)        
end

#/(o) ⇒ Object

Divide dos fracciones con / y dar el resultado de forma reducida



89
90
91
92
93
94
95
96
# File 'lib/modai_prct12/racional.rb', line 89

def /(o)

  if o.is_a? Integer
    o = Racional.new(o,1)
  end
  Racional.new(num*o.denom,denom*o.num)

end

#<=>(o) ⇒ Object

GERRA DE LAS GALAXIAS : un metodo que proporciona la comparación de mayor, mayor igual, menor, menor igual



109
110
111
112
# File 'lib/modai_prct12/racional.rb', line 109

def <=>(o)
  return nil unless o.instance_of? Racional
  (num.to_f / denom) <=> (o.num.to_f / o.denom)
end

#==(o) ⇒ Object

comparar que dos fracciones son iguales



30
31
32
33
34
35
36
# File 'lib/modai_prct12/racional.rb', line 30

def ==(o)
  if o.instance_of? Racional
      @num == o.num && @denom == o.denom
  else
      false
  end
end

#absObject

Calcular el valor absoluto de una fraccion con el metodo abs



44
45
46
# File 'lib/modai_prct12/racional.rb', line 44

def abs
  Racional.new(num.abs, denom.abs)
end

#coerce(other) ⇒ Object

El metodo coerce para onvierte el valor especificado en el tipo especificado.



115
116
117
# File 'lib/modai_prct12/racional.rb', line 115

def coerce(other)
  return Racional.new(other,1), self
end

#reciprocalObject

calcular el reciproco de una fraccion con el metodo reciprocal



49
50
51
# File 'lib/modai_prct12/racional.rb', line 49

def reciprocal
  Racional.new(denom, num)
end

#to_fObject

Mostar la fraccion en formato flotante



39
40
41
# File 'lib/modai_prct12/racional.rb', line 39

def to_f
  num.to_f/denom
end

#to_sObject

mostar por la consola la fraccion de la forma: a/b



25
26
27
# File 'lib/modai_prct12/racional.rb', line 25

def to_s
  "#{num}/#{denom}"
end