elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ¿Números aleatorios sin repetición?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Números aleatorios sin repetición?  (Leído 18,596 veces)
theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
¿Números aleatorios sin repetición?
« en: 2 Marzo 2012, 03:59 am »

Hola a todos, estoy aprendiendo a usar la función Rnd y Randomize, y quise llenar un arreglo con números desde el número 1 hasta el 40 en forma desordenada, es decir, generar dichos números mediante la función pero que no se repitan ni uno solo. Mi código es el siguiente, pero no sé porqué me genera números aleatorios repetidos, creo que algo está mal pero no lo encuentro:

Código:
Dim N, M, Al As Integer
      Dim Repite As Boolean
      Repite = False
      Randomize
         If Azar = "Sí" Then
            Aleatorios(1) = Int(40 * Rnd + 1)
            For N = 2 To 40
               Do
                  Al = Int(40 * Rnd + 1)
                  For M = 1 To N - 1
                     If Al = Aleatorios(M) Then
                        Repite = True
                     Else
                        Repite = False
                     End If
                  Next
                Loop While Not (Repite = False)
                Aleatorios(N) = Al
                MsgBox Al
            Next
         Else
            For N = 1 To 40
               Aleatorios(N) = N
            Next
         End If


En línea

theluigy13etv

Desconectado Desconectado

Mensajes: 179


Primero se hace, después se mejora


Ver Perfil
Re: ¿Números aleatorios sin repetición?
« Respuesta #1 en: 2 Marzo 2012, 04:15 am »

Aleatorios es un arreglo de Integer, está declarado en otro lado. De todas maneras ya lo solucioné, ya me di cuenta, el código es el siguiente:

Código:
Dim N, M, Al As Integer
      Dim Repite As Boolean
     
         If Azar = "Sí" Then
            Aleatorios(1) = Int(40 * Rnd + 1)
            For N = 2 To 40
               Randomize
               Do
                  Repite = False
                  Al = Int(40 * Rnd + 1)
                  For M = 1 To N - 1
                     If Al = Aleatorios(M) Then
                        Repite = True
                     End If
                  Next
                Loop While Repite = True
                Aleatorios(N) = Al
            Next
         Else
            For N = 1 To 40
               Aleatorios(N) = N
            Next
         End If


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: ¿Números aleatorios sin repetición?
« Respuesta #2 en: 2 Marzo 2012, 04:21 am »

No puedo ver bien el codigo desde el mobil. Pero porque no en lugar de generar numeros aleatorios "irrepetibles" haces un array de 1 a 40 y lo desordenas? Es mas rapido :P

Con un bucle, recorres el array pidiendo un numero aleatorio y desplazas el numero de la posicion actual, asi lo desordenas.

Ej (i es la posicion, j es el aleatorio)
1-2-3-4-5
i=1, j=3
Resultado 3-2-1-4-5
i=2, j=2
Resultado 3-4-1-2-5

Y asi sucesivamente n.n, es cuestion de jugar con logica
En línea

arfgh

Desconectado Desconectado

Mensajes: 45


Ver Perfil
Re: ¿Números aleatorios sin repetición?
« Respuesta #3 en: 2 Marzo 2012, 13:20 pm »

una manera de obtener números bien aleatorios también sería un desplazamiento aleatorio de bits, no es así ?
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: ¿Números aleatorios sin repetición?
« Respuesta #4 en: 2 Marzo 2012, 16:02 pm »

HOLA!!!

En el mundo de las computadoras no existe lo aleatorio...

Todas las funciones aleatorias funcionan con una raiz o semilla un numero base con el cual calculas el resto.

Eso del desplazamiento de bits aleatorio no tiene sentido ya que para hacer esa funciona aleatoria dependerias de la funcion rnd que estas utilizando actualmente por ende es codigo sin sentido.

No se si te fui util o no, mucho no me interesa pero solo queria aclarar eso.

P.D: hay una manera de conseguir numeros aleatorios...
Se necesita un periferico que capte por ejemplo la velocidad del viento (sera aleatoria aunque progresiva y escalada) y ese numero combinado con la fecha y hora actual se usa como semilla para la funcion.

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ¿Números aleatorios sin repetición?
« Respuesta #5 en: 3 Marzo 2012, 07:32 am »

.
NO USES Randomize con ciclos do while o ciclos muy cortos NO FUNCIONA, es mejor no usar Randomize a mi criterio.

Te dejo mi código (viene con un ejemplo de la utilización de la clase):

CRandNumberNR.cls

Dulces Lunas!¡.
« Última modificación: 3 Marzo 2012, 07:35 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Deeo Raiser

Desconectado Desconectado

Mensajes: 22


Se todo Sobre Ti.


Ver Perfil WWW
Re: ¿Números aleatorios sin repetición?
« Respuesta #6 en: 4 Marzo 2012, 02:48 am »

Hola theluigy13etv como estas ?

Me leí todos los comentarios y lo que me pareció mas lógico fue el comentario de raul338, lo que yo haría seria lo siguiente:

Crear un array o vector de 40 posiciones luego usar la función RND que seleccione el indice del array y con un For que haga 80 vueltas y que en cada una intercambie de posición los elementos.

De esta forma te aseguras de que este totalmente desordenado, y que estén los 40 elementos iniciales.
En línea




"Recuerda siempre que tu propia  resolución de triunfar es mas importante que cualquier otra cosa."
Abraham Lincoln
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.462


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: ¿Números aleatorios sin repetición?
« Respuesta #7 en: 5 Marzo 2012, 18:27 pm »

Estoy de acuerdo con BlackZeroX (Astaroth), pero si quieres usar Randomize asegurate de usarlo al principio de todo (fuera de los bucles).

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Números Aleatorios
Programación C/C++
Kropt32 2 2,917 Último mensaje 2 Agosto 2010, 20:43 pm
por do-while
Generar numeros aleatorios sin repeticion[C]
Programación C/C++
HRSLASH 2 24,982 Último mensaje 28 Diciembre 2010, 06:58 am
por von Newman
Números aleatorios sin repeticion
Programación C/C++
samirllorente 2 2,575 Último mensaje 12 Abril 2013, 19:32 pm
por leosansan
Problema repetición de números
Java
piete2 7 3,087 Último mensaje 21 Febrero 2015, 17:34 pm
por 3n31ch
for y repetición de numeros en c
Programación C/C++
diegoecw 2 2,042 Último mensaje 29 Marzo 2017, 05:35 am
por diegoecw
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines