Visual Basic - Rnd resultados distintos

Life is soft - evento anual de software empresarial
 
Vista:

Rnd resultados distintos

Publicado por juansan (5 intervenciones) el 15/07/2003 20:20:35
Hola a todos: quiero generar 12 numeros aleatorios que pueden ir entre 1 y 20 pero a la vez quiero que no se repitan entre si.

Pense algo asi pero no funciona o si, pero a veces repite los numeros y lo fundamental es que no se repitan.

Private Sub cmd_dar_Click()
Dim myvalue As Integer
Dim i As Integer
For i = 0 To 11
'Randomize
myvalue = Int((20 * Rnd) + 1)
car(i).Caption = myvalue
Next
End Sub
Lei algo como que hay que ir guardando los valores y compararlos pero ni idea de como hacerlo.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Rnd resultados distintos

Publicado por Pedro Ardizón (6 intervenciones) el 15/07/2003 21:33:58
Private Sub cmd_dar_Click()

Dim myvalue As byte
Dim i,x As byte
dim vec() as integer
dim encontro as boolean

Ramdomize
encontro = false
i = 0

while i <= 12
myvalue = Int((20 * Rnd) + 1)

for x = 0 to ubound(vec)
if myvalue = vec(x) then
encontro = true
end if
next x

if not encontro then
car(i).Caption = myvalue
vec(i) = myvalue
i = i + 1
end if

wend

End Sub


Probalo !!!
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rnd resultados distintos

Publicado por juansan (5 intervenciones) el 15/07/2003 21:53:06
gracias pero cuando llega al
For x = 0 To UBound(vec)
me da el error... subindice fuera del intervalo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Rnd resultados distintos

Publicado por Pedro Ardizón (6 intervenciones) el 15/07/2003 22:06:57
Private Sub cmd_dar_Click()

Dim myvalue As byte
Dim i,x As byte
dim vec(0 to 11) as integer
dim encontro as boolean

Ramdomize
encontro = false
i = 0

while i <= 12
myvalue = Int((20 * Rnd) + 1)

for x = 0 to ubound(vec)
if myvalue = vec(x) then
encontro = true
end if
next x

if not encontro then
car(i).Caption = myvalue
vec(i) = myvalue
i = i + 1
end if

wend

End Sub

Probalo !!!
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

prueba esto

Publicado por jose carlos (243 intervenciones) el 15/07/2003 21:44:49
Private Sub cmd_dar_Click()
'crea la variable para guardar
dim guarda(12) as integer
Dim myvalue As Integer
Dim i As Integer
For i = 0 To 11
'Randomize
'etiqueta para volver a coger dato
repite:
myvalue = Int((20 * Rnd) + 1))
'guarda el valor elegido
guarda(i)=myvalue
'chivato para saber si hay repetido
h=0
'bucle para comparar
for x=0 to 11
'si x<>i haz lo que sigue
if x<>i then
' si lo encuentra cambia el chivato
if guarda(x)=guarda(i) then h=1
endif
next
'si el chivato ha cambiado salta a repite
if h=1 then goto repite
car(i).Caption = myvalue
Next
End Sub

saludos y espero haberte ayudado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar