Generating Combinations in VB5

Does anyone have a routine for generating each combination of a given group of numbers.

Example:
6 numbers has 6 groups of 5 numbers

1 2 3 4 5
1 2 3 4 6
1 3 4 5 6
1 2 4 5 6
1 2 3 5 6
2 3 4 5 6



backflashAsked:
Who is Participating?
 
GivenRandyConnect With a Mentor Commented:
I think you'll find this faster and easier (List1 is where output is sent, Command1 starts by calling Combinate):

Option Explicit

Private Sub Command1_Click()
    Combinate 6, 5
End Sub

Private Sub Combinate(N As Long, K As Long)
    Dim Counter As Long
   
    ' Error trap for N < K, N > 31
    List1.Clear
    For Counter = 0 To (2 ^ N - 1)
        If (BitCount(Counter) = K) Then
            List1.AddItem Result(Counter)
        End If
    Next
End Sub

Private Function BitCount(Number As Long) As Integer
  Dim Temp As Long
 
  BitCount = 0
  Temp = Number
  Do While (Temp)
    Temp = Temp And (Temp - 1)
    BitCount = BitCount + 1
  Loop
End Function

Private Function Result(ByVal Number As Long) As String
    Dim Temp As Long
   
    Result = ""
    Temp = 1
    Do While Number
        If ((Number Mod 2) = 1) Then
            Result = Result & Temp & " "
        End If
        Number = Number \ 2
        Temp = Temp + 1
    Loop
End Function
0
 
AzraSoundCommented:
i take it that the algorithm states the numbers in the group must be in ascending order?
0
 
AzraSoundCommented:
add two textboxes to hold the values (e.g. 5 and 6) and another textbox that is set to multiline to display the results.  add a command button that will execute the code:


Option Explicit

Private Sub MchoseN(ByVal N As Integer, ByVal first_allowed As Integer, ByVal last_allowed As Integer, ByVal solutions As Collection)
    Dim i As Integer
    Dim txt As String
    Dim partial_solutions As Collection

    If N < 1 Then

    ElseIf N > last_allowed - first_allowed + 1 Then

    ElseIf N = last_allowed - first_allowed + 1 Then

        txt = Format$(first_allowed)
        For i = first_allowed + 1 To last_allowed
            txt = txt & " " & Format$(i)
        Next i
        solutions.Add txt
    Else
        Set partial_solutions = New Collection
        If N = 1 Then
            partial_solutions.Add ""
        Else
            MchoseN N - 1, first_allowed + 1, last_allowed, partial_solutions
        End If

        For i = 1 To partial_solutions.Count
            solutions.Add Format$(first_allowed) & _
                " " & partial_solutions(i)
        Next i

        Set partial_solutions = New Collection
        MchoseN N, first_allowed + 1, last_allowed, partial_solutions

        For i = 1 To partial_solutions.Count
            solutions.Add partial_solutions(i)
        Next i
    End If
End Sub
Private Sub Command1_Click()
    Dim solutions As Collection
    Dim i As Integer
    Dim txt As String

    Set solutions = New Collection
    MchoseN CInt(txtN.Text), 1, CInt(txtM.Text), solutions

    For i = 1 To solutions.Count
        txt = txt & solutions(i) & vbCrLf
    Next i

    txtResult.Text = txt
    lblSolutions.Caption = Format$(solutions.Count)
End Sub

Private Sub Form_Resize()
    Dim hgt As Single

    hgt = ScaleHeight - txtResult.Top
    If hgt < 120 Then hgt = 120
    txtResult.Move 0, txtResult.Top, ScaleWidth, hgt
End Sub

0
 
Unicorn061399Commented:
Why do u need a number generating algoritm? By simply assigning the values to an array u generate less code.
Or is this an arithmic question on binary logic or something?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.