ANALISE COMBINATORIA PARA LOTERIAS
Estou aprendendo VB só para Loteria. Alguém tem um fonte que gera combinações dentre um conjunto de números marcados em 60 da megasena?
Grato a todos
Grato a todos
No alto desta página, tem uma caixa de texto voltada para o uso de pesquisas no site.
Digite a palavra LOTERIA, selecione ARQUIVOS e clique em PESQUISAR.
Digite a palavra LOTERIA, selecione ARQUIVOS e clique em PESQUISAR.
Grato pelas dicas mas não consegui achar um programa fonte para gerar combinações a partir de um grupo de números...continuo no aguardo...quem puder postar as linhas aki no forum fico agradecido.
cara, pra vc conseguir isso primeiro seria bom vc conversar com alguém de matemática pra determinar o método pra definir as dezenas. Pelas minhas contas são mais de 58.000.000. To enferrujado em matemática discreta. =P
O código abaixo gera as combinações. Basta informa os numeros separados por [Ô],[Ô] na txtnumeros e a quantidade de elementos em cada combinação na txtelementos.
[ô]controles usados:
txtnumeros: coloca os numeros a serem combinados, separados por virgula.
txtelementos: informa a quantidade de elementos em cada combinação.
, command1: chama a função geraComb
list1: exibe as combinações
---------------------------------------------------------------------------------------
Dim matrizNum
Private Sub Command1_Click()
List1.Clear
matrizNum = Split(txtnumeros, [Ô],[Ô])
Call geraComb(UBound(matrizNum) + 1, CInt(txtelementos), 1, 1, [Ô][Ô])
MsgBox List1.ListCount
End Sub
Sub geraComb(totalNum As Integer, totalElementos As Integer, ElementoAtual As Integer, num As Integer, sequencia As String)
Dim seqTemp As String
Dim limiteElem As Integer
limiteElem = totalNum - (totalElementos - ElementoAtual)
For i = num To limiteElem
seqTemp = sequencia & Format(matrizNum(i - 1), [Ô]00[Ô])
If ElementoAtual < totalElementos Then
Call geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & [Ô] - [Ô])
Else
List1.AddItem seqTemp
End If
Next i
End Sub
[ô]controles usados:
txtnumeros: coloca os numeros a serem combinados, separados por virgula.
txtelementos: informa a quantidade de elementos em cada combinação.
, command1: chama a função geraComb
list1: exibe as combinações
---------------------------------------------------------------------------------------
Dim matrizNum
Private Sub Command1_Click()
List1.Clear
matrizNum = Split(txtnumeros, [Ô],[Ô])
Call geraComb(UBound(matrizNum) + 1, CInt(txtelementos), 1, 1, [Ô][Ô])
MsgBox List1.ListCount
End Sub
Sub geraComb(totalNum As Integer, totalElementos As Integer, ElementoAtual As Integer, num As Integer, sequencia As String)
Dim seqTemp As String
Dim limiteElem As Integer
limiteElem = totalNum - (totalElementos - ElementoAtual)
For i = num To limiteElem
seqTemp = sequencia & Format(matrizNum(i - 1), [Ô]00[Ô])
If ElementoAtual < totalElementos Then
Call geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & [Ô] - [Ô])
Else
List1.AddItem seqTemp
End If
Next i
End Sub
vai em Delphi: ANÃLISE COMBINATÓRIA
Function TfrmForm.Sorteio(InicioIntervalo, FimIntervalo, QuantosRetornos: Integer): String;
Var Retorno, SS: String;
Vetor : array of integer;
Valor, i, j, x : Integer;
Repetido : Boolean;
label volta;
function BuscaRND(vValor:Integer):Integer;
begin
Result := Random(vValor)
end;
Begin
//incrementa 1 ex: Ramdom(100) vai considerar 0 a 99
FimIntervalo := FimIntervalo + 1;
//redimensiona vetor para a quant. de retornos requerida
SetLength(Vetor, QuantosRetornos);
Randomize;
For i := 0 To QuantosRetornos - 1 Do Begin
Valor := 0;
volta: //foi achado repetido mais abaixo
//se retornou zero busca recursivamente até retornar > 0
repeat
Valor := BuscaRND(FimIntervalo);
until (Valor >= InicioIntervalo) and (Valor < FimIntervalo); //permanece na repetição até que a condição seja atendida
//vê se valor já existe no vetor
Repetido := False;
for j := 0 to QuantosRetornos - 1 do begin
if Vetor[j] = Valor then begin
Repetido := True;
break;
end;
end;
//se não é repedido insere no vetor
if (Valor >= 1) AND (Repetido = False) then
Vetor[i] := Valor
else
goto volta; //busca novo valor qdo repetido, sem sair da repetição i atual
End;
//ordena valores em ordem crescente
for i := Low(Vetor) to (High(Vetor)-1) do begin
for j := i + 1 to High(Vetor) do
begin
if Vetor[i] > Vetor[j] then
begin
x := Vetor[i];
Vetor[i] := Vetor[j];
Vetor[j] := x
end;
end;
end;
//lê vetor e concatena resultado para texto
for j := 0 to High(Vetor) do begin
Retorno := Retorno + IntToStr(Vetor[j]) + #13#10;
end;
Result := Retorno;
End;
Function TfrmForm.Sorteio(InicioIntervalo, FimIntervalo, QuantosRetornos: Integer): String;
Var Retorno, SS: String;
Vetor : array of integer;
Valor, i, j, x : Integer;
Repetido : Boolean;
label volta;
function BuscaRND(vValor:Integer):Integer;
begin
Result := Random(vValor)
end;
Begin
//incrementa 1 ex: Ramdom(100) vai considerar 0 a 99
FimIntervalo := FimIntervalo + 1;
//redimensiona vetor para a quant. de retornos requerida
SetLength(Vetor, QuantosRetornos);
Randomize;
For i := 0 To QuantosRetornos - 1 Do Begin
Valor := 0;
volta: //foi achado repetido mais abaixo
//se retornou zero busca recursivamente até retornar > 0
repeat
Valor := BuscaRND(FimIntervalo);
until (Valor >= InicioIntervalo) and (Valor < FimIntervalo); //permanece na repetição até que a condição seja atendida
//vê se valor já existe no vetor
Repetido := False;
for j := 0 to QuantosRetornos - 1 do begin
if Vetor[j] = Valor then begin
Repetido := True;
break;
end;
end;
//se não é repedido insere no vetor
if (Valor >= 1) AND (Repetido = False) then
Vetor[i] := Valor
else
goto volta; //busca novo valor qdo repetido, sem sair da repetição i atual
End;
//ordena valores em ordem crescente
for i := Low(Vetor) to (High(Vetor)-1) do begin
for j := i + 1 to High(Vetor) do
begin
if Vetor[i] > Vetor[j] then
begin
x := Vetor[i];
Vetor[i] := Vetor[j];
Vetor[j] := x
end;
end;
end;
//lê vetor e concatena resultado para texto
for j := 0 to High(Vetor) do begin
Retorno := Retorno + IntToStr(Vetor[j]) + #13#10;
end;
Result := Retorno;
End;
Testei o código do FININHO e tá muito bom. Código bem elegante por sinal.
Valeu caras, vou ver se faço a coisa direito...Quanto ao amigo Leandro, na verdade o fechamento da mega fica em 50.063.860 jogos com 6
Tópico encerrado , respostas não são mais permitidas