Usuário com melhor resposta
Alguém me dá uma força com este algoritmo?

Pergunta
-
Olá amigos do MSDN, queria que as combinações geradas por este algoritmo pudessem ser vistas num TextBox.
'Public Class Form1' Dim matrizNum : Dim matrizSeq : Dim combLimite : Dim contador As Integer' Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click' contador = 0' matrizNum = Split(TextBox2.Text, ",")' geraComb(UBound(matrizNum) + 1, CInt(TextBox1.Text), 1, 1, "")' End Sub' Sub geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String)' Dim seqTemp As String : Dim limiteElem As Integer' limiteElem = totalNum - (totalElementos - ElementoAtual)' For i = num To limiteElem
' seqTemp = sequencia & (matrizNum(i - 1))' If ElementoAtual < totalElementos Then' geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ")' Else' matrizSeq = Split(seqTemp, " ")' contador += 1' End If' Next' End Sub'End Class
Respostas
-
Olá Durval Teixeira
Tente usar o código abaixo:
Dim matrizNum : Dim matrizSeq : Dim combLimite : Dim contador As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click contador = 0 matrizNum = Split(TextBox2.Text, ",") TextBox3.Text = geraComb(UBound(matrizNum) + 1, CInt(TextBox1.Text), 1, 1, "") End Sub Function geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String) As String Dim seqTemp As String : Dim limiteElem As Integer limiteElem = totalNum - (totalElementos - ElementoAtual) For i = num To limiteElem seqTemp = sequencia & (matrizNum(i - 1)) If ElementoAtual < totalElementos Then geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ") Else matrizSeq = Split(seqTemp, " ") contador += 1 End If Next geraComb = seqTemp End Function
A diferença aqui Durval foi mudar de Sub para Function.
Dê uma olhadinha que você irá compreender.
Abraços.
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
Rafael Almeida
Senior Developer C#
Development Leader at JAMSOFT Informática
Microsoft Certified Professional
Criador e Mantenedor do EntityFramework Core for Firebird
Contribuidor do EntityFramework Core
Email: ralms@ralms.net
Blog - GitHub - LinkedIn - Twitter- Marcado como Resposta Filipe B CastroModerator quarta-feira, 27 de dezembro de 2017 16:49
Todas as Respostas
-
Olá Durval Teixeira
Tente usar o código abaixo:
Dim matrizNum : Dim matrizSeq : Dim combLimite : Dim contador As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click contador = 0 matrizNum = Split(TextBox2.Text, ",") TextBox3.Text = geraComb(UBound(matrizNum) + 1, CInt(TextBox1.Text), 1, 1, "") End Sub Function geraComb(ByVal totalNum As Integer, ByVal totalElementos As Integer, ByVal ElementoAtual As Integer, ByVal num As Integer, ByVal sequencia As String) As String Dim seqTemp As String : Dim limiteElem As Integer limiteElem = totalNum - (totalElementos - ElementoAtual) For i = num To limiteElem seqTemp = sequencia & (matrizNum(i - 1)) If ElementoAtual < totalElementos Then geraComb(totalNum, totalElementos, ElementoAtual + 1, i + 1, seqTemp & " ") Else matrizSeq = Split(seqTemp, " ") contador += 1 End If Next geraComb = seqTemp End Function
A diferença aqui Durval foi mudar de Sub para Function.
Dê uma olhadinha que você irá compreender.
Abraços.
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
Rafael Almeida
Senior Developer C#
Development Leader at JAMSOFT Informática
Microsoft Certified Professional
Criador e Mantenedor do EntityFramework Core for Firebird
Contribuidor do EntityFramework Core
Email: ralms@ralms.net
Blog - GitHub - LinkedIn - Twitter- Marcado como Resposta Filipe B CastroModerator quarta-feira, 27 de dezembro de 2017 16:49
-
Olá Rafael, primeiramente obrigado por me dar esta força.
Fiz conforme me orientou, testei, e o resultado foi o aparecimento de apenas um número no TextBox3, depois transformei o TextBox3 para MultiLine, mas a resposta continua igual, apenas um número. No caso tentei combinar 1,2,3,4,5,6 3 a 3 e o único número que vem para o TextBox3 é o 4. Se puder verificar o que está ocorrendo, me quebra mais essa, vou tentar mexer para ver se consigo algo também. Já faz uma semana que venho tentando, pelo menos começou aparecer alguma coisa.
Grato