Newsgroup: it.comp.lang.visual-basic
Titolo: Algoritmo di combinazione

Riguardi a tutto il NG
Mi date un aiuto?
Devo creare un algoritmo che mi prende n numeri e me li combina a k a k e mi
fornisce tutte le combinazioni possibili di un qualsiasi array.
es :  0 1 2 3 4 5
se devo prendere le doppie : prende 0 1 - 0 2 - 03 - 04 ecc.
Praticamente è la funzione delle combinazioni semplici (n,k)
Qualcuno può aiutarmi. Grazie
Fabrizio


preso da un mio progetto per lo sviluppo del superenalotto
Sub calcolo(ByVal Num As Byte, buffer() As Byte)
'calcolo senza condizioni
Dim I As Long
Dim TotCol As Single
Dim im1 As Integer
Dim im2 As Integer
Dim im3 As Integer
Dim im4 As Integer
Dim im5 As Integer
Dim im6 As Integer
Dim i1 As Integer
Dim i2 As Integer
Dim i3 As Integer
Dim i4 As Integer
Dim i5 As Integer
Dim i6 As Integer
Dim Comb(0 To 5) As Integer
Dim flag As Boolean
Const seifattoriale = 720
flaguscitasviluppo = False
TotCol = 1
flag = False
For I = Num To Num - 5 Step -1
    TotCol = TotCol * I
Next I
TotCol = TotCol / seifattoriale
nci = 0
Ncolo = 0
im1 = Num - 5
im2 = Num - 4
im3 = Num - 3
im4 = Num - 2
im5 = Num - 1
im6 = Num - 0
For i1 = 0 To im1 - 1
    Comb(0) = buffer(i1)
    For i2 = i1 + 1 To im2 - 1
        Comb(1) = buffer(i2)
        For i3 = i2 + 1 To im3 - 1
             Comb(2) = buffer(i3)
             For i4 = i3 + 1 To im4 - 1
                 Comb(3) = buffer(i4)
                 For i5 = i4 + 1 To im5 - 1
                     Comb(4) = buffer(i5)
                     For i6 = i5 + 1 To im6 - 1
                         Comb(5) = buffer(i6)
                            DoEvents
                            ' esce dal calcolo se flaguscita = true
                            If flaguscitasviluppo Then
                                Ncolo = 0
                                Exit Sub
                            End If
                            ' messaggio di errore se colonne superiori al
possibile
                            If (Ncolo >= maxcolonne) And Not flag Then
                                frmCalcolo.labAllarm.Caption = "ATTENZIONE
!!! Sviluppo superiore alla capienza della memoria"
                                fuori_mem
                                If frmCalcolo.Tag = 2 Then
flaguscitasviluppo = True
                                flag = True
                            End If 'fine If (ncolo >= maxcolonne) And Not
flag
                            ' controlla se e' possibile inserire ancora
colonne
                            If (Ncolo < maxcolonne) And Not flag Then
                                        Ncolo = Ncolo + 1
                                        colonne(Ncolo, 1) = Comb(0)
                                        colonne(Ncolo, 2) = Comb(1)
                                        colonne(Ncolo, 3) = Comb(2)
                                        colonne(Ncolo, 4) = Comb(3)
                                        colonne(Ncolo, 5) = Comb(4)
                                        colonne(Ncolo, 6) = Comb(5)
                            End If
                            nci = nci + 1
                            frmCalcolo.pb.Value = (nci * 100) \ TotCol
                    Next i6
                Next i5
            Next i4
        Next i3
    Next i2
 Next i1
If flag Then Ncolo = 0
frmenacit.StBar.Panels(4) = "Integrale"
End Sub
adattalo
ciao

 Praticamente è la funzione delle combinazioni semplici (n,k)
Sito Comune (
http://www.it-lang-vb.net/
), Cerca, digita Combinazioni