PDA

Ver la Versión Completa : Evitar que random se repita


danielmj
27-05-2015, 10:18:23
Hola, esta consulta bien podría ir en el apartado general de delphi, pero bueno en este caso se trata de android. Sé que el problema puede ser una tonteria, pero a mi no me sale...

La cosa es que quiero que se genere un número aleatorio del 1 al 8 ambos inclusive para cada una de las etiquetas (label), yo tengo esto:

//randomize;
label4.Text:= IntToStr(random(8)+1);
label5.Text:= IntToStr(random(8)+1);
label6.Text:= IntToStr(random(8)+1);
label7.Text:= IntToStr(random(8)+1);
label8.Text:= IntToStr(random(8)+1);
label9.Text:= IntToStr(random(8)+1);
label10.Text:= IntToStr(random(8)+1);
label11.Text:= IntToStr(random(8)+1);

He probado también permitiendo el "randomize" del inicio y nada, el resultado es este o similar al de la captura.

http://i60.tinypic.com/2ueqxwj.png

Como veis hay números que se repiten entonces, ¿de que forma puedo hacer que no se repitan si tener que hacer uso de un casi interminable "if"?
Gracias de antemano.

Héctor Randolph
27-05-2015, 10:45:53
Hola danielmj

Te daré una idea general de cómo puedes resolverlo.

Primero llena un vector con 8 posiciones o las que necesites

(1, 2, 3, 4, 5, 6, 7, 8 )

Después en un ciclo con N repeticiones haces lo siguiente:

genera dos números aleatorios (X1,X2) entre 1 y 8

Por ejemplo: X1 = 2 , X2 = 7

Ahora intercambia los valores contenidos en la posición X1 y X2 del vector

Después de intercambiar te quedaría el vector así:

(1, 7, 3, 4, 5, 6, 2, 8 )

Si repites esto N veces al final tendrás un vector desordenado aleatoriamente

( 6, 2, 4, 7, 3, 1, 8, 5)

Elige un valor adecuado para N no muy grande.

Este vector se lo asignas a tus etiquetas.

Saludos

danielmj
27-05-2015, 11:12:20
Hola héctor, gracias por responder tan rápido, al final encontré esta otra solución aquí en el foro (http://www.clubdelphi.com/foros/showthread.php?t=30894) haciendo uso de arrays y parace que va bien. Saludos.

Casimiro Notevi
27-05-2015, 12:00:54
Es lo mismo, un vector es un array.
En programación, una matriz o vector (llamado en inglés array) es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz.

danielmj
27-05-2015, 12:19:49
hola casimiro, gracias por la informacion jeje conocí la palabra array cuando me dieron las primeras clases de turbo pascal, lo unico que yo no les llamo vectores sino arrays, no sé será la costumbre.

Un saludo.

P.D.: Ya aprovecho para comentaros la finalidad de esos numeros aleatorios, simplemente es por que como ya dije en otro post, estoy currando de vigilante y tanto en mi empresa como en la empresa contratante del servicio, me piden que no haga siempre el mismo recorrido, entonces decidí hacerme esta pequeña aplicacion para hacerme mas facil el trabajo, digamos que esos números aleatorios "dibujan" (de menor a mayor) un patrón y solo tengo que seguirlo para hacer las rondas, así nunca será el mismo recorrido. Espero haberme explicado correctamente.

Casimiro Notevi
27-05-2015, 12:40:00
hola casimiro, gracias por la informacion jeje conocí la palabra array cuando me dieron las primeras clases de turbo pascal, lo unico que yo no les llamo vectores sino arrays, no sé será la costumbre.
Es fácil encontrar cosas que se denominan con distintos nombres y a veces nos confundimos por eso.


P.D.: Ya aprovecho para comentaros la finalidad de esos numeros aleatorios, simplemente es por que como ya dije en otro post, estoy currando de vigilante y tanto en mi empresa como en la empresa contratante del servicio, me piden que no haga siempre el mismo recorrido, entonces decidí hacerme esta pequeña aplicacion para hacerme mas facil el trabajo, digamos que esos números aleatorios "dibujan" (de menor a mayor) un patrón y solo tengo que seguirlo para hacer las rondas, así nunca será el mismo recorrido. Espero haberme explicado correctamente.
Eso está bien, aprovechar la tecnología para mejorar tu trabajo. Además te entretienes y aprendes ^\||/