Autor Tema: Dudas codigo Randomize CU00315A Visual Basic no genera aleatorios  (Leído 4939 veces)

berres

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Tal y como me recomendasteis estoy haciendo el curso de visual basic para completar el aprendizaje del pseudocodigo.

He llegado al tema de los numeros aleatorios (CU00315A/CU00316A) y resulta que despues de seguir los ejemplos, al ejecutar el programa, siempre me devuelve los mismos resultados con lo cual me asalta la duda de "como de aleatorios" son esos numeros si al final el resultado de cada variable será la misma.

Me explico con un ejemplo.
Supongamos que quiero crear un programa en el que un dado decide las casillas que debo avanzar. El numero del dado será predecible ya que sé que resultado aparece con cada variable. Por lo tanto puedo conseguir el numero que deseo eligiendo la variable determinada para ese numero.
¿Que paso es el que hace que definitivamente sea impredecible la tirada siguiente?
« Última modificación: 05 de Septiembre 2014, 10:29 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Dudas con el codigo Randomize
« Respuesta #1 en: 11 de Febrero 2013, 20:31 »
Hola berres, has tratado un tema bastante curioso, que es el concepto de "aleatorio" en un ordenador, que por definición es una máquina no aleatoria  ::)

Si el programa siempre te devuelve los mismos resultados es que no está funcionando bien. Léete el texto de la entrega "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..." porque ahí tienes la respuesta.

Posiblemente tengas algún error de sintaxis, y entonces el mayordomo no pone a girar la diana  :D Tienes que obtener resultados distintos cada vez, resultados aparentemente aleatorios, si no, tienes algún error.

Te dejo este pequeño código (es de visual basic 2010) de ejemplo:

Public Class Form1
    Dim numeroAleatorio As Integer
    Dim limiteSuperior As Integer
    Dim limiteInferior As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        limiteSuperior = 100
        limiteInferior = 1
               
        For i = 1 To 10
            Randomize()
            numeroAleatorio = CInt(Int((limiteSuperior - limiteInferior + 1) * Rnd() + limiteInferior))
            Label1.Text = Label1.Text & "Número generado: " & numeroAleatorio & vbCrLf
        Next

    End Sub
End Class


En visual basic 6 sería así:

    Dim numeroAleatorio As Integer
    Dim limiteSuperior As Integer
    Dim limiteInferior As Integer

Private Sub Form_Load()
limiteSuperior = 100
        limiteInferior = 1
               
        For i = 1 To 10
            Randomize
            numeroAleatorio = CInt(Int((limiteSuperior - limiteInferior + 1) * Rnd() + limiteInferior))
            Label1.Caption = Label1.Caption & "Número generado: " & numeroAleatorio & vbCrLf
        Next
End Sub

berres

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 14
    • Ver Perfil
Re:Dudas con el codigo Randomize
« Respuesta #2 en: 12 de Febrero 2013, 11:24 »
Hola Alex. Gracias por la rapidez en tu respuesta.

El programa que me pasas no funciona en vbasic 6.0, me dice que "i" es una variable no definida. Imagino que alguna modificacion al pasar del 2010 al 6 no es valida.

Aun asi he seguido revisando tranquilamente el código y he dado con el problema.
Al crear mi programa solo usaba rnd con las variables y no ponia Randomize antes de esto. Por lo tanto no "giraba la diana" tal y como me decias.

Gracias. Duda resuelta.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Dudas con el codigo Randomize
« Respuesta #3 en: 13 de Febrero 2013, 07:44 »
en vbasic 6.0, me dice que "i" es una variable no definida...

Esto es una cosa bien sencilla, lo que te está diciendo es que para usar una variable tienes que declarar antes que vas a usarla, y parece que al copiar el código se me olvidó copiar esa línea, lo único que habría que hacer es en vez de

Dim numeroAleatorio As Integer
Dim limiteSuperior As Integer
Dim limiteInferior As Integer


Poner:

Dim i As Integer
Dim numeroAleatorio As Integer
Dim limiteSuperior As Integer
Dim limiteInferior As Integer


Es decir, simplemente declarar que vamos a usar la variable i  ;)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".