Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Orden de Salida

Hola estoy intentando hacer una aplicación que me de un orden de salidad de unos participantes, hice algo como lo que pongo a continuación.

procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
edit1.Text := inttostr(random(StrToInt(Edit2.Text)) + 1 );
end;

en un edit meto el número de participantes y dandole con un button, en el otro edit me va dando un número aleatorio que seria el numero de salida de cada participante, el problema es que me repite los números, bueno en relaidad lo que busco es una forma de hacerlo, que al darle a un button despues de metido el numero de participantes me salga pj en un memo el número de participante en un orden aliatorio pj del 1 al 5.
2
3
1
5
4
Bueno no se si me explique correctamente pero si alguien tiene algo con que orientarme o algun link donde mirar se lo agradeceria Gracias.

saludos

Kwan.
__________________
No llores por no ver el Sol que las lagrimas te impediran ver las Estrellas.

Última edición por kwan fecha: 08-12-2003 a las 15:11:31.
Responder Con Cita
  #2  
Antiguo 08-12-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
Podrias ir rellenado una matriz, o validando en el mismo edit, que el numero no exista. La funcion random devuelve un numero aleatorio, pero por ser aleatorio no garantiza que no se repita el numero, sino solo que el numero este comprendido entre 0 y la semilla.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #3  
Antiguo 08-12-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Gracias Hector encontre algo en esta web www.q3.nu/trucomania/truco.cgi?493&esp .
de nuevo Gracias por contestar.

Saludos.
Kwan.
__________________
No llores por no ver el Sol que las lagrimas te impediran ver las Estrellas.

Última edición por kwan fecha: 09-12-2003 a las 00:46:03.
Responder Con Cita
  #4  
Antiguo 08-12-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
Bueno he probado el codigo del link que puse pero he obsevado que siempre me da el mismo orden de números, con lo que no me vale.

seguire buscando.

Chao.
Kwan.
__________________
No llores por no ver el Sol que las lagrimas te impediran ver las Estrellas.
Responder Con Cita
  #5  
Antiguo 08-12-2003
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
Cita:
kwan comentó:
Bueno he probado el codigo del link que puse pero he obsevado que siempre me da el mismo orden de números
Ha de ser porque falta usar Randomize. De cualquier forma aquí te pongo una función que te regresa un arreglo de números ordenados aleatoriamente:

Código:
type
  TNumeros = array of Integer;

function Aleatorio(Cantidad: Integer): TNumeros;
var
  Bits: TBits; 
  Numero: Integer;
  Indice: Integer;

begin
  Bits := TBits.Create;
  Bits.Size := Cantidad;

  SetLength(Result, Cantidad);

  Randomize;
  Indice := 0;
  repeat
    Numero := Random(Cantidad);
    if not Bits[Numero] then
    begin
      Bits[Numero] := true;
      Result[Indice] := Numero + 1;
      Inc(Indice);
    end;
  until Indice = Cantidad;
end;
TBits es un arreglo de booleans que nos permite saber qué números ya han sido seleccionados. El arreglo te da´los números de 1 a Cantidad.

// Saludos
Responder Con Cita
  #6  
Antiguo 08-12-2003
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 22
__hector Va por buen camino
Vamos, que es una funcion sencilla de implementar. Supongamos tu segundo caso, el de que metes los numeros en un memo, nos construimos una funcion, digamos yaestaenMemo, que nos dira si el numero existe o no, asi que solo tendriamos que hacer:

Código:
var
  CantidadNumeros : integer; 
...

Randomize;
   if not yaestaenMemo(random(StrToInt(Edit2.Text)) + 1) then
     Memo1.Lines.Add(edit2.text);
end;
y la funcion

Código:
 
function yaestaenMemo (valor : integer): boolean;
var
  m : integer;
  resultado : boolean;
begin
   resultado := False;
   with form1 do
     for m := 0 to memo1.Lines.Count - 1 do
      if (strtoint(memo1.Lines[m]) = valor) then
         resultado := true;

  result := resultado;
end;
Asi, a groso modo.
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #7  
Antiguo 09-12-2003
kwan kwan is offline
Miembro
 
Registrado: jul 2003
Ubicación: Ceuta(España)
Posts: 68
Poder: 21
kwan Va por buen camino
De nuevo Gracias por vuestras respuestas, pero lo que en verdad estaba buscando era lo que encontre en el link que puse la unica pega era la que se repetia siempre lo mismo, pero con vuestra respuesta he abierto los ojo y le puse el randomize en esta parte del codigo.
procedure TForm1.Button1Click(Sender: TObject);
var
Ristra : TAlea;
n : integer;
begin
RichEdit1.Lines.Clear;

Ristra:=TAlea.Create(10);
randomize;
for n:=1 to 10 do begin
RichEdit1.Lines.Add( IntToStr(Ristra.PillaNumero) );

con lo que ya no se repite siempre la misma combinación, y cambie el memo por un RichEdit, bueno por los font.

Una ultima pregunta, como podria hacer que el "create(10)" y "1 to 10" lo pudiera controlar desde un edit, para poner el numero de participantes desde el edit???



Gracias por todo.

Saludos
Kwan.
__________________
No llores por no ver el Sol que las lagrimas te impediran ver las Estrellas.

Última edición por kwan fecha: 09-12-2003 a las 00:37:17.
Responder Con Cita
  #8  
Antiguo 09-12-2003
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
Cita:
kwan comentó:
De nuevo Gracias por vuestras respuestas, pero lo que en verdad estaba buscando era lo que encontre en el link que puse
No veo ninguna diferencia sustancial entre el código del "truco" del enlace y las soluciones que te propusimos hector y yo excepto porque el del "truco" es innecesariamente complicado.

Cita:
kwan comentó:
Una ultima pregunta, como podria hacer que el "create(10)" y "1 to 10" lo pudiera controlar desde un edit, para poner el numero de participantes desde el edit???
Las tres soluciones que has visto manejan un número variable de números de manera que únicamente tienes que convertir el texto del Edit a un número. Busca en la ayuda acerca de la función StrToInt.

// Saludos
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 16:28:48.


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
Copyright 1996-2007 Club Delphi