No hay tantos métodos numéricos como los hay para textos (pienso que aun no los conozco a todos sin recurrir a la ayuda de documentación). Aquí, vamos a mirar el resto de los métodos aritméticos, un generador de números aleatorios, y el objeto Math, con sus métodos trigonométricos y transcendentales.
Más de aritmética
Los otros dos métodos aritméticos son ** (potencia) y % (módulo). Si quieres decir "cinco al cuadrado" en Ruby, deberías escribir algo así 5**2. También puedes usar flotantes para tus exponentes, entonces si quieres una raíz cuadrada de 5, deberías escribir 5**0.5.
Los métodos módulo te dan el sobrante después de una división por un número. Entonces, por ejemplo, si divido 7 por 3, obtengo 2 con un remanente de 1. Vamos a ver como trabaja un programa:
Código:
puts 5**2Resultado:
puts 5**0.5
puts 7/3
puts 7%3
puts 365%7
25De la última línea, aprendimos que un año (no bisiesto) tienen algún número de semanas, más un día. Entonces si tu cumpleaños fue un martes este año, el próximo año será un miércoles. También puedes usar flotantes con el método módulo (%). Básicamente, funciona de una manera lógica... pero voy a mostrar un poco mas como trabajar con esto.
2.23606797749979
2
1
1
Hay un último método para mencionar antes de revisar el método random: abs. Éste sólo toma el valor absoluto de un número:
Código:
puts((5-2).abs)Resultado:
puts((2-5).abs)
3Números aleatorios
3
Ruby viene con un lindo generador de números aleatorios. El método para obtener un número aleatorio es rand. Si invocas a rand, obtendrás un número flotante mayor o igual a 0.0 y menor a 1.0. Si le proporcionas a rand un número entero (5 por ejemplo), esto te devolverá un entero mayor o igual a 0 y menor a 5 (entonces son cinco números posibles, de 0 a 4).
Vamos a ver rand en acción.
Código:
puts randUn posible resultado:
puts rand
puts rand
puts(rand(101))
puts(rand(101))
puts(rand(101))
puts(rand(1))
puts(rand(1))
puts(rand(1))
puts(rand(99999999999999999999999999999999999999999999999999999999999))
puts('El hombre del tiempo dijo que hay '+rand(101).to_s+'% de posibilidades de que llueva,')
puts('pero nunca debes confiar en el.')
0.866769322351658
0.155609260113273
0.208355946789083
61
46
92
0
0
0
22982477508131860231954108773887523861600693989518495699862
El hombre del tiempo dijo que hay 47% de posibilidades de que llueva, pero nunca debes confiar en el.
Fijate que utilicé rand(101) para obtener números entre 0 y 100, y que el rand(1) siempre devuelve 0. No entender el rango posible de retorno de valores es el error más grande que veo en gente que hace rand; aún en programadores profesionales, más aún en productos finalizados que puedes comprar. Incluso tenía un reproductor de CD que si se configuraba en "Reproducción aleatoria," reproducia todas las canciones menos la última... (me pregunto ¿qué hubiera pasado si hubiera puesto un CD con sólo una canción en ella?)
Algunas veces querrás que rand retorne el mismo random de números incluso en la misma secuencia en dos diferentes ejecuciones de tu programa. Por ejemplo, una vez estaba utilizando números generados aleatoriamente para crear un mundo al azar por un juego de computadoras. Encontré un mundo que realmente me gustó, quizás me hubiera gustado jugar de nuevo con éste o enviarlo a un amigo. Con el fin de hacer esto, necesitas configurar la "generación de éste", lo que se puede hacer con srand. Como lo siguiente:
Código:
srand 1776Resultado:
puts(rand(100))
puts(rand(100))
puts(rand(100))
puts(rand(100))
puts(rand(100))
puts '...'
srand 1776
puts(rand(100))
puts(rand(100))
puts(rand(100))
puts(rand(100))
puts(rand(100))
24Esto hará la misma cosa cada vez que inicies con el mismo número. Si quieres obtener diferentes números(como pasaría si nunca utilizaras srand), entonces basta usar srand 0. Esto inicializa con un número realmente raro, utilizando (además de otras cosas) la hora actual de tu computadora, hasta los milisegundos.
35
36
58
70
...
24
35
36
58
70
El Objeto Math
Finalmente, vamos a echar un vistazo al objeto Math. Vamos a verlo de lleno:
Código:
puts(Math::PI)Resultado:
puts(Math::E)
puts(Math.cos(Math::PI/3))
puts(Math.tan(Math::PI/4))
puts(Math.log(Math::E**2))
puts((1 + Math.sqrt(5))/2)
3.14159265358979La primera cosa de la que te habrás dado cuenta es probablemente de la notación :: pero todavía no vamos a explicar qué significa esto.
2.71828182845905
0.5
1.0
2.0
1.61803398874989
Como puedes ver, el objeto Math tiene todas las cosas que podrías esperar de una calculadora científica decente. Y como siempre, los flotantes están realmente cerca de ser la respuesta correcta.
0 comentarios:
Publicar un comentario