[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
Solved

# Generating Combinations in VB5

Posted on 2000-05-05
Medium Priority
144 Views
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

0
Question by:backflash
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 28

Expert Comment

ID: 2783169
i take it that the algorithm states the numbers in the group must be in ascending order?
0

LVL 28

Expert Comment

ID: 2783176
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
Else
Set partial_solutions = New Collection
If N = 1 Then
Else
MchoseN N - 1, first_allowed + 1, last_allowed, partial_solutions
End If

For i = 1 To partial_solutions.Count
" " & 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
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

LVL 9

Accepted Solution

GivenRandy earned 400 total points
ID: 2783204
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
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

Expert Comment

ID: 2784827
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

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
###### Suggested Courses
Course of the Month12 days, 17 hours left to enroll