Sorteio Aleatório Feito Pelo Delphi
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
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
Curtidas 0
Respostas
Wagnermarrane
07/05/2004
Bom dia pessoa!!!
Alguém poderia me ajudar????
Att
Wagner
Alguém poderia me ajudar????
Att
Wagner
GOSTEI 0
Paulo_amorim
07/05/2004
Olá
Tente fazer assim:
Aqui isso funcionou
Até+
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
Marco Salles
07/05/2004
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
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
Cebikyn
07/05/2004
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...
ou se for extremamente necessário um segundo ListBox:
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
Paulo_amorim
07/05/2004
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é+
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
Paulo_amorim
07/05/2004
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...
ou se for extremamente necessário um segundo ListBox:
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
Cebikyn
07/05/2004
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)...
GOSTEI 0