Sortear numeros a partir de uma lista

saurio33

Power Member
Boas,
Agradeço toda a ajuda que possam prestar.
O problema é o seguinte: Necessito de sortear cerca de 20 numeros de um universo de cerca 300 numeros, não necessariamente sequenciais (mas em ultimo caso posso criar um indice sequencial para esses numeros) e não repetidos. É uma versão informatica dos tradicionais sacos com os papelinhos numerados.
Qual a forma mais simples de fazer isto? Excel, visual basic, php, etc?
Já estou há uns anos largos sem mexer em programação e dava-me jeito resolver isto sem investir muito tempo.

Cumprimentos
J. Pedro
 
VB6
So tens q depois fazer a verificacao se ta a repetir algum valor

Código:
Option Explicit

Private Sub Command1_Click()
Dim i As Integer
Randomize
For i = 0 To 19
    Me.Text1 = Me.Text1 & Int((300 - 0 + 1) * Rnd + 0) & ";"
Next i

End Sub
 
Acho que em PHP é mais fácil:

PHP:
//A nossa lista com os tais 300 numeros
$lista = array( 1, 3, 12, 14, 123, 1234, 124, 192, 1238, 32895, 346, 123325, 12321, 12312, 12331, 543345, 234423, 123321, 132213, 4324, 123213, 13432, 123213, 13423325, 45262534, 12345, 9532, 893745, 30945, 98453, 23875, 8723, 23765 ); //etc etc

//Baralhar tudo - o factor aleatório :)
shuffle( $lista );

//Guardar os seleccionados num array, que tem os primeiros 20 elementos do "grande"
$sorteados = array_splice( $lista, 0, 20 );

//Sort do menor para o maior
sort( $sorteados );

//Imprimir tudo por ordem
foreach( $sorteados AS $valor )
	echo $valor . ", ";

Resultado:
1, 3, 12, 123, 124, 192, 346, 1238, 9532, 12312, 12321, 12331, 12345, 13432, 23765, 30945, 123213, 543345, 13423325, 45262534,
1, 12, 14, 124, 192, 346, 4324, 8723, 9532, 12345, 13432, 23765, 23875, 30945, 123213, 123213, 123321, 123325, 13423325, 45262534,
3, 12, 14, 192, 1234, 1238, 4324, 12312, 12321, 12331, 12345, 30945, 98453, 123213, 123213, 132213, 543345, 893745, 13423325, 45262534,

:)
 
Última edição:
Boas,
Agradeço toda a ajuda que possam prestar.
O problema é o seguinte: Necessito de sortear cerca de 20 numeros de um universo de cerca 300 numeros, não necessariamente sequenciais (mas em ultimo caso posso criar um indice sequencial para esses numeros) e não repetidos. É uma versão informatica dos tradicionais sacos com os papelinhos numerados.
Qual a forma mais simples de fazer isto? Excel, visual basic, php, etc?
Já estou há uns anos largos sem mexer em programação e dava-me jeito resolver isto sem investir muito tempo.

Cumprimentos
J. Pedro

Eu uma vez fiz isso em MatLab para sortear os números do EuroMilhões.

Para não te prender a nenhum tipo de linguagem, deixo-te em português estruturado a maneira de fazer este programa:


Preencher array (vamos enverdar por ordem sequencial) com os numeros possíveis.
Cada vez que se coloca um novo numero, verificar se existe:
Se existe--> sortear um novo numero
Se não existe--> colocar no array e avançar
Depois de preencher o array, sortear um numero que será um índice do array do array.
Indicar o numero que está nesse índice.
Retirar esse número do array (pode-se colocar zero no indice do n.º anterior ou fazer a ordenação do array).
Proceder ao sorteio de quantos mais numeros se quiser.

FIM

Acho que te consigo dar uma boa ideia de como fazer este programa.

Vá, cumps
 
Back
Topo