Jump to content


Photo

generacion de numero aleatorios


  • Please log in to reply
6 replies to this topic

#1 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 posts

Posted 18 August 2010 - 10:38 AM

hola gente...bueno la consulta esta en el titulo...
yo trabajo con delphi y sql server 2005.... *-) *-)
y bueno...encontre por ahi..uno q otro codigo para generar numero aleatorios para rellenar mis tablas...
para hacer pruebas...pero bueno...queria consultarles a ustedes...
si tienen algun codigo en especial... *-) *-)  o algun metodo *-) *-)
encontre esto :



sql
  1. SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
  2.           + (DATEPART(ss, GETDATE()) * 1000 )
  3.           + DATEPART(ms, GETDATE()) ) + 2;



y anda... *-) *-) *-)
nose si hay algun otro codigo en dond se puedan poner  rangos de intervalos, etc etc

un abrazo che! :cool:
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 18 August 2010 - 10:45 AM


nose si hay algun otro codigo en dond se puedan poner  rangos de intervalos, etc etc


checa esta info http://www.sql-serve...om-numbers.aspx

y ojalá pudieras comentar
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2092 posts
  • LocationRepública Dominicana

Posted 18 August 2010 - 10:55 AM

Saludos.

Revisa estos links:
Link1
Link2
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4107 posts
  • LocationMadrid - España

Posted 18 August 2010 - 01:00 PM

La forma mas fácil de generar números cuasi aleatorios en delphi es asi:



delphi
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3. Randomize;
  4. end;
  5.  
  6.  
  7. procedure TForm1.Button1Click(Sender: TObject);
  8. var
  9. aleatorio: integer;
  10. begin
  11. aleatorio := Random(9);
  12. Label1.Caption:= IntToStr(aleatorio);
  13. end;



Randomize inicializa el generador y Random(n) devuelve un número aleatorio entre 0 y menor que n.

Nunca llames a Randomize mas de una vez al crear una serie de números aleatorios.


Saludos.
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3486 posts
  • LocationMexico City

Posted 18 August 2010 - 02:27 PM

.....
Randomize inicializa el generador y Random(n) devuelve un número aleatorio entre 0 y menor que n.

Nunca llames a Randomize mas de una vez al crear una serie de números aleatorios.


Saludos.


:embarrassed: porqué ?

Siempre enviaría los mismos números una y otra vez ?

Saludox ! :)
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4107 posts
  • LocationMadrid - España

Posted 18 August 2010 - 03:57 PM


.....
Randomize inicializa el generador y Random(n) devuelve un número aleatorio entre 0 y menor que n.

Nunca llames a Randomize mas de una vez al crear una serie de números aleatorios.


Saludos.


:embarrassed: porqué ?

Siempre enviaría los mismos números una y otra vez ?

Saludox ! :)


Si, mas o menos, los números listados dejarán de ser aleatorios presentando una secuencia predecible, sobre todo si son pocos... Haz la prueba.

Saludos.
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 18 August 2010 - 04:35 PM

Y... bueno... ya que estamos...

Si se quiere tener "absoluto" control sobre el generador de números pseudoaleatorios se puede diseñar un generador congruencial mixto multiplicativo:



delphi
  1. Xi1 = ((A * Xi) + B) mod M;



La explicación es simple: Se toma un valor inicial, Xo que será el valor semilla, y en base a éste y las constantes A, B y M se obtiene el siguiente número (X1).
El procedimiento se repite, siendo Xi ahora el valor calculado previamente (X1) para obtener X2....

El valor M se conoce como módulo y es un número muy grande... (recomiendo emplear Int64 para tener grandes números y secuencias más "aleatorias"). Este M indicará el tope o máximo de la secuencia. El generador podrá obtener M-1 números diferentes, semejando una distribución "aleatoria".
NOTA: deben elegirse con cierto cuidado los valores de A, B y M si se quiere garantizar de que se obtenga la máxima secuencia posible. Existen unos axiomas que permiten establecer valores adecuados. Debo admitir que ya no los recuerdo  :p .... tengo oxidada la teoría de Modelos.
Una búsqueda en Google sobre generador de números pseudoaletorio mixto multiplicativo llevará a más información.

Espero que se entienda el tema.
Si se desea obtener números reales, distribuídos en el rango [0,1), basta con hacer:



delphi
  1. R = Xi1/M;



EDITO:
Aquí están los axiomas:

  1.  c es primo con M
  2. a-1 es múltiplo de p para todo primo p que divida a M
  3. a-1 es múltiplo de 4 siempre que M sea múltiplo de 4

Estas condiciones se cumplen, por ejemplo, si se escogen M=2k, a=4t+1, y c número impar, siendo t, k enteros mayores que 0.

Fuente

Para algo relativamente "casero", y que no demanda amplios controles de ingeniería ni complejos modelos de simulación basta y sobra.
Ahora si se está en duda si funcionará de manera óptima puede correrse una pruebas de aleatoriedad: Chi-Cuadrado, Kolmorov-Smirnov y Test de Series son las más utilizadas.

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.