Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

antunesleo_

Sortear números aleatórios sem repetição de números

Recommended Posts

Gostaria de que meu algorítmo sorteasse números aleatórios sem repetição, Exemplo: Random(4): 0, 3 ,2, 1, 4, 5. Creio que a logica esteja em salvar todos os números já sorteados em um vetor de verificação, caso o número já esteja no vetor então fazemos o sorteio novamente. Porém já tentei de todas as formas e nenhum das minhas tentativas deram certo!

 

var aleat: integer;
mandes: Array[0..19] of integer; //Esse vetor contem várias palavras que o usuário irá informar
begin
aleat := random(19);
Label3.Caption := mandes[aleat]; //o número sorteado é armazenado na variavel aleat, que também é o indice do vetor que contem as palavras, assim, sorteando uma palavra.
O problema está exatamente como disse ali em cima, os números, ou melhor, palavra se repetem para o usuário. Gostaria de que TODAS fossem sorteadas até começam repetir novamente Ex (no caso de 5 números): 0,5,3,4,2,1 ai repete 5,2,1,3,4,0. Como resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde amigo!

 

Para ter o efeito que você espera, a variável aleat, não pode conter o valor que ele possui em outra ocasião, nesse caso, o certo seria você guardar esse valor em outro vetor, e antes de realizar a atribuição a ele verificar se esse valor já tinha saído em outra ocasião.

 

Não sei qual o seu propósito, mas se o objetivo for, armazenar as palavras que o usuário informar, o ideal seria você fazer algo semelhante a isso:

 

var

iPos: Integer;

vPalavra: Array[0..19] of String;

begin

iPos := 0;

Repeat

WriteLn('Entre com a palavra');

ReadLn( vPalavra[iPos] );

Until iPos = 19;

end;

 

// Para exibir as palavras, você faria:

 

For iPos := Low( vPalavra ) to High( vPalavra ) do

WriteLn( vPalavra[iPos] );

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho varios Edits no meu form e o usuário vai informar as palavras. Essas palavras irão ser armazenadas em um vetor e depois sorteadas, mas não irão repetir (Tipo um sorteio de amigo secreto). Não estou usando estrutura de Registros/Arquivos. Tem alguma outra forma de resolver esse probleminha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

A única forma que imagino, seria ter um segundo vetor que armazena as posições do seu vetor de palavras correspondendo ao índice que já foi "sorteado".

 

Exemplo: Imagine que seu vetor de palavras seja o vPalavras, e o que grava as posições de vPos. Imagino que para o sorteio, você colocará a rotina de sorteio dentro de um loop. O vetor vPos terá seu indice acrescido a cada novo sorteio, logo será uma variável iniciando de 0 até o número de vezes (19) que o sorteio será realizado. Toda vez que o sorteio ocorrer, você verifica se o valor da variável "aleat" existe dentro do vetor vPos. Quando existir, você refaz o sorteio, até que o número seja diferente do que já existe em vPos.

 

Dessa maneira as palavras não se repetirão.

 

Conseguiu compreender a idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.