Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Generación de números aleatorios Javascript


Taller en el que se crea una función para generar números aleatorios en lenguaje Javascript.


26/4/02 - En Javascript disponemos de la clase Math, muy útil cuando queremos hacer cálculos matemáticos de cierta complejidad. Dicha clase está explicada y documentada en un capítulo del manual de Javascript II. Para el que lo necesite, también tenemos explicaciones de lo que son las clases y los objetos.

En este taller de Javascript vamos a construir una simple función para crear un número aleatorio, entre un mínimo y un máximo, que podremos utilizar luego en otros scripts más complejos.

Aquí tenemos el código que hace uso del método random de la clase Math para obtener un número aleatorio con Javascript.

var aleatorio = Math.random()

Así hemos creado una variable aleatorio a la que asignamos el resultado de ejecutar el método random de la clase Math. El número aleatorio que obtenemos siempre estará comprendido entre 0 y 1.

Si deseamos obtener un número aleatorio en otro rango lo podemos conseguir con un poco de matemáticas y la clase Math. Para ilustrarlo vamos a hacer una función que devuelve un número aleatorio comprendido en un intervalo. El intervalo lo recibe como parámetro con dos variables, una para el límite por la parte inferior y otra para la el límite por la parte superior.

function aleatorio(inferior,superior){
    numPosibilidades = superior - inferior
    aleat = Math.random() * numPosibilidades
    aleat = Math.round(aleat)
    return parseInt(inferior) + aleat
}

La función que hemos hecho es muy sencilla, pero funciona perfectamente para todos los tipos de intervalos que podamos pasarle, tanto con números positivos como negativos. Lo primero que hacemos es obtener el número de posibilidades restando al límite superior el inferior. Luego multiplicamos dicho numero de posibilidades por el número aleatorio obtenido (que está entre 0 y 1), con lo que obtenemos un número aleatorio entre 0 y el número de posibilidades.

Nota: Esta función tiene un pequeño problema, pues los números aleatorios que devuelve no tienen las mismas posibilidades de salir. Para solucionarlo, un visitante ha incluido un comentario en el artículo que se aconseja leer.

El número tiene un montón de decimales, y en este ejemplo deseamos obtener un número entero, sin decimales. Por eso luego utilizamos el método round() de la clase Math, que nos da el entero más próximo. Como el número todavía está entre 0 y el número de posibilidades tenemos que sumarle el límite inferior, con lo que estará dentro del rango que deseamos. Este último valor será en que devuelva la función.

Esta función se puede ver en marcha en una página a parte. En el ejemplo hemos construido un pequeño formulario que podemos rellenar con el míninmo y el máximo y cuando apretemos sobre el botón se mostrará el valor aleatorio en el campo de abajo del todo.

Un ejemplo de lo que podemos hacer con un número aleatorio puede ser crear un enlace aleatorio en una página web. Lo podemos ver en el ejemplo Enlace aleatorio en Javascript. Además, en este ejemplo se crea el número aleatorio de manera ligeramente distinta a como lo hemos visto ahora, lo que puede ser interesante para aprender mejor a usar los métodos de la clase Math.

Nota: Insisto, leeros los comentarios que acompañan a este artículo (un poco más abajo de estas líneas) ya que ofrecen scripts mejorados para crear números aleatorios. Además, hay algún comentario con un script para asegurarse que las posibilidades de aparición de cada valor aleatorio sean las mismas.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 5 comentarios (Añadir)
+ 2 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Miguel Angel Alvarez*
Director de DesarrolloWeb.com

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de Javascript

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Scripts en Javascript


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 5 comentarios revisados

 Comentario de Gustavo Doldán
15/12/03 
En el artículo: "Generación de números aleatorios Javascript", le detecté un error a la función:

function aleatorio(inferior,superior){
    numPosibilidades = superior - inferior
    aleat = Math.random() * numPosibilidades
    aleat = Math.round(aleat)
    return parseInt(inferior) + aleat
}

Lo correcto seria:

function aleatorio(inferior,superior){
    numPosibilidades = superior - inferior
    aleat = Math.random() * numPosibilidades
    aleat = Math.floor(aleat)
    return parseInt(inferior) + aleat
}

Ya que al usar el round generamos numeros entre inferior y superior + 1, teniendo los dos extremos la mitad de probabilidad que los otros numeros del intervalo.

Por ejemplo aleatorio(0,4) devuelve numeros entre 0 y 5

con las siguientes probablidades:

0:0,1
1:0,2
2:0,2
3:0,2
4:0,2
5:0,1

Bueno disculpa la molestia, pero era por si queres corregirlo.
En realidad me dí cuenta: no por suspicaz, sino porque al aplicarla los valores extremos salían menos seguido: pero bueno muchos descubrimentos fueron empíricos!! jaja

 Comentario de Randou
01/8/05 
mis mas sinceras gracias al que escribio el articulo y el ejemplo de numeros aleatorios, me fue muy util, con respecto al Comentario de Gustavo Doldán quisiera hacer notar algo, por alguna razon al cambiar del Comoando ROUND al comando FlOOR el numero maximo no se da entre las opciones de los numero aleatorios, es decir si se coloca como minimo el 1 y el 6 como maximo solo salen los numeros del 1 al 5
otra cosa no se por que poero solo funciona en ciertas computadoras, si alguien me puede explicar por que se da esto se lo agradeceria

 Comentario de Gerardo Angeles Nava
10/10/05 
Yo hice unas modificaciones, pero envio el código en Java, que es en lo que necesitaba la función y la implemente:

for(int i = 1; i <= 5; i++){
    int inferior = 5;
    int superior = 8;
    int numPosibilidades = (superior + 1) - inferior;
    double aleat = Math.random() * numPosibilidades;
    aleat = Math.floor(aleat);
    aleat = (inferior + aleat);
    System.out.println("Entre " + inferior + " y " + superior + " aleatorio " + i + " : " + aleat);
    if((aleat < inferior) || (aleat > superior)) System.out.println("Rango erroneo");
}

 Comentario de Gerardo Angeles Nava
10/10/05 
Ok, envie un comentario pero escrito en lenguaje en Java, ya hice los ajustes para JavaScript y contempla generar un número aleatorio del rango 0 al limite superior y también del rango limite Inferior al limite superior, espero sirva, gracias.

for(var i = 1; i <= 5; i++){
    var iSuperior = 8;
    var dResult = Math.random();
    dResult = Math.floor(dResult * (iSuperior + 1));
    document.writeln("Entre 0 y " + iSuperior + " aleatorio " + i + " : " + dResult);
    document.writeln("<br>");
    if(dResult > iSuperior) document.writeln("Rango erroneo");
    }

for(var i = 1; i <= 5; i++){
    var inferior = 5;
    var superior = 8;
    var numPosibilidades = (superior + 1) - inferior;
    var aleat = Math.random() * numPosibilidades;
    aleat = Math.floor(aleat);
    aleat = (inferior + aleat);
    document.writeln("Entre " + inferior + " y " + superior + " aleatorio " + i + " : " + aleat);
    document.writeln("<br>");
    if((aleat < inferior) || (aleat > superior)) System.out.println("Rango erroneo");
}

 Comentario de Ricardo
08/2/06 
He hecho unas modificaciones al script para saber si los números aleatorios salen más o menos con las mismas probabilidades.

Simplemente realizo una muestra de 1000 números aleatorios y acumulo cuantas veces aparece cada uno de ellos. Luego muestro las veces que han aparecido y las apariciones deberían ser bastante próximas para los distintos valores posibles.

Parece que todo funciona bien y que los números aleatorios salen perfectamente. Este es el script que he creado:

<script>
//creo un array
contador_apariciones=new Array()
contador_apariciones[5]=0
contador_apariciones[6]=0
contador_apariciones[7]=0
contador_apariciones[8]=0

for(var i = 1; i <= 1000; i++){
var inferior = 5;
var superior = 8;
var numPosibilidades = (superior + 1) - inferior;
var aleat = Math.random() * numPosibilidades;
aleat = Math.floor(aleat);
aleat = (inferior + aleat);

contador_apariciones[aleat]++

document.writeln("Entre " + inferior + " y " + superior + " aleatorio " + i + " : " + aleat);
document.writeln("<br>");
if((aleat < inferior) || (aleat > superior)) System.out.println("Rango erroneo");
}

document.writeln ("<p>")
document.writeln ("<br>Contador de apariciones del 5: " + contador_apariciones[5])
document.writeln ("<br>Contador de apariciones del 6: " + contador_apariciones[6])
document.writeln ("<br>Contador de apariciones del 7: " + contador_apariciones[7])
document.writeln ("<br>Contador de apariciones del 8: " + contador_apariciones[8])
</script>


Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 2 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de Javascript
Categorías
+Scripts en Javascript

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia