... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Sorteio Lotofácil, Lotomania e Mega-Sena

Resolvi desenvolver um simulador da Lotomania e obviamente precisei criar um código para gerar os sorteios.    Quem já assistiu a um sorteio, sabe que se segue a seguinte ordem:

- As bolas são posicionadas em recipiente acima do globo.

- As bolas são liberadas para dentro do globo e este começa a girar.

- Após alguns giros do globo, uma bola é sorteada.  Até a bola descer e se posicionar no recipiente inferior, o globo fica girando.  As próximas bolas sorteadas seguem o mesmo processo de giro e sorteio.

Montei a lógica de programação, a mais fiel possível ao procedimento real do sorteio.  Observe atentamente aos comentários do código.

Veja que o código já foi preparado para sortear também a Lotofácil e a Mega-sena:

Option Compare Database

Public Enum sTipo
   Lotofacil = 15
   Lotomania = 20
   Mega_sena = 6
End Enum
 
------------------------------------------------------------------
Public Function fncSorteio(Tipo As sTipo)
Dim n() As Integer
Dim j%
Dim bolas$
Dim b, g, r
Dim PosicaoSorteada As Byte

ReDim n(Tipo) 'Redimensiona a matriz, conforme o tipo de sorteio

'Coloca as bolas no recipiente que fica acima do globo
Select Case Tipo
    Case 15 'Lotofácil
        For j = 1 To 25
            bolas = bolas & " " & j
        Next
    Case 20 'Lotomania
        For j = 0 To 99
            bolas = bolas & " " & j
        Next
    Case 6 'Mega-sena
        For j = 1 To 60
            bolas = bolas & " " & j
        Next
End Select

Randomize 'Limpa a memória para um novo sorteio

'Loop até completar o sorteio
For j = 1 To Tipo
    'Coloca as bolas no globo
    b = Split(Trim(bolas), " ") 
    'Gira o globo 15 vezes e sorteia
    For g = 1 To 15
	'Em cada giro do globo, uma bola é sorteada para cair
        PosicaoSorteada = Int(Rnd * (UBound(b) + 1))
	'Ao chegar no décimo quinto giro, deixa a bola cair do globo
        If g = 15 Then 
            'Passa a bola sorteada para a bandeja das sorteadas
            n(j) = b(PosicaoSorteada)
            'Retira a bola sorteada do globo, para o novo sorteio
            bolas = ""
            For r = 0 To UBound(b)
                If b(r) <> n(j) Then
                    bolas = bolas & " " & b(r) 'Somente as bolas não sorteadas
                End If
            Next
        End If
    Next
Next
'Ordena os números sorteados
Call fncOrdenarArray(n)
'Formata os números sorteados com duas casas
bolas = ""
For j = 1 To Tipo
    bolas = bolas & " " & Format(n(j), "00")
Next
'Apresenta as bolas sorteadas
fncSorteio = Trim(bolas)
End Function
 
-----------------------------------------------------------------------
 
Public Sub fncOrdenarArray(Prova)
Dim i%, j%, uB%, Temp, temp2
uB = UBound(Prova)
For i = LBound(Prova) To uB - 1
   For j = i + 1 To uB
      If Val(Prova(i)) > Val(Prova(j)) Then
         Temp = Prova(j)
         Prova(j) = Prova(i)
         Prova(i) = Temp
      End If
   Next j
Next i
End Sub

Testando a função:

fncSorteio(Lotomania)
03 06 08 11 25 27 30 33 35 42 46 50 51 52 58 62 67 69 72 86
 
fncSorteio(Lotofacil)
01 04 05 06 07 08 10 11 12 13 15 17 19 22 23
 
fncSorteio(Mega_sena)
03 22 29 49 54 55

A função Split()

A função Split() transforma uma seqüência em uma Matriz.  Por exemplo, a variável bolas recebe da Lotomania, a seguinte seqüência:

bolas = "0 1 2 3 4 5 6 7 8 9 10 .... 97 98 99"

Ao passar a seqüência da variável bolas na função Split()

b= Split(bolas," ")

temos os valores passados para a matriz b:

b(0) = 0

b(1) = 1

...

b(98) = 98

b(99) = 99

A  função Ubound()

A função Ubound(matriz) retorna o comprimento da matriz.

uBound(b) ::::> 99

A função Rnd()

A função Rnd() retorna a números aleatórios fracionados.  Exemplo:

0,7747401
0,301948
0,2895625


Ao multiplicar por 100, temos :

(Rnd * 100)

77,47401
30,1948
28,95625


Usamos a função INT() para extrair somente a parte inteira:

int(Rnd * 100)

77
30
28

 

Bom estudo!


 

 


7 comentário(s)

Ricardo Abreu   29/03/2017 08:25:10

Excelente

Gilson   29/03/2017 10:00:00

Muito bom. Excelente

pcnet   29/03/2017 13:16:02

Obrigado por partilhar o seu conhecimento.
O seu trabalho é notável!

Muitos parabéns e os maiores sucessos!

MARCOS HENRIQUE   30/03/2017 05:55:46

Não consegui localizar o arquivo exemplo para realizar o Download.

Nick BEthencourt   30/03/2017 07:46:44

Avelino você é um cara inspirador!

Nélio   30/03/2017 08:37:04

Meus parabéns mestre, sou seu fã! Quando eu crescer quero ser assim!

Eduardo   01/04/2017 06:41:01

muito boa matéria!! parabéns !!! sucesso!!


Envie seu comentário: