GARANTIR DESCONTO

Fórum Sorteio Aleatório Feito Pelo Delphi #230606

07/05/2004

0

Bom dia Pessoal!!!!

Eu gostaria de saber se alguém possuo algum código que faça um sorteio aleatório(randomico), ou seja, eu tenho uma lista de cidades dentro de um listbox1 e gostaria que o delphi as embaralhasse e jogasse estes dados embaralhados em um segundo listbox.

Ocodigo que estou usando apenas esta jogando a primeira cidade a ser embaralhada.

[b:65c088e2de]var g: integer ;
begin
municipio:=´´;
For g:= 1 to cont do
begin
random(ListBox1.Count);
municipio:=TbConfirmacao.Fieldbyname(´Municipio´).asstring;
LIstbox2.Items.Add(Municipio);
municipio:=´´;
end;
end;[/b:65c088e2de]

No aguardo,

Wagner


Wagnermarrane

Wagnermarrane

Responder

Posts

07/05/2004

Wagnermarrane

Bom dia pessoa!!!

Alguém poderia me ajudar????

Att
Wagner


Responder

Gostei + 0

07/05/2004

Paulo_amorim

Olá

Tente fazer assim:

var Total, indice: Integer;
begin
     Randomize;
     Total := ListBox1.Items.Count;
     while Total <> 0 do
     begin
          indice := Random(Listbox1.Items.Count);
          Listbox2.Items.Add( Listbox1.Items.Strings[indice] );
          ListBox1.Items.Delete(indice);
          Dec(Total);
     end;
end;


Aqui isso funcionou
Até+


Responder

Gostei + 0

07/05/2004

Marco Salles

Eu gostaria de saber se alguém possuo algum código que faça um sorteio aleatório(randomico), ou seja, eu tenho uma lista de cidades dentro de um listbox1 e gostaria que o delphi as embaralhasse e jogasse estes dados embaralhados em um segundo listbox.

A função Random(x) retorna um número aleatório entre 0 e x - 1.
Mas não há como evitar repetições. Para isso, você deve armazenar os números/Dados...Para armazenar os Dados usarei um outro ListBox3 :idea: e o tornarei [b:c5ca7061b4]Invisivel[/b:c5ca7061b4] sua propriedade, Para que nao aparece em tempo de execução..Na verdade[b:c5ca7061b4] Nem Precisa [/b:c5ca7061b4]de outro ListBox, Mas nao me ficou claro :?: :?: se no final do [b:c5ca7061b4]sorteio[/b:c5ca7061b4] , voce vai precisar visualizar a ordem das cidades [b:c5ca7061b4]iniciais[/b:c5ca7061b4], então na dúvida , lancei mao de um terceiro ListBox
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer ;
begin
Randomize;
ListBox2.Items.Clear;
ListBox3.Items.Text:=ListBox1.Items.Text;
While ListBox3.Items.Count>=1 do
 begin
   i:=Random(ListBox3.Items.Count);
   ListBox2.Items.Add(ListBox3.Items.Strings[i]);
   ListBox3.Items.Delete(i);
 end;
end;



Responder

Gostei + 0

07/05/2004

Cebikyn

Só pra ter mais opções, aqui vai as minhas sugestões:


Pq não fazer usando um único ComboBox? Evita repetições, componentes a mais e tem um código menor...

var
  I: Integer;
begin
  Randomize;

  for I := 0 to ListBox1.Items.Count - 1 do
    ListBox1.Items.Exchange(I, Random(ListBox1.Items.Count));
end;

ou se for extremamente necessário um segundo ListBox:

var
  I: Integer;
begin
  Randomize;
  ListBox2.Items := ListBox1.Items;

  for I := 0 to ListBox2.Items.Count - 1 do
    ListBox2.Items.Exchange(I, Random(ListBox2.Items.Count));
end;



Responder

Gostei + 0

07/05/2004

Paulo_amorim

Olá

Bem lembrado Marcos. Talvez não seja interessante perder os dados ordenados.

mas, para isso, não é necessário um TListBox inteiro, muito menos um componente.

Creio que seria relevante apenas copiar esses daods para uma variável TStrings..

Mas, de qualquer maneira, o algoritmo não muda.

Até+


Responder

Gostei + 0

07/05/2004

Paulo_amorim

Só pra ter mais opções, aqui vai as minhas sugestões: Pq não fazer usando um único ComboBox? Evita repetições, componentes a mais e tem um código menor...
var
  I: Integer;
begin
  Randomize;

  for I := 0 to ListBox1.Items.Count - 1 do
    ListBox1.Items.Exchange(I, Random(ListBox1.Items.Count));
end;
ou se for extremamente necessário um segundo ListBox:
var
  I: Integer;
begin
  Randomize;
  ListBox2.Items := ListBox1.Items;

  for I := 0 to ListBox2.Items.Count - 1 do
    ListBox2.Items.Exchange(I, Random(ListBox2.Items.Count));
end;


Olá

Woah! Não conhecia esse comando Exchange! Legal [b:76ec81f2f0]C:>[/b:76ec81f2f0] !!! :D


Responder

Gostei + 0

07/05/2004

Cebikyn

Woah! Não conhecia esse comando Exchange! Legal [b:09a12f3917]C:>[/b:09a12f3917] !!! :D


Agradeça ao [b:09a12f3917]Beppe[/b:09a12f3917], ele que colocou isso em outro fórum (PBB)...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar