Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Consulta sobre numeros aleatorios

Estas en el tema de Consulta sobre numeros aleatorios en el foro de Visual Basic clásico en Foros del Web. hola, soy nuevo en el foro, y quiero hacerles una consulta sobre el tema de los numeros aleatorios. nomalmente utilizo el Random y Ramdom.next(0, 10) ...
  #1 (permalink)  
Antiguo 05/09/2008, 10:02
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Consulta sobre numeros aleatorios

hola, soy nuevo en el foro, y
quiero hacerles una consulta sobre el tema de los numeros aleatorios.
nomalmente utilizo el Random y Ramdom.next(0, 10) y esas cosas.
pero es que mirad lo que necesito
quiero una cadena de nuemeros en este sentido

MiCadena = 15 18 20 24 25 29 21 19 17 16

entre 10 y 30, y que no se repitan.
y otra cosa, que quiero saber, es como hacer este procedimiento en esta estructura

Function MiFuncion()
[Codigo]
return

no se si me aga entender, llevo poco en el Visual Basic.

muchas gracias de antemano
  #2 (permalink)  
Antiguo 05/09/2008, 10:11
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Consulta sobre numeros aleatorios

Una forma sería colocar en un array los 30 elementos y luego con Random desordenar ese array, extrayendo los 10 primeros números.

Otra forma es generar un número aleatorio entre 1 y 30 y colocar en un array, cada vez que se genera un nuevo número comprobar si el número todavía no está en el array, y si existe volver a generar otro.

¿Con cuál versión de Visual Basic estás trabajando?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 05/09/2008, 13:35
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Consulta sobre numeros aleatorios

el 2005, que creo que es la Version 8, no estoy seguro.
ha perso uso el Visual Basic Express Edition
me parece buena idea la segunda, va mas con este ejercicio,
gracias
  #4 (permalink)  
Antiguo 05/09/2008, 13:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Consulta sobre numeros aleatorios

¿Has logrado hacer algo de lo que te comenté?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 06/09/2008, 04:32
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Consulta sobre numeros aleatorios

Cita:
Iniciado por dr--dre Ver Mensaje
el 2005, que creo que es la Version 8, no estoy seguro.
ha perso uso el Visual Basic Express Edition
me parece buena idea la segunda, va mas con este ejercicio,
gracias
Hola, prueba con esta función (la pongo bien comentada para que no tengas dudas):

Código:
Public Function Aleatorios(ByVal iNum As Integer, ByVal iInf As Integer, ByVal iSup As Integer) As Integer()
        Dim a() As Integer, i As Integer, j As Integer, x As Integer

        ReDim a(iNum - 1) ' redimensionamos la matriz (el subíndice es cero)
        Randomize()
        For i = 0 To iNum - 1
inicio:
            ' generamos un número aleatorio entre los valores indicados
            x = Int((iSup - iInf + 1) * Rnd + iInf)
            For j = 0 To i
                ' si el número ya existe en el array, lo descartamos
                If x = a(j) Then GoTo inicio
            Next j
            ' no existe, lo añadimos a la matriz
            a(i) = x
        Next i

        ' ordenamos el array (recuperamos las variables anteriores para no asignar nuevas)
        ' Nota: Si no los necesitas ordenados, suprime el siguiente bucle
        x = 1
        While (x = 1)
            x = 0
            For i = 1 To UBound(a)
                If a(i - 1) > a(i) Then
                    j = a(i - 1)
                    a(i - 1) = a(i)
                    a(i) = j
                    x = 1
                End If
            Next i
        End While
        ' devolvemos la matriz generada
        Return a
    End Function
Para llamarla, p.e. desde un Button:

Código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' parámetros: Cantidad de números, primer número, último número
        ' en este caso: 10 números alatorios sin repetición entre el 10 y el 30
        Dim miArray() As Integer = Aleatorios(10, 10, 30)

        ' los mostramos en un control ListBox (para comprobación)
        Dim i As Integer = 0
        ListBox1.Items.Clear()
        For i = 0 To UBound(miArray)
            ListBox1.Items.Add(miArray(i))
        Next i
    End Sub
  #6 (permalink)  
Antiguo 07/09/2008, 10:57
 
Fecha de Ingreso: septiembre-2008
Mensajes: 4
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Consulta sobre numeros aleatorios

Cita:
Iniciado por Avellaneda Ver Mensaje
Hola, prueba con esta función (la pongo bien comentada para que no tengas dudas):

Código:
Public Function Aleatorios(ByVal iNum As Integer, ByVal iInf As Integer, ByVal iSup As Integer) As Integer()
        Dim a() As Integer, i As Integer, j As Integer, x As Integer

        ReDim a(iNum - 1) ' redimensionamos la matriz (el subíndice es cero)
        Randomize()
        For i = 0 To iNum - 1
inicio:
            ' generamos un número aleatorio entre los valores indicados
            x = Int((iSup - iInf + 1) * Rnd + iInf)
            For j = 0 To i
                ' si el número ya existe en el array, lo descartamos
                If x = a(j) Then GoTo inicio
            Next j
            ' no existe, lo añadimos a la matriz
            a(i) = x
        Next i

        ' ordenamos el array (recuperamos las variables anteriores para no asignar nuevas)
        ' Nota: Si no los necesitas ordenados, suprime el siguiente bucle
        x = 1
        While (x = 1)
            x = 0
            For i = 1 To UBound(a)
                If a(i - 1) > a(i) Then
                    j = a(i - 1)
                    a(i - 1) = a(i)
                    a(i) = j
                    x = 1
                End If
            Next i
        End While
        ' devolvemos la matriz generada
        Return a
    End Function
Para llamarla, p.e. desde un Button:

Código:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' parámetros: Cantidad de números, primer número, último número
        ' en este caso: 10 números alatorios sin repetición entre el 10 y el 30
        Dim miArray() As Integer = Aleatorios(10, 10, 30)

        ' los mostramos en un control ListBox (para comprobación)
        Dim i As Integer = 0
        ListBox1.Items.Clear()
        For i = 0 To UBound(miArray)
            ListBox1.Items.Add(miArray(i))
        Next i
    End Sub
muchas gracias, el codigo esta perfecto, es que precisamente lo necesitaba en ese tipo de estructura
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:21.