Generar números aleatorios en Visual Basic (decimales o enteros). Randomize y Rnd. Intervalos (CU00315A)

Resumen: Entrega nº14 del curso Aprender a programar en Visual Basic desde cero.
Codificación aprenderaprogramar.com: CU00315A

 

 

GENERACIÓN DE NÚMEROS ALEATORIOS – FUNCIÓN Rnd
 
La generación de números aleatorios adquiere gran relevancia para un programador, pudiendo usarse para:
 
  * Construcción preliminar de programas, en los que a falta de datos definitivos introducimos datos aleatorios.

Visual Basic

 

 

* Simular procesos aleatorios (número resultante de tirar un dado, elección de un color por parte de una persona, número premiado en un sorteo de lotería, cantidad de personas que entran a un supermercado en una hora...)

  * Verificación de programas, y en particular simular datos que le llegan al programa como si fueran datos provinientes de entradas de usuario, de una base de datos, de un fichero, etc.
  * Otras aplicaciones.

Conviene recordar que "aleatorio" no puede confundirse con "cualquier cosa", "descontrol", "incierto", "impredecible", etc. Usaremos aleatorio más en el sentido de no predeterminado que en el de no predecible, ya que en general vamos a definir qué tipo de resultado queremos obtener y en qué rango de valores debe estar. Vamos a imaginar que Visual Basic genera números aleatorios como si fuera un robot lanzador de dardos muy preciso (robot Rnd). De este modo, cuando se le dice que comience a tirar dardos en distintas posiciones, repite siempre los lugares. Por ejemplo, si la diana está marcada con números, cada vez que le decimos que tire genera la misma secuencia: 7, 5, 6, 3, etc. ¿Cómo conseguir convertir este proceso predefinido en aleatorio? Pues simplemente poniendo a girar la diana (mayordomo Randomize) esta vez a una velocidad que depende del segundo del día en que nos encontremos. Así pues, el proceso lo dividimos en decirle al mayordomo que ponga a girar la diana y en decirle al robot que dispare. Bueno, un poco simple, pero ¿para qué complicarnos? Veamos la sintaxis a emplear:

1)    Asignación de valor aleatorio a una variable

Randomize         [Instrucción que inicializa el generador de números aleatorios]

Variable = Rnd  [Obtención de un número aleatorio igual o mayor que cero y menor que uno]

En las versiones más recientes de Visual Basic la sintaxis es Randomize(): Variable = Rnd()

 

2)    Mostrar un valor aleatorio.

Randomize: MsgBox (“El número aleatorio es “ & Rnd) para las versiones menos recientes

Randomize() : MsgBox("El número aleatorio es " & Rnd()) para las versiones más recientes

 

El valor devuelto por Rnd es de tipo Single, aunque si la variable a la que se asigna el contenido de Rnd es de otro tipo, tendrá lugar la conversión del valor originario para adaptarlo al tipo de variable de que se trate. Un aspecto importante a tener en cuenta es que el valor devuelto se encuentra en el rango 0<= Rnd < 1. Es decir, el número devuelto puede ser cero pero no puede ser uno. Podemos trasladarnos a un intervalo distinto simplemente multiplicando. Por ejemplo Rnd * 100 ó Rnd() * 100 devolverá números comprendidos entre cero y cien excluido el cien. Si usamos CInt(Rnd * 100) ó CInt(Rnd() * 100) estaremos convirtiendo el tipo Single que nos devuelve el Rnd en un tipo Integer, con lo que obtenemos valores enteros comprendidos entre 0 y 99.

Un caso muy habitual será el de querer generar números aleatorios comprendidos en un intervalo delimitado por un límite superior y un límite inferior siendo estos límites valores positivos. Para ello podemos usar la fórmula:

 
N = (Limsup - Liminf) * Rnd + Liminf

 

Limsupy Liminf son los límites superior e inferior respectivamente (valores positivos) y N el número aleatorio generado. El primer sumando puede adquirir el valor comprendido entre cero y el intervalo diferencia, excluido éste. El segundo sumando determina que el valor debe estar necesariamente comprendido entre el límite inferior y el límite superior.

Consideremos ahora que queremos generar valores enteros comprendidos entre a y b incluidos ambos, siendo a y b valores positivos. La fórmula a emplear sería:

N = Int((b - a + 1) * Rnd + a)

 

 

En este caso, usamos un truncamiento para garantizar que el valor superior del intervalo se encuentre entre los posibles valores de N.

Una instrucción Randomize te puede servir para varios Rnd. De todas formas, cuando tengas dudas, pon un Randomize asociado a cada uno de los Rnd.

Recuerda que en algunas versiones se usa Randomize y Rnd sin paréntesis y en otras se usa Randomize() y Rnd() con paréntesis.

 

 

 

 
 
  
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.
 
Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

Donar o colaborar

Este sitio se mantiene abierto gracias al apoyo de muchas personas. Si crees que merece la pena apoyar económicamente este sitio web puedes realizar una donación o colaborar. Contacta con nosotros.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

JULIO - AGOSTO 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. JavaScript, jQuery
5. .NET, C#
6. HTML, CSS
7. Android, iOS
8. Php, MySql


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación