Sorteio de Números sem Repetição em Pascal

Existem várias formas de se fazer esse procedimento, o problema é crítico quando se tem que repetir uma quantidade maior de números e o tempo pode ficar muito alto.

Dentre os algorítmos eu escolhi esse que por enquanto é o mais rápido para sortear números sem repetição:

Program sorteio_sem_repertir;
Uses Crt;
const
  numeros=60;
Var
  i,a,p : Integer;
  num : Array [0..numeros-1] of Integer;
begin
  ClrScr;
  // Garante que o sorteio seja diferente a cada execução
  Randomize;
  // Coloca os números no vetor
  For i := 0 to numeros-1 do num[i] := i + 1;
  // Sorteio
  For i := numeros-1 downto 0 do
  begin
    // Sorteia
    p := Random(i+1);
    // Faz a troca de posição dentro do vetor
    a := num[i];
    num[i] := num[p];
    num[p] := A;
  end;
  // Mostra o resultado
  For i := 0 to numeros-1 do Write(num[i]:3);

  // Ordena os número para comprova‡Æo
  // Essa parte não é necessária na versão final
  WriteLn;
  WriteLn ('Ordenando para conferir:');
  For i := 0 to numeros-1 do
     For a := i+1 to numeros-1 do
     begin
       if num[i]>num[a] then
       begin
         p := num[i];
         num[i] := num[a];
         num[a] := p;
       end;
     end;
  // Mostra os números ordenados
  For i := 0 to numeros-1 do Write(num[i]:3);
  WriteLn;
  // Pausa
  ReadLn;
end.

2 comentários:

  1. Bom dia, gostaria de saber quais são os tipos de uses(bibliotecas) que podem ser utilizadas para programar com Pascal?

    ResponderExcluir
  2. Boa Noite, Suynter,

    Muito úteis CRT, SysUtils...tudo vai depender do que você deseja fazer.

    Um dica é procurar antes de fazer a função, pois pode já existir pronta dentro da biblioteca.

    Atenciosamente

    ResponderExcluir