|
Página 1 de 2
|
No Repetir Un Numero Aleatorio Con Rnd
Autor |
Mensaje |
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
No Repetir Un Numero Aleatorio Con Rnd
Hola a todos.
Como puedo generar números aleatorios sin que se repitan?
por ejemplo:
si el programa pasa por esa linea 13 veces, que no se repita el numero generado con Rnd.
|
#1 Domingo, 16 Enero 2011, 18:18 |
|
|
Dani26
Analista Programador
Registrado: Junio 2010
Mensajes: 365
Edad: 58 Ubicación: Montevideo
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Mira , yo uso este código para evitar repetir letras.
Código: [Descargar] [Mostrar]
' gambas class file
PUBLIC SUB Button1_Click()
' ---------------buscar si la letra ya fue usada, si no es asì, instr devuelve un cero
IF InStr((TextBox2.text), (TextBox1.text)) > 0 THEN
Message.Info("elige otra letra")
ELSE
'-----------------------agregar la letra en el textbox de las usadas
TextBox2.text = TextBox2.text & TextBox1.text
ENDIF
END
Creo que con un poco de ingenio lo puedes adaptar a tus nececidades, creando una segunda variable prealeatoria que verifique que el número no haya salido y lo asigne a la variable aleatorio, si esta repetido que vuelve a ejecutar el Rnd.
Debes ir guardando los números ya salidos en un textbox, por ejemplo.
Espero te sirva.
Saludos
=================== Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
|
#2 Domingo, 16 Enero 2011, 20:52 |
|
|
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Hola.
Gracias. me diste una idea y se me ocurrió esto:
REPEAT
aleatorio = Int(Rnd(1, 13))
UNTIL aleatorio <> repetido 'repetido es la variable donde guardo el ultimo numero dado por rnd
Pero no funciona algunos números se repiten.
ese código esta dentro de un for next que se ejecuta 12 veces y va rellenando unos picturebox
con las imágenes de un puzle.
El puzle se compone de 12 picturebox creados por código, y las imágenes están numeradas del 1 al 12.(1.jpg 2.jpg asta 12)
deben estar desordenadas para que el usuario las ordene.
pongo todo el código:
este código genera los picturebox en horizontal con las imágenes desordenas para que el usuario las arrastre a otros picturebox y
las valla ordenando.
última edición por pittusa el Domingo, 16 Enero 2011, 22:47; editado 2 veces
|
#3 Domingo, 16 Enero 2011, 22:41 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Hola
Los números aleatorios se obtienen mediante un proceso que realiza una serie de operaciones. Si repites el mismo proceso con los mismos valores de inicio obtendrás naturalmente los mismos valores. Lo que hay que hacer es cambiar la semilla de inicio de ese proceso para que cada vez los valores sean distintos
Esto devuelve diez números aleatorios entre 0 y 7. Siempre los mismos porque siempre parte de la misma semilla para alimentar al proceso que devuelve el número.
Para cambiarlo se utiliza la orden randomize(semilla) aunque si no se especifica la semilla entonces utiliza el tiempo como semilla así que basta con ponerlo
Ahora bien, si lo que quiero es impedir que salga un número que ya salió antes entonces debo guardar los números que salen en un string[]
Este bucle devuelve los números del 0 al 9 sin repeticiones
última edición por soplo el Domingo, 16 Enero 2011, 23:16; editado 1 vez
|
#4 Domingo, 16 Enero 2011, 23:16 |
|
|
Dani26
Analista Programador
Registrado: Junio 2010
Mensajes: 365
Edad: 58 Ubicación: Montevideo
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Lo que pasa que solo estás guardando el último número salido, debes guardarlos todos para que no repita ninguno.
Prueba crear dos texbox, invisibles,txtaleatorio y txtrepetido.
aleatorio = Int(Rnd(1, 13))
txtaleatorio.text= aleatorio
UNTIL InStr((txtaleatorio.text), (txtrepetido.text)) > 0
imagen.picture = Picture[Application.Path & "/" & aleatorio & ".JPG"]
'-----------------------agregar el número en el textbox de los usados
txtrepetido.text = txtrepetido.text & txtaleatorio.text
Si no me equivoco debería funcionar.
Saludos
=================== Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
|
#5 Domingo, 16 Enero 2011, 23:48 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: No Repetir Un Numero Aleatorio Con Rnd
¿Yo estoy guardando solo uno?
¡Mira bien!
|
#6 Lunes, 17 Enero 2011, 00:16 |
|
|
Dani26
Analista Programador
Registrado: Junio 2010
Mensajes: 365
Edad: 58 Ubicación: Montevideo
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Soplo, la respuesta era para pittusa, se ve que mientras yo escribía tú publicabas a su vez tu respuesta. Además soy consciente que sabés mucho más que yo y miraría muy bien antes de contradecirte.
Saludos
=================== Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
|
#7 Lunes, 17 Enero 2011, 03:23 |
|
|
ivanovichenco
Ingeniero Programador
Registrado: Septiembre 2010
Mensajes: 274
Edad: 66 Ubicación: Neiva, Huila, Rep. de Colombia
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Soplo, se repiten usando el código tuyo, aunque deberia funcionar. Donde esta el error?
3
0
4
2
2
5
5
4
7
0
uso gambas 2.22 ubuntu 10.04
Lo de PRNT X fue que swe me quedo de una prueba que estuve haciendo para imprimirlos en forma de tabla y luego se me olvido arreglrlo
última edición por ivanovichenco el Martes, 18 Enero 2011, 02:43; editado 6 veces
|
#8 Lunes, 17 Enero 2011, 03:39 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: No Repetir Un Numero Aleatorio Con Rnd
cambia el "if numeros.find(y) then" por "if numeros.find(y)=-1 then"
Es por eso
Bueno y que el número calculado es y no x así que hay que hacer print y y no print x
Contradice cuanto quieras hombre, que es muuuuy complicado enfadarme por cosas así y además yo no estoy libre de errores. Mira que cagada mas tonta acabo de hacer je je je Yo sé mas porque empecé antes no por otra cosa osea que si hay que llevarme la contraria pues se me lleva y ya está
última edición por soplo el Lunes, 17 Enero 2011, 15:56; editado 2 veces
|
#9 Lunes, 17 Enero 2011, 05:06 |
|
|
pittusa
Técnico Programador
Registrado: Marzo 2010
Mensajes: 157
Edad: 53 Ubicación: Barcelona
|
Re: No Repetir Un Numero Aleatorio Con Rnd
Hola amigos.
Estoy flipando con las respuestas. De verdad que sois la hostia! a parte de muy buenos.
Haber si ahora os vais a pelear por mi culpa! jaja bromas a parte.
La verdad que que estoy un poco liado de como integrar vuestros códigos al mio, pero la base la entiendo.
Bueno... de momento he echo esto: Una función que devuelve el numero aleatorio
y luego:
pero me repite numeros!
que hago mal? lo estoy haciendo bien al hacer una función?
como lo integro.
gracias por todo.
última edición por pittusa el Lunes, 17 Enero 2011, 19:44; editado 2 veces
|
#10 Lunes, 17 Enero 2011, 19:42 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|