![]() |
numeros aleatorios no repetitivos
Hola a todos,
Necesito ayuda para un problema que debo resolver Debo generar una tabla de 3 columnas que contenga valores aleatorios del 1 al 100, lo cual consigo fácilmente con la función randomrange, pero tengo dos dificultades que no se como vencer: 1- No se puede repetir un número en la misma fila. 2- No se puede repetir la misma combinación de números, aunque el orden sea diferente. ¿Alguien tiene alguna idea de como hacerlo? Gracias de antemano. |
He borrado la otra copia, y dejamos esta.
La próxima vez piensa antes de colocar el mensaje cual es el lugar adecuado, y si no lo tienes claro, ya lo moveremos, no te preocupes, pero es mejor que no envíes más de una copia. Un saludo. |
Por ideas...
Vamos a ver lo que podrías hacer es declarar tres variables temporales para ir guardando los valores aleatorios que se te van generando, entonces...
meterías el 1º valor en la 1º variable, cuando metieses el segundo tendrías que comprobar que no es el mismo que el de la primera y cuando metas el tercero tendrás que comprobar que es distinto con respecto a la primera variable y a la segunda. Después de esto tendrás que comparar las variables con los datos ya introducidos en la tabla. una variable que te indique si hay alguna fila con los mismos numeros, si al terminar de comprobar la fila la variable tiene un valor indicará que la fila es igual y si tiene otro es que alguno de los números es diferente. Yo lo haría con if anidados
Esto tendrías que mejorarlo ya que yo he puesto las filas y las columnas con valores fijos. es para que cojas la idea. una vez hecha las dos comprobaciones ya puedes meter los valores que tienes en las tres variables en la tabla. Espero que todo este rollo te sirva de algo. |
Antes de llamar al primer Random, llama un procedimiento llamado Randomize.
Para acegurarte que una columna, no existan numero repetidos, puedes utilizar un TStringlist temporal, en donde le especifiques que no acepte valores repetidos. Saludos. PD: Llama Randomize por cada columna que vayas a llenar. |
Cita:
Cita:
;) |
Cita:
Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random. |
gracias
Gracias a todos.
El tip acerca del tstringlist es muy útil. De hecho me hizo buscar acerca de otros controles que permitieran gestionar duplicados, y encontré el tbasearray, de la unidad mxarrays (solo viene con el Delphi Enterprise). Alguien lo ha utilizado? Por lo demás no he utilizado la función Random sino RandomRange, porque a menos que me equivoque, Random comienza en cero, y en mi caso el cero no es un valor aceptable. El randomize lo hago antes de cada fila, no antes de cada columna (y lo hago sólo para tener un grado más de seguridad de que los valores serán realmente aleatorios, aunque hay quienes dicen por la web que la función del Delphi tiende a distribuir los valores de una manera bastante similar). En fin, gracias de nuevo. Y disculpen por haber colocado el tema doble, no pienso hacerlo nuevamente. |
La franja horaria es GMT +2. Ahora son las 12:45:39. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi