Salve a tutti, ho trovato un algoritmo che mi visualizza tutte le combinazioni semplici (la cui somma è data dal coefficiente binomiale) dati N numeri, in classi di K (con K< N) che posto perchè spero potrà essere utile anche a qualcun'altro. Il mio problema è che vorrei che visualizzasse le combinazioni in classe K di qualsiasi vettore di N numeri, mentre se inserisco 4 numeri a caso (diciamo 9-12-19-24) in classe 2 per esempio mi rende:

1 2
1 3
1 4
2 3
2 4
3 4

invece di

9 12
9 19
9 24
...
non riesco a dargli in input il vettore che vorrei, e non so se agire all'interno dell'algoritmo oppure nel momento in cui riscrive i riultati sulla textbox. Spero di essermi spiegato bene


codice:
Public Function CombinazioniS(ByVal N&, ByVal K&, CombiS&()) As Boolean
'
'   Ritorna, nella matrice CombiS(Cnk(N, K), K) con N >= K
'   e K > 0, le combinazioni semplici di N oggetti della classe K:
'
    
    N = Val(lblSelezionati.Caption)
    K = Val(ElemScelti)
    Dim R&, NR&, c&, P&
    Dim progresso As Double
    progresso = 0
'
    On Error GoTo CombinazioniS_ERR
'
    NR = Cnk(N, K)  ' Numero delle righe.
    ReDim CombiS(1 To NR, 1 To K)
'
    ' Scrivo la prima riga:
    For c = 1 To K
        CombiS(1, c) = c
    Next c
'
    ' Righe rimanenti:
    For R = 2 To NR
'
        P = K
        Do Until CombiS(R - 1, P) < N - K + P
            P = P - 1
        Loop

        For c = 1 To P - 1
            CombiS(R, c) = CombiS(R - 1, c)
        Next c
'
        CombiS(R, P) = CombiS(R - 1, P) + 1
'
        For c = P + 1 To K
            CombiS(R, c) = CombiS(R, c - 1) + 1
        Next c
        progresso = progresso + 1
        ProgressBar.Value = progresso * 100 / NR
'
    Next R
'
'
CombinazioniS_ERR:
    CombinazioniS = (Err = 0)
    If (Err <> 0) Then
        Dim M$
        M$ = "Err. N° " & Err.Number & "  " & Err.Description & vbNewLine
        MsgBox M$, vbCritical, " Function CombinazioniS"
    End If
'
'
'
End Function
Successivamente scrivo le combinazioni su una textbox

codice:
    If CombinazioniS(N, K, CombiS()) Then
        txtCombi.Text = strTabella$(CombiS())
    Else
        txtCombi.Text = ""
    End If

codice:
Private Function strTabella$(Tabella&(), Optional ByVal LimiteTB As Boolean = True)
'
'   Ritorna una stringa con il contenuto della Tabella.
'   Se NR e' molto grande, il tempo impiegato puo' essere
'   notevole.  Se LimiteTB = True la lunghezza della stringa
'   di ritorno viene limitata alla capienza massima di un
'   TextBox (circa 32000 caratteri).
'
    Dim R&, NR&, c&, NC&, LenMax&, TxT$
'
    NR = UBound(Tabella, 1)
    NC = UBound(Tabella, 2)

    For R = 1 To NR
        For c = 1 To NC - 1
            TxT$ = TxT$ & Right$("   " & Str$(Tabella(R, c)), 3) & ","
        Next c
        TxT$ = TxT$ & Right$("   " & Str$(Tabella(R, NC)), 3) & vbNewLine
'
        DoEvents
    Next R
'
    strTabella$ = TxT$
'
'
End Function