none
Alguém me dá uma força com este algoritmo? RRS feed

  • 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

    terça-feira, 26 de dezembro de 2017 01:52

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

    terça-feira, 26 de dezembro de 2017 11:57

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

    terça-feira, 26 de dezembro de 2017 11:57
  • 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

    terça-feira, 26 de dezembro de 2017 13:25