Generar números sin repetidos ni consecutivos
Hola, tengo un código para generar números formados por dos dígitos, (añado cero en los menore de nueve). Funciona bien con números pequeños pero falla en números más altos.
Los números generados deben ser no consecutivos y no estar repetidos. A ver si podéis echarme una mano. Saludos
|
O sea, parece que quieres generar 48 números (sin repetir) del 1 al 99, ¿es eso?
Edito: No, no es eso, pues tienes puesto random(24) y en el bucle length 48 Explica qué quieres, porque no se entiende. |
Gracias por tu respuesta
Es que los números son alfanuméricos o dígitos, osea Strings. Y deben ocupar dos caracteres cada uno. Por tanto de 1 a 9 hay que ponerles un cero de prefijo.
Y como son 24 números o pares, ocupan 48 caracteres. Deben estar entre el 1 y el 24. De todos modos he conseguido solucionarlo usando un TStringList y su propiedad IndexOf . El objeto final es crear un conjunto de 24 números no consecuivos y sin repetir ninguno pero del 1 al 24 sólamente. Mira que me ha costado, ¿eh?. Tengo un string de 24 números al final. Ahora tengo que usarlos de dos en dos para convertirlos en Integer. Bueno, saludos y gracias. |
O sea, del 1 al 24, desordenados.
|
Así es, un Array de 1..24 desordenados
Intento hacerlo con un Array pero no lo consigo. Usando un TStringList sí que lo hago uso IndexOf para comprobar que el número X no está.
|
|
Ya lo tengo. Uso un TStringList1.IndexOf prop.
procedure TForm1.Button1Click(Sender: TObject); Cuando alguien encuentre un camino más fácil se agradecerá saberlo. El mió es más bien alambicado. Saludos |
Para hacerlo gráficamente, pon un listbox con los valores 01, 02, 03 ... 23, 24 y otro listbox vacío.
Un botón y listo:
|
No esta nada mal.
Para proceder con un Delete es mejor usar el DownTo ya que puede afectar a las posiciones de los índices. Algo que aprendí dándome de bruces con algún caso. Por lo demás muy sencillo y bien.
Gracias y saludos. |
Hola, lo he probado
Funciona correctamente, pero a veces deja Items en blanco. Por eso he añadido ésto al final.
for I := 0 to LBoxTArget.Count - 1 do if LBoxTarget.Items[i] ='' then LBoxTarget.Items.Delete(I) ; Saludos; bulc |
No hace al caso. Bórralo.
|
A mí me funciona bien, aunque no he comprobado si son continuos o no.
|
Hola bulc, que bien que ya lo hayas solucionado.
Te comparto otra posible solución. La idea es interactuar con el memo lo menos posible para que sea mas eficiente.
|
Hola. Gracias
Definitivamente me quedo con el TStringList y un Array dinámico. Le echaré un vistazo más adelante y lo probaré. Nunca había usado un List.
Saludos. bulc |
La franja horaria es GMT +2. Ahora son las 08:31:24. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi