Lista de números aleatórios não-repetidos de um intervalo em Perl

Publicado por Perfil removido (última atualização em 16/04/2012)

[ Hits: 5.570 ]

Download alea001.pl




Este script gera uma lista unidimensional tamanho N, preenchendo esta completamente com números aleatórios no intervalo de 1 até N sem repetições.

Gera-se um número aleatório, este é verificado se foi inserido anteriormente. Se caso não, ele o insere e repete o procedimento, senão ele gera outro valor e procura novamente se repetiu. Até que a lista esteja por completo cheia com um valor de cada.

Repetições podem ser visualmente identificadas através de:
$ ./alea001,pl | sort -n --key=2

Escolheu-se o valor 52 para teste por ser este o número de cartas de um baralho-padrão.
A verificação de repetições tornar-se á exaustiva caso não seja automatizada.

Por enquanto não constam falhas, sendo que na versão em C já constei por algo. Logo podem haver.

  



Esconder código-fonte

#!/usr/bin/perl

use strict;
use warnings;

# Para testar se não há números repetidos, usar por exemplo:
# ./alea001.pl | sort -n --key=2

BEGIN { srand() if $] < 5.004 }

my $VALOR = 52;

my ($i, $j, $k);
my @vec = ();

my $n = $VALOR;

$i = 0;
while ($i<$n) { $vec[$i++] = -1; }

($i, $j) = (0, 0);
while ($i<$n) {

   $j = 1 + int rand($n);

   $k = 0;
   while ($k<=$i && $vec[$k++]!=$j) {}

   $vec[$i++] = $j if ($k==$i+1);

}

$i = 0;
while ($i<$n) { print "$i\t$vec[$i++]\n"; }

#print "\n";


Scripts recomendados

Cálculo do MDC em Perl

Separa os dígitos de um número

Calculando a média entre dois valores

Cadastro usando arquivos .txt para guardar dados

Verificar se usuário é root


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts