FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Generador de números aleatorios
Hola
Hace unas tres semans vi unos mensajes sobre generar en números aleatorios. No los encuentro y me interesa el tema para una aplicación. Como puedo generar en un form vcl, números aleatorios que no se repitan? Si alguien se acuerda de donde puedo encontrar esos mensajes porfavor que me lo diga. Y si alguien sabe como poner un generador de números aleatorios sin repeticiones en un form vcl? Gracias. |
#2
|
||||
|
||||
con la función Random generas numeros aleatorios.
Pero no implica que no se repitan, son aleatorios!
__________________
[Crandel] |
#3
|
||||
|
||||
Cita:
// Saludos |
#4
|
||||
|
||||
Cita:
La función randon, es una función es que genera un números de acuerdo a un determinado algoritmo, que se basa en una distribución normal dentro dentro del intervalo que uno le especifique. La función Randomize, lo que hace es inicializar la "semilla" generadora para que la función no comience generando siempre desde el mismo valor. Pero siguen siendo números de la misma secuencia, comenzando con valor diferente. // Saludos
__________________
[Crandel] |
#5
|
||||
|
||||
Cita:
Lo que pasa es que no son para nada aleatorios // Saludos |
#6
|
|||
|
|||
Podrías ir guardando los numeros emitidos en algún array generarlos en un bucle tipo While que solo salgan los que no se repitan... El tema es que estos que tu querés hacer son MENOS aleatorios todavía que los generados con el Random pelado. Corrijo a mi amigo crandel: No siempre tienen distribución normal, por lo menos en mi delphi 7 (si mal no recuerdo) hay funciones con algoritmos estadísticos para números aleatorios (o no tan aleatorios) con distribuciones de probabilidad tipo Poisson, "t", rectangulares y otras que a nosotros los pseudo científicos nos sirven de mucho.
|
#7
|
|||
|
|||
Se puede cambiar la semilla?
Y no se puede cambiar la semilla para que sea por ejemplo los minutos o segundos .... de cuando se ejecute la aplicación?
Gracias. |
#8
|
|||
|
|||
Eso es precisamente lo que hace el procedimiento Randomize
De la ayuda de delphi: Cita:
|
#9
|
||||
|
||||
Cita:
Gracias
__________________
[Crandel] |
#10
|
||||
|
||||
Una sugerencia
personalmente para lograr nros "mas aletorios" realizo lo siguiente:
Siendo Dimensión algún valor demasiado grande. Espero que pueda serte útil. Personalmente, esto de cambiar la distribución no se si se pueda... y me enteresa ya que tengo un simulador de tragamonedas que necesita ser más "real" Última edición por Delphius fecha: 07-06-2005 a las 06:40:19. Razón: Correción en uso de etiquetas |
#11
|
||||
|
||||
Hola Delphius, tu función si modifica la distribución, si no me euquivoco de primera vista parece obtener una distribución exponencial decreciente, lo cual te puede general una gran predominancia de los numeros inferiores.
Esto es facilmente comprobable, simplemente podrias graficar un histograma con 1000 números generados. Creo que nos fuimos totalmente de la pregunta de gontxalo , pero se puso mas interesante Despues de escribir el mensaje anterior me acorde que hice un programa para la facultad donde genrabamos valores aleatorios con diferentes distribuciones. Voy a ver si lo encuentro (fue hace bastante) y lo escribo por aca.
__________________
[Crandel] |
#12
|
||||
|
||||
Aca encontre la forma en que generaba los número con diferentes distribuciones:
Uniforme Normal
Exponencial
donde dstandard es la distribución estandar y vmedio es el valor medio requerido. Lo puede tomar al que le sirva.
__________________
[Crandel] |
#13
|
|||
|
|||
Perdón, capaz que estoy equivocado, pero yendo a términos estadísticos una distribución normal de probabilidad referiría a numeros cuya probabilidad de salir aumenta al acercarse al valor medio en forma de campana (para describirlo en palabras simples). Esta sería la famosa campana de Gauss por lo que esta distribución se llama gaussiana. Si se graficaran los numeros aleatorios producidos de esta forma se vería que están más acumulados en el centro y hay unos pocos en los bordes del intervalo. Esto no se obtiene con la función "RandG" de la math unit de delphi. Esta función lleva como parámetros dicho valor medio y la "varianza" que va a dar en cierta forma lo "puntiagudo" de la distribución.
Con la función random no se obtiene esto, sinó números que están ordenados según una distribución de probabilidad "rectangular" (o plana) es decir que cualquier numero en el intervalo tiene la misma probabilidad de salir. Si se grafican éstos van a estar "uniformemente" esparcidos en el intervalo cuando la cantidad es muy grande. |
#14
|
|||
|
|||
Perdón... donde dije "esto no se obtiene con la función RandG..."
quise decir "esto SE obtiene con la función RandG.. |
#15
|
|||
|
|||
conseguido
Hola
gracias Ya me funciona, hasta ahora al ejecutar siempre se repetían las series, pero no sabía cambiar la semilla. Ya se ejecuta y no se repiten, ni empiezan con la misma serie. Gracias |
#16
|
|||
|
|||
Randomize
Hola
Tengo ya un form que genera números aleatorios. Randomize. Según Maeyanes: De la ayuda de delphi: Citar: Description Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed. Randomiza la semilla del reloj. Alguien sabe si la semilla que randomiza es respecto a segundos, centésimas, milésimas.... |
#17
|
|||
|
|||
Según el código fuente del procedimiento Randomize, este primero trata de obtener el valor del contador de funcionamiento de alta resolución (high-resolution performance counter) con la función QueryPerformanceCounter del API y si falla, usa la función GetTickCount (también del API) la cual obtiene el número de milisegundos que han pasado desde que el sistema se encendió.
Ya con eso te darás una idea de como inicializa la semilla este procedimiento. Saludos... |
|
|
|