GARANTIR DESCONTO

Fórum Números Aleatórios sem repetição #288573

18/07/2005

0

Olá Amigos sou no aqui no fórum e gostria de fazer uma pergunta:
Eu tenho um Array [1..9] chamado aMat do tipo Byte.
Nele eu sortei numeros de 0 à 100 com a está função:

for i:=1 to 9 do
aMat[i]:=Randon(101)

Eu gostaria que os números não se repitam no Array.
Como eu faria isso?


Caezar

Caezar

Responder

Posts

19/07/2005

Paullsoftware

A função Random(x) retorna um número aleatório entre 0 e x - 1.
Mas não há como evitar repetições. Para isso, você deve armazenar os números gerados numa tabela. Ao chamar a função, se o número retornado já existe na tabela, gera mais um número, senão, adiciona-o à tabela. espero ter ajudado :wink:


Responder

Gostei + 0

20/07/2005

Caezar

Obrigado,
Vou tentar construir essa function.


Responder

Gostei + 0

20/07/2005

Henry.fartura

vc pode também ao invés de utilizar um array utilizar um [b:f367b9dd9b]Set[/b:f367b9dd9b], ja que ao contrario do array o [b:f367b9dd9b]Set [/b:f367b9dd9b]não permite dados duplicados.
O help do delphi tem alguns exemplos, é só adapta-los.

[]´s
Fabio


Responder

Gostei + 0

20/07/2005

Macario

A função Random(x) retorna um número aleatório entre 0 e x - 1. Mas não há como evitar repetições. Para isso, você deve armazenar os números gerados numa tabela. Ao chamar a função, se o número retornado já existe na tabela, gera mais um número, senão, adiciona-o à tabela. espero ter ajudado :wink:



Ola inclua a chamada [b:60b93662cd]Randomize[/b:60b93662cd], ao entrar no form, e os numeros nao se repetiram no array.


espero que ajude.


Responder

Gostei + 0

20/07/2005

Beppe

[quote:91e4c79575=´Macario o Aspone´]Ola inclua a chamada [b:91e4c79575]Randomize[/b:91e4c79575], ao entrar no form, e os numeros nao se repetiram no array.
[/quote:91e4c79575]
Claro que se repetirão, mais cedo ou mais tarde, isto pq Randomize apenas inicializa uma variável apenas. Se por acaso ela iniciar com 0, é como se nenhuma chamada a ela tivesse sido feita.

Pode fazer algo assim:
const
  N = 10;
var
  I, T, P: Integer;
  Num: array[0..N - 1] of Integer;
begin
  ListView1.Clear;
  for I := 0 to N - 1 do
    Num[I] := I;
  for I := N - 1 downto 0 do
  begin
    P := Random(I + 1);
    T := Num[I];
    Num[I] := Num[P];
    Num[P] := T;
  end;
  ...
end;



Responder

Gostei + 0

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

Aceitar