MATRIZ - VETOR

KELVINCD 16/01/2013 08:56:41
#417462
Boas pessoal.
Como crio uma matriz no vb6 onde eu digito 17 números e ele me retora todas as possibilidades com 15 digitos.
Exemplo;
digitei
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17
retorno
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 16
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 17
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 15 - 15
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 15 - 16
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 15 - 17
.....
tem como
MARCELO.TREZE 16/01/2013 12:56:06
#417492
Resposta escolhida
é garoto, meu cerebro quase fundiu mas tai o código.

para testar coloque em um novo projeto 01 TextBox, 01 CommandButton, 01 Listbox e cole:

Private Function AnaliseCombinatoria(Dezena As String) As String
Dim n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer, n5 As Integer
Dim n6 As Integer, n7 As Integer, n8 As Integer, n9 As Integer, n10 As Integer
Dim n11 As Integer, n12 As Integer, n13 As Integer, n14 As Integer, n15 As Integer
Dim strDezena() As String
DoEvents
strDezena() = Split(Dezena, [Ô]-[Ô])
For n1 = 0 To UBound(strDezena) - 1
For n2 = n1 + 1 To UBound(strDezena)
For n3 = n2 + 1 To UBound(strDezena)
For n4 = n3 + 1 To UBound(strDezena)
For n5 = n4 + 1 To UBound(strDezena)
For n6 = n5 + 1 To UBound(strDezena)
For n7 = n6 + 1 To UBound(strDezena)
For n8 = n7 + 1 To UBound(strDezena)
For n9 = n8 + 1 To UBound(strDezena)
For n10 = n9 + 1 To UBound(strDezena)
For n11 = n10 + 1 To UBound(strDezena)
For n12 = n11 + 1 To UBound(strDezena)
For n13 = n12 + 1 To UBound(strDezena)
For n14 = n13 + 1 To UBound(strDezena)
For n15 = n14 + 1 To UBound(strDezena)
List1.AddItem strDezena(n1) & [Ô] - [Ô] & strDezena(n2) & [Ô] - [Ô] & strDezena(n3) & [Ô] - [Ô] & strDezena(n4) & [Ô] - [Ô] & strDezena(n5) & [Ô] - [Ô] & _
strDezena(n6) & [Ô] - [Ô] & strDezena(n7) & [Ô] - [Ô] & strDezena(n8) & [Ô] - [Ô] & strDezena(n9) & [Ô] - [Ô] & strDezena(n10) & [Ô] - [Ô] & _
strDezena(n11) & [Ô] - [Ô] & strDezena(n12) & [Ô] - [Ô] & strDezena(n13) & [Ô] - [Ô] & strDezena(n14) & [Ô] - [Ô] & strDezena(n15)

Next n15: Next n14: Next n13: Next n12: Next n11
Next n10: Next n9: Next n8: Next n7: Next n6
Next n5: Next n4: Next n3: Next n2: Next n1

End Function


Private Sub Command1_Click()
AnaliseCombinatoria Text1.Text
End Sub

KERPLUNK 16/01/2013 14:39:17
#417502
Eu teria feito diferente, mesmo form(1 textbox, 1 botão e 1 listbox)

Public Function PermuteString(ByVal Ztring As String, Optional Base As String = _
[Ô][Ô]) As String
Dim TmpStrArray() As String, I As Long

[ô] If there[ô]s only 1 element then
If InStr(1, Ztring, [Ô] [Ô], vbTextCompare) = 0 Then
PermuteString = Base & [Ô] [Ô] & Ztring & vbCrLf
Exit Function
End If

[ô] If more than 1 element: split elements in one array of elements
TmpStrArray = Split(Ztring, [Ô] [Ô], , vbTextCompare)

If Base = [Ô][Ô] Then
[ô] Loop trough each element and do callbacks to permute again
For I = LBound(TmpStrArray) To UBound(TmpStrArray)
PermuteString = PermuteString & PermuteString(ReturnAllBut _
(TmpStrArray, I), TmpStrArray(I))
Next
Else
[ô] Loop trough each element and do callbacks to permute again
For I = LBound(TmpStrArray) To UBound(TmpStrArray)
PermuteString = PermuteString & [Ô] [Ô] & PermuteString(ReturnAllBut _
(TmpStrArray, I), Base & [Ô] [Ô] & TmpStrArray(I))

Next

End If
End Function

[ô] Return all items in a array but 1
Public Function ReturnAllBut(ByRef Arrai() As String, But As Long) As String
Dim I As Long
For I = LBound(Arrai) To UBound(Arrai)
If I <> But Then
ReturnAllBut = ReturnAllBut & Arrai(I) & [Ô] [Ô]
End If
Next
ReturnAllBut = RTrim(ReturnAllBut)
DoEvents
End Function

Private Sub Command1_Click()
Text1.Text = Replace(Text1.Text, [Ô] - [Ô], [Ô] [Ô])
tudo = PermuteString(Text1.Text, [Ô]|[Ô])
Dim tudosplit
tudosplit = Split(tudo, [Ô]|[Ô])
For I = LBound(tudosplit) To UBound(tudosplit)
List1.AddItem tudosplit(I)
Next I

End Sub


Fica um pouco mais de código, mas a diferença é que fica um pouco menos confuso com tantos for e não importa o número de ítens de iteração, pode ser 10, 15, 3... quantos números quiser e ele gera todas as combinações...
KELVINCD 16/01/2013 15:08:06
#417504
Testei as 2 mas a que melhor me adaptei foi o do MARCELO-TREZE ja acrescentei um cont nele e um clear no list.
mas brigadão ai vlw pessoal.
MARCELO.TREZE 16/01/2013 20:04:36
#417536
Para o KERPLINK, neste seu código como ele faz para gerar combinações de 17 dezenas em grupos de 15?

Só pergunto porque eu ainda não consegui criar um código que seja do tipo universal, onde colocamos combinações 15 de 6, e o codigo gera todas combinações possiveis.

até hoje só consegui com os laços for.

ps: trabalho para uma rede lotérica a 15 anos, e desenvolvo pra eles.

Tópico encerrado , respostas não são mais permitidas