Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2006
edusus edusus is offline
Miembro
 
Registrado: ene 2006
Posts: 47
Poder: 0
edusus Va por buen camino
num. aleatorios sin repetición

Hola Turboleta,
he copiado tu código pero lo que no encuentro la forma de hacer es ver el contenido del conjunto yautilizados. Puedes decirme como hacer? y si no te importa otra pregunta. ¿Si lo que yo quiero es obtener por ejemplo 5 números aleatorios de un conjunto del 1 al 20, cómo lo podría hacer?
Muchas gracias por tu ayuda.
Responder Con Cita
  #2  
Antiguo 24-04-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El método de Turboleta es lo que yo hubiera pensado y alguna vez hecho. Sin embargo hay que ver que la propuesta de Seoane es muy interesante al no requerir de un doble ciclo. Habrá que revisar el código que amablemente nos ofrece Delphius. Lo que no sé es si alguno de los algoritmos que pone está ya hecho para evitar repeticiones.

// Saludos
Responder Con Cita
  #3  
Antiguo 24-04-2006
Joakin Joakin is offline
Miembro
 
Registrado: abr 2006
Posts: 12
Poder: 0
Joakin Va por buen camino
sacar numeros al azar

Amigos , aunque no hice yo la pregunta me interesa mucho el tema.
Copié la propuesta de seoane pero lo que no sé es como ver el resultado.
Con algún showmessage(), o en una label . Y como llamo a que se vea .
Si alguien me lo pudiera explicar me gustaría mucho saberlo. Gracias.
Responder Con Cita
  #4  
Antiguo 24-04-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
El metodo que yo explique era para barajar una supuesta baraja de cartas representada por un array. De forma que cada posicion del array corresponde al lugar que ocuparia dentro de la baraja, es decir, Baraja[1] nos diria cual es la primera carta, Baraja[2] la segunda, etc ... Aclaro esto porque creo que aunque para este fin el metodo es bastante eficiente, para otros fines, como puede ser ir sacando uno a uno numeros al azar sin saber previamente cuantos, el metodo de Turboleta puede se mas eficaz.

Aclarado esto, para poder visualizar el resultado solo tienes que recorrer el array elemento a elemento.

Código Delphi [-]
var
  Baraja: array[1..40] of Integer;
  i,j,k: Integer;
  s: string;
begin
  // Colocamos todas las cartas por orden
  for i:= 1 to 40 do
  begin
    Baraja[i]:= i;
  end;
  // Y ahora las barajamos
  Randomize;
  for i:= 1 to 40 do
  begin
    j:= Random(40)+1;
    k:= Baraja[i];
    Baraja[i]:= Baraja[j];
    Baraja[j]:= k;
  end;
  s:= IntToStr(Baraja[1]);
  for i:= 2 to 40 do
    s:= s + ',' + IntToStr(Baraja[i]);
  ShowMessage(s);
end;
Responder Con Cita
  #5  
Antiguo 24-04-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Pues, para mi la solucion más correcta es....

La soluciòn más correcta es que se emplee el generador multiplicativo, junto con el conjunto YaUtilizados que emplea Turboleta. No se si me explico: la idea es emplear el generador, y a medida que genera... ingresarlo en el conjunto.
Cita:
Empezado por Roman
no sé es si alguno de los algoritmos que pone está ya hecho para evitar repeticiones
Pues no. El método es muy simple... no tiene en cuenta eso, pero una propiedad de este generador es que si se eligen cuidadosamente los valores de "m" y "a" se puede obtener una serie de números que no se repiten. Aunque también puede modificarse el código para que maneje el conjunto que emplea Turboleta.
el valor de "m" no solo da la condición de cuantos números deben generarse... sino que además, que impone el valor máximo que se permitirá. Si más no me equivoco para los interesados aquí... deberá tomar 20.
Yo probaría con (no estoy muy seguro):
m = 20
a = 7
semilla = 3

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 24-04-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola Carlos,

Lo que no entiendo entonces es por qué no usar el algoritmo que ya incluye Delphi en su función Random.

// Saludos
Responder Con Cita
  #7  
Antiguo 24-04-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Por cuestiones de distribución de probabilidad

Cita:
Empezado por Roman
Lo que no entiendo entonces es por qué no usar el algoritmo que ya incluye Delphi en su función Random
La función Random tiene una distribución uniforme, o en términos simples: plana. Esto quiere decir que todos los números tienen igual probabilidad de salir. Lo que la convierte en una función no muy aleatoria que digamos.
El generador multiplicativo tiene una distribución casi uniforme, pero tampoco es una distribuciòn normal (forma de compana). Pero es mejor que la función random() que viene incorporada en Delphi.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sacar programa a Internet. torito Varios 1 04-01-2006 17:47:15
Sacar generators y sus valores Delfino SQL 0 12-10-2005 12:50:45
sacar el valor qrexpr rinaib Impresión 1 07-06-2005 18:00:01
Sacar el SERVER NAME jafl1965 Varios 1 20-04-2005 19:56:54
De donde no hay no se puede sacar tcp_ip_es Humor 0 21-07-2004 09:39:22


La franja horaria es GMT +2. Ahora son las 19:57:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi