Fórum Sorteio de Numeros Aleatorios #212343

07/02/2004

0

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.


Clenio

Clenio

Responder

Posts

07/02/2004

Beppe

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;



Responder

Gostei + 0

08/02/2004

Clenio

Valeu, Beppe, muito obrigado deu certinho do jeito que eu queria, abraços.


Responder

Gostei + 0

08/02/2004

Kroki

Eu so nao entendi o 1 ao 15...


Responder

Gostei + 0

08/02/2004

Drakkar

Eu so nao entendi o 1 ao 15...


São 15 números... por isso..


Responder

Gostei + 0

08/02/2004

Kroki

DEtalhe,colei o codigo e coloquei em um evento de clik de botao e o programa trava.
Oque eu errei?


Responder

Gostei + 0

08/02/2004

Beppe

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?


Responder

Gostei + 0

08/02/2004

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:77c51d6063]until (Numero in Sorteados); Por until not (Numero in Sorteados);[/color:77c51d6063]


Responder

Gostei + 0

08/02/2004

Beppe

[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!


Responder

Gostei + 0

09/02/2004

Clenio

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.


Responder

Gostei + 0

09/02/2004

Beppe

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;



Responder

Gostei + 0

09/02/2004

Kroki

Se nao estou enganado,é preciso declarar antes da geracao dos numeros
o comando ´Randomize´ou os numeros gerados sempre serao os mesmos.


Responder

Gostei + 0

09/02/2004

Beppe

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.


Responder

Gostei + 0

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

Aceitar