Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Evitar que random se repita (https://www.clubdelphi.com/foros/showthread.php?t=88367)

danielmj 27-05-2015 10:18:23

Evitar que random se repita
 
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:

Código Delphi [-]
//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.



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.
Cita:

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

Cita:

Empezado por danielmj (Mensaje 492546)
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.


Cita:

Empezado por danielmj (Mensaje 492546)
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 ^\||/


La franja horaria es GMT +2. Ahora son las 00:02:54.

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