Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: x64core en 23 Mayo 2011, 00:15 am



Título: Ayuda numero aletorio no repetirse
Publicado por: x64core en 23 Mayo 2011, 00:15 am
holas buenas compañeros de foro  ;D
quisiera saber si me pueden ayudar a resolver este problema:
quiero crear una funcion que genere numeros aleatoreos de entre
1 a 10 pero no quiero q se repita un numero ya mostrado :P

digamos q al final me tiene q mostrar el intervalo de entre los 10 numeros pero en orden aleatoreo y sin repeticion y si podria con un codigo muy simplificado y sin tantas variables posibles esa es mi idea porq podria usar muchas variables pero eso es lo q no quiero :p
creo q me doy a entender amigos de ante mano gracias!


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: raul338 en 23 Mayo 2011, 00:55 am
No te daremos el codigo, al menos ya lo pensaste como hacer? :P


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: x64core en 23 Mayo 2011, 01:01 am
jeje sii
tengo para generar numero entre 1 a 10:

Código
  1. randomize
  2. T = Int((10 * Rnd) + 1)
  3.  

luego noc como hacer para verificar si ese numero ya lo e mostrado  :-\
talvez asignarlo a una variable y verificar con un if noce  :-\


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: 79137913 en 23 Mayo 2011, 01:05 am
HOLA!!!

Bueno, te digo, primero para verificar que no lo mostraste tenes que guardar todos los numeros mostrados, recomiendo un vector.

Luego, generas el numero aleatorio y verificas con un bucle que no este en el vector, si estaba, lo generas de nuevo, si no estaba lo guardas y lo mostras.

Espero que entiendas lo que digo.

GRACIAS POR LEER!!!


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: Edu en 23 Mayo 2011, 01:06 am
Mejor pseudocodigo que el de 79137913 no vas a encontrar, asique esperamos tu codigo :P


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: x64core en 23 Mayo 2011, 01:37 am
trate de hacer lo que dijo 79137913 pero creo q no lo logre porq
en el vector apareces algunos numero repetidos :/ noce en que estoy fallando este
es el codigo que hice

Código
  1. Dim n As Integer
  2. Dim a(9) As Integer
  3. Dim m As Integer
  4. Dim z As Integer
  5.  
  6.  
  7. For z = 1 To 10 ' generar 10 numero aleatoreos
  8.    Randomize
  9.    n = Int((10 * Rnd) + 1) ' genero el numero aleatoreo = n
  10.  
  11.    For m = 0 To 9
  12.        If a(m) <> n Then a(z - 1) = n
  13.    Next
  14. Next


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: Edu en 23 Mayo 2011, 01:40 am
Mmm esque no es asi, usa el Do-While para que guarde todos los numeros generados mientras no sea igual a uno que ya se guardo, es decir, podrias crear una funcion, Repetido() as Boolean para que sea la verificacion en el while


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: x64core en 23 Mayo 2011, 01:47 am
Mmm esque no es asi, usa el Do-While para que guarde todos los numeros generados mientras no sea igual a uno que ya se guardo, es decir, podrias crear una funcion, Repetido() as Boolean para que sea la verificacion en el while

 :P es q yo pensaba en generar el numero aleatoreo y guardarlo en el vector
luego generar el otro y verificar si ya existia en el vector con el bucle for
pero pana tu idea no la entiendo   :-\


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: _katze_ en 23 Mayo 2011, 02:20 am
generas el numero en primera medida...y la guardas en una variable termporal...en una iteracion recorres el vector si esta salis de la iteracion y generas de nuevo...y si esta lo guardas y lo mostras


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: Edu en 23 Mayo 2011, 02:21 am
Mira, leelo y entendelo, no te lo tendria que dejar pero bueno:

Código
  1. Option Explicit
  2.  
  3. Public Sub Form_Load()
  4.  
  5. Dim n As Integer
  6. Dim a(9) As Integer
  7. Dim m As Integer
  8. Dim i As Integer
  9.  
  10.  
  11. For i = 0 To 9
  12.  
  13. Do
  14. Randomize
  15.  
  16. m = Int((Rnd * 10) + 1)
  17.  
  18. Loop While (Existe(m, a()))
  19.  
  20. a(i) = m
  21.  
  22. Next i
  23.  
  24. For i = 0 To 9
  25.  
  26. MsgBox a(i)
  27.  
  28. Next
  29.  
  30. End Sub
  31.  
  32.  
  33.  
  34. Function Existe(m As Integer, a() As Integer) As Boolean
  35. Dim num
  36.  
  37. For Each num In a()
  38. If (m = num) Then Existe = True
  39. Next
  40.  
  41. End Function
  42.  
  43.  


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: x64core en 23 Mayo 2011, 02:33 am
generas el numero en primera medida...y la guardas en una variable termporal...en una iteracion recorres el vector si esta salis de la iteracion y generas de nuevo...y si esta lo guardas y lo mostras

amigo si ese era error en mi code q no salia del for le agrege exit for pero luego no encontre lo demas :/

@XXX-ZERO-XXX

 :o  ;D  gracias XXX-ZERO-XXX  se te agradece mucho si funciona exactamente!  ;-)


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: raul338 en 23 Mayo 2011, 03:10 am
Fijate bien como hace, aunque si bien hay otras formas de hacerlo :)

Se me ocurre hacer un array del 1 al 10 con respectivos valores, y despues con un bucle ir devolviendolos en forma desordenada siempre y cuando el valor a devolver no sea 0, controlandolo con un contador de los numeros devueltos. Seria buen ejercicio ;)


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: BlackZeroX en 23 Mayo 2011, 06:42 am
.
Me se ocurre aplicar el dicho Divide y Vencerás xP.

Código:
NumerosAleatorios (Numero Inicio, Numero Final, Array de valores a no considerar) {
MatrixRangos() = Realizar una búsqueda de valores para verificar si alguno de los numeros del array estan entre el valor de Inicio o el valor del Final: (un For Next bastara) , y generamos cortes de array's por ejemplo (  Inicio=0 final=10 array={5,8}  este paso genera 3 array que son:  {0,4},{6,7},{9,10} )
iIndice = Generamos un numero aleatorio desde Lbound(MatrixRangos()) hasta Ubound(MatrixRangos())
Retornamos el numero que se genera un numero aleatorio según los rangos que indique MatrixRangos( iIndice )(0) y MatrixRangos( iIndice )(1)
}

@XXX-ZERO-XXX

Código
  1.  
  2. Function Existe(m As Integer, a() As Integer) As Boolean
  3. Dim num
  4. For Each num In a()
  5. If (m = num) Then Existe = True: exit for ' // no tiene caso seguir en el for Each si ya se encontro.
  6. Next
  7. End Function
  8.  
  9.  

P.D.: No hice el codigo por que me tengo que ir a bañar xP ya lo hago.

Temibles Lunas!¡.
.


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: Edu en 23 Mayo 2011, 07:32 am
amigo si ese era error en mi code q no salia del for le agrege exit for pero luego no encontre lo demas :/

@XXX-ZERO-XXX

 :o  ;D  gracias XXX-ZERO-XXX  se te agradece mucho si funciona exactamente!  ;-)

Bueno pero lee el codigo, entendelo, fijate que use for-next, foreach-next, do-loop while, aprendelos bien.

Y black.. si.. se me paso eso pero si el codigo lo hice rapido, no pretendia optimizar velocidad xD Pero es buen consejo para el que pregunta ;)


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: 79137913 en 23 Mayo 2011, 13:49 pm
HOLA!!!

xxxZEROxxx, Indesta el codigo, se lee mejor asi, y no es necesario un Do loop, se puede hacer con for, editando el valor de las variables del for XD.

Raul100, viendo tu manera de pensar, arme este codigo que funciona con tu estructura:
Código
  1. Dim A(9) As Long
  2. Dim X As Long
  3. Dim Y As Long
  4.    Randomize
  5.    For X = 0 To 9
  6.        A(X) = Int(Rnd() * 10) + 1
  7.        For Y = 0 To 9
  8.            If A(X) = A(Y) And Y <> X Then X = X - 1: Exit For
  9.        Next
  10.    Next

GRACIAS POR LEER!!!


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: Edu en 23 Mayo 2011, 20:13 pm
Otro que me corrige.. yo se que son muchos mejores ustedes pero dejenme contestar una aunquesea que siempre me ganan de mano jaja, con lo que yo le puse entenderá bien y aprendera esos bucles que se ve que no los conocia.


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: 79137913 en 23 Mayo 2011, 21:15 pm
HOLA!!!

Otro que me corrige.. yo se que son muchos mejores ustedes pero dejenme contestar una aunquesea que siempre me ganan de mano jaja, con lo que yo le puse entenderá bien y aprendera esos bucles que se ve que no los conocia.

Sorry, no quise molestar :P

GRACIAS POR LEER!!!


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: BlackZeroX en 24 Mayo 2011, 08:10 am
.
Por si acaso ya hice una funcion Extentidad para generar un Numero Aleatorio, sin usar los For Next:  http://foro.elhacker.net/programacion_visual_basic/source_numeros_aleatorio_desde_x_a_y_con_esecciones-t328566.0.html

Temibles Lunas!¡.


Título: Re: Ayuda numero aletorio no repetirse
Publicado por: x64core en 24 Mayo 2011, 18:26 pm
HOLA!!!

Sorry, no quise molestar :P

GRACIAS POR LEER!!!

:O :O :O muy buen codigo panaa y muy simplificado gracias!! :D