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!
No te daremos el codigo, al menos ya lo pensaste como hacer? :P
jeje sii
tengo para generar numero entre 1 a 10:
randomize
T = Int((10 * Rnd) + 1)
luego noc como hacer para verificar si ese numero ya lo e mostrado :-\
talvez asignarlo a una variable y verificar con un if noce :-\
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!!!
Mejor pseudocodigo que el de 79137913 no vas a encontrar, asique esperamos tu codigo :P
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
Dim n As Integer
Dim a(9) As Integer
Dim m As Integer
Dim z As Integer
For z = 1 To 10 ' generar 10 numero aleatoreos
Randomize
n = Int((10 * Rnd) + 1) ' genero el numero aleatoreo = n
For m = 0 To 9
If a(m) <> n Then a(z - 1) = n
Next
Next
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
Cita de: XXX-ZERO-XXX 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
: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 :-\
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
Mira, leelo y entendelo, no te lo tendria que dejar pero bueno:
Option Explicit
Public Sub Form_Load()
Dim n As Integer
Dim a(9) As Integer
Dim m As Integer
Dim i As Integer
For i = 0 To 9
Do
Randomize
m = Int((Rnd * 10) + 1)
Loop While (Existe(m, a()))
a(i) = m
Next i
For i = 0 To 9
MsgBox a(i)
Next
End Sub
Function Existe(m As Integer, a() As Integer) As Boolean
Dim num
For Each num In a()
If (m = num) Then Existe = True
Next
End Function
Cita de: _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
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! ;-)
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 ;)
.
Me se ocurre aplicar el dicho Divide y Vencerás xP.
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
Function Existe(m As Integer, a() As Integer) As Boolean
Dim num
For Each num In a()
If (m = num) Then Existe = True: exit for ' // no tiene caso seguir en el for Each si ya se encontro.
Next
End Function
P.D.: No hice el codigo por que me tengo que ir a bañar xP ya lo hago.
Temibles Lunas!¡.
.
Cita de: Raul100 en 23 Mayo 2011, 02:33 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 ;)
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:
Dim A(9) As Long
Dim X As Long
Dim Y As Long
Randomize
For X = 0 To 9
A(X) = Int(Rnd() * 10) + 1
For Y = 0 To 9
If A(X) = A(Y) And Y <> X Then X = X - 1: Exit For
Next
Next
GRACIAS POR LEER!!!
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.
HOLA!!!
Cita de: XXX-ZERO-XXX 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.
Sorry, no quise molestar :P
GRACIAS POR LEER!!!
.
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!¡.
Cita de: 79137913 en 23 Mayo 2011, 21:15 PM
HOLA!!!
Sorry, no quise molestar :P
GRACIAS POR LEER!!!
:O :O :O muy buen codigo panaa y muy simplificado gracias!! :D