
Índice
Introdução
Nesse post iremos aprender como gerar números aleatórios em Delphi.
Geração de números aleatórios é uma tarefa comum em diversas áreas, como jogos, estatísticas, testes e simulações. No Delphi, isso pode ser feito com bastante facilidade utilizando a função Random
. No entanto, garantir que esses números não se repitam exige uma abordagem um pouco mais cuidadosa. Neste artigo, vamos explicar como desenvolver um programa em Delphi para gerar números aleatórios sem repetição, permitindo que o usuário defina tanto a quantidade de números quanto o intervalo dentro do qual os números devem ser gerados.
E se você gosta de fazer aquela “fézinha”, jogando na mega-sena ou em qualquer outro jogo, você poderá utilizar esse programa para gerar os seus números da sorte.
Visão Geral do Programa
Nosso objetivo é criar um programa que:
- Gere uma quantidade definida de números aleatórios.
- Garanta que esses números não se repitam.
- Permita que o usuário determine a quantidade de números e o intervalo (limite superior) para a geração dos números aleatórios.
Implementação em Delphi
No nosso programa iremos precisar de duas caixas de texto(TEdit), uma para informar a quantidade de números aleatórios a serem gerados e outra para informar o limite de números que poderão ser gerados, um botão(TButton) para acionar a ação de gerar os números aleatórios e uma caixa de texto maior(TMemo) para exibir o resultado gerado.
Abaixo, apresento o código completo, seguido de uma explicação detalhada de cada parte.
uses SysUtils, Math, Classes; procedure TForm1.GerarNumerosAleatorios(Quantidade, LimiteSuperior: Integer); var NumerosGerados: TList; NumeroAleatorio, i: Integer; texto : String; begin // Inicializa o gerador de números aleatórios com base no horário do sistema Randomize; // Cria uma lista para armazenar os números gerados NumerosGerados := TList.Create; try // Gera números aleatórios sem repetição while NumerosGerados.Count < Quantidade do begin NumeroAleatorio := Random(LimiteSuperior) + 1; // Gera número entre 1 e LimiteSuperior // Verifica se o número já foi gerado if NumerosGerados.IndexOf(Pointer(NumeroAleatorio)) = -1 then begin NumerosGerados.Add(Pointer(NumeroAleatorio)); // Adiciona o número à lista se ainda não foi gerado end; end; // Exibe os números gerados mmNumerosGerados.Clear; for i := 0 to NumerosGerados.Count - 1 do texto := texto + IntToStr(Integer(NumerosGerados[i])) + ' - '; mmNumerosGerados.Lines.Add(Copy(texto,1,length(texto)-3)); finally NumerosGerados.Free; // Libera a memória alocada pela lista end; end; procedure TForm1.btnGerarNumerosClick(Sender: TObject); var qtdeNumeros, limiteNumeros: Integer; begin if (edtQuantidadeNumeros.Text = '') or (edtLimiteNumeros.Text = '') then begin ShowMessage('Informe a quantidade de números e o limite de números!'); Exit; end; try qtdeNumeros := StrToInt(edtQuantidadeNumeros.Text); limiteNumeros := StrToInt(edtLimiteNumeros.Text); GerarNumerosAleatorios(qtdeNumeros, limiteNumeros); except on e: exception do ShowMessage('Erro ao gerar os números: '+e.Message); end; end;
Explicação do Código
1. Importação de Bibliotecas
uses SysUtils, Math, Classes;
Aqui, estamos importando algumas bibliotecas que serão usadas no programa. A biblioteca SysUtils
contém funções utilitárias, como Randomize
e Random
. A biblioteca Classes
oferece o tipo TList
, que é utilizado para armazenar os números gerados. Já Math
contém funções matemáticas avançadas, mas neste caso, não é estritamente necessária.
2. Função Randomize
e Random
Randomize;
A função Randomize
inicializa o gerador de números aleatórios baseado no horário do sistema, garantindo que cada execução do programa gere uma sequência diferente de números. Já a função Random(LimiteSuperior)
gera um número aleatório entre 0 e LimiteSuperior - 1
. Para garantir que o número gerado esteja entre 1 e LimiteSuperior
, somamos 1 ao valor gerado.
3. Verificando Números Repetidos
if NumerosGerados.IndexOf(Pointer(NumeroAleatorio)) = -1 then
A função IndexOf
verifica se o número gerado já foi armazenado na lista NumerosGerados
. Caso o número ainda não tenha sido gerado, ele é adicionado à lista. Para evitar números repetidos, o programa continua gerando novos números até que a quantidade desejada seja alcançada.
4. Armazenando os Números em uma Lista
NumerosGerados := TList.Create;
Utilizamos a classe TList
para armazenar os números gerados. O TList
é uma estrutura de dados do Delphi que permite armazenar qualquer tipo de valor, mas, neste caso, estamos utilizando para armazenar números inteiros.
5. Exibindo os Números Gerados
for i := 0 to NumerosGerados.Count - 1 do texto := texto + IntToStr(Integer(NumerosGerados[i])) + ' - '; mmNumerosGerados.Lines.Add(Copy(texto,1,length(texto)-3));
Aqui, utilizamos um laço for
para percorrer a lista de números gerados e armazená-los na variável texto. Em seguida a variável texto é inserida no Memo para que os números sejam exibidos.
Veja abaixo a ilustração do projeto:

Código fonte do exemplo
Você pode fazer o download do exemplo do projeto através do repositório do github:
https://github.com/Gisele-de-Melo/Numeros_Aleatorios
Conclusão
Este programa em Delphi para gerar números aleatórios sem repetição é uma solução eficiente e prática para diversos problemas em que a aleatoriedade é necessária. A implementação mostra como utilizar a função Random
de forma eficiente, ao mesmo tempo que lida com a necessidade de evitar repetições. Além disso, o uso da classe TList
permite armazenar e gerenciar os números gerados de forma simples e organizada.
Ao implementar esse código, você pode facilmente personalizar o intervalo e a quantidade de números gerados, tornando-o útil em diversas aplicações.
Posts Relacionados
Delphi para Android e iOS
Delphi Start
Programando em Delphi XE
Aprenda programar Delphi
Banco de Dados RAD Delphi
Delphi Programming Projects