Sorteio de Numeros Aleatorios
Ola turma,
Qual código devo usar ao clicar um botão, mostrar em um (Memo) ou em (edites) num universo de 25 numeros ser sorteados 15 aleatoriamente, sem repetição.
desde ja obrigado.
Qual código devo usar ao clicar um botão, mostrar em um (Memo) ou em (edites) num universo de 25 numeros ser sorteados 15 aleatoriamente, sem repetição.
desde ja obrigado.
Clenio
Curtidas 0
Respostas
Beppe
07/02/2004
Números de 1 a 25:
var Sorteados: set of 1..25; I, Numero: Integer; begin Sorteados := []; // conjunto vazio for I := 1 to 15 do begin repeat // repete até que encontre um não Numero := Random(25) + 1; // no conjunto dos sorteados until not (Numero in Sorteados); Include(Sorteados, Numero); // adiciona ao grupo Memo1.Lines.Add(IntToStr(Numero)); end; end;
GOSTEI 0
Clenio
07/02/2004
Valeu, Beppe, muito obrigado deu certinho do jeito que eu queria, abraços.
GOSTEI 0
Kroki
07/02/2004
Eu so nao entendi o 1 ao 15...
GOSTEI 0
Drakkar
07/02/2004
Eu so nao entendi o 1 ao 15...
São 15 números... por isso..
GOSTEI 0
Kroki
07/02/2004
DEtalhe,colei o codigo e coloquei em um evento de clik de botao e o programa trava.
Oque eu errei?
Oque eu errei?
GOSTEI 0
Beppe
07/02/2004
DEtalhe,colei o codigo e coloquei em um evento de clik de botao e o programa trava.
Oque eu errei?
Vcoê tá tentando gerar mais de 25 números?
GOSTEI 0
Marco Salles
07/02/2004
Beppe , Dentro Da Sua Lógica e Para Que o Programa Não Trave Devido a Um lOOP ´Infinito´, Ploblema Detectado Pelo Amigo kroki , Não Estaria Faltando o Operador ´Not´ Aplicado Junto a Istrução Until.... Assim, Sugiro Um Modificação , Trocar
[color=red:77c51d6063]until (Numero in Sorteados); Por until not (Numero in Sorteados);[/color:77c51d6063]
[color=red:77c51d6063]until (Numero in Sorteados); Por until not (Numero in Sorteados);[/color:77c51d6063]
GOSTEI 0
Beppe
07/02/2004
[quote:3716140681=´Marco Salles´]Beppe , Dentro Da Sua Lógica e Para Que o Programa Não Trave Devido a Um lOOP ´Infinito´, Ploblema Detectado Pelo Amigo kroki , Não Estaria Faltando o Operador ´Not´ Aplicado Junto a Istrução Until.... Assim, Sugiro Um Modificação , Trocar
[color=red:3716140681]until (Numero in Sorteados); Por until not (Numero in Sorteados);[/color:3716140681][/quote:3716140681]
Putz, falha nossa! :oops: Nada escapa aos seus olhos atentos, hein?
A explicação que coloquei do lado dizia uma coisa, mas o código ´dizia´ outra... Valeu!
[color=red:3716140681]until (Numero in Sorteados); Por until not (Numero in Sorteados);[/color:3716140681][/quote:3716140681]
Putz, falha nossa! :oops: Nada escapa aos seus olhos atentos, hein?
A explicação que coloquei do lado dizia uma coisa, mas o código ´dizia´ outra... Valeu!
GOSTEI 0
Clenio
07/02/2004
O programinha ta funcionando beleza, querendo melhorar um pouquinho, eu gostaria de fazer com que o Memo mostre os numeros em ordem crescente, o que eu devo acrescentar no codigo para fazer isso?
Desde ja obrigado.
Desde ja obrigado.
GOSTEI 0
Beppe
07/02/2004
Os números são retornados de forma totalmente aleatória, sem ordem especifica. A solução genérica seria armazenar os números em um array, e pô-los com um algoritmo de ordenação. Mas neste é caso é bem simples, como os números sorteados estão em um set.
var Sorteados: set of 1..25; I, Numero: Integer; begin Sorteados := []; // conjunto vazio for I := 1 to 15 do begin repeat // repete até que encontre um não Numero := Random(25) + 1; // no conjunto dos sorteados until not (Numero in Sorteados); Include(Sorteados, Numero); // adiciona ao grupo end; for I := 1 to 25 do if Numero in Sorteados then Memo1.Lines.Add(IntToStr(I)); end;
GOSTEI 0
Kroki
07/02/2004
Se nao estou enganado,é preciso declarar antes da geracao dos numeros
o comando ´Randomize´ou os numeros gerados sempre serao os mesmos.
o comando ´Randomize´ou os numeros gerados sempre serao os mesmos.
GOSTEI 0
Beppe
07/02/2004
Se nao estou enganado,é preciso declarar antes da geracao dos numeros
o comando ´Randomize´ou os numeros gerados sempre serao os mesmos.
Sim, para que a cada execução do programa a sequência não seja a mesma.
Chamá-lo uma vez é suficiente, no OnCreate.
GOSTEI 0