Fórum Sorteio Aleatório Feito Pelo Delphi #230606
07/05/2004
0
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
Curtir tópico
+ 0Posts
07/05/2004
Wagnermarrane
Alguém poderia me ajudar????
Att
Wagner
Gostei + 0
07/05/2004
Paulo_amorim
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é+
Gostei + 0
07/05/2004
Marco Salles
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;
Gostei + 0
07/05/2004
Cebikyn
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;
Gostei + 0
07/05/2004
Paulo_amorim
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é+
Gostei + 0
07/05/2004
Paulo_amorim
var I: Integer; begin Randomize; for I := 0 to ListBox1.Items.Count - 1 do ListBox1.Items.Exchange(I, Random(ListBox1.Items.Count)); end;
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
Gostei + 0
07/05/2004
Cebikyn
Agradeça ao [b:09a12f3917]Beppe[/b:09a12f3917], ele que colocou isso em outro fórum (PBB)...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)