Newsgroup: it.comp.appl.access
Titolo: Re: permutazioni senza ripetizioni


Ciao Bruno,
l'indirizzo è falso altrimenti chi mi salva dallo spam.
puoi postare il codice qui ?
ciao, AEOM

 Bruno
Infatti ti ho detto che coi numeri interi non dovresti avere problemi.
Le imprecisioni sui decimali sono note.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ciao, AEOM
OK, eccolo di seguito.
La chiamata la fai con:
MyArray(1) = 10
MyArray(2) = 20
MyArray(3) = 30
MyArray.............
Comb MyArray, 2 | 3 | 4 | 5
Se trovi qualche bug avvisami.
Ciao
Bruno
Public Sub Comb(ArrayElementi(), ClasseCombinazione As Integer)
' ArrayElementi contiene gli elementi da combinare -- Numeri, Stringhe, etc.
' ClasseCombinazione = 2 ---> Ambo
' ClasseCombinazione = 3 ---> Terno
' ClasseCombinazione = 4 ---> Quaterna
' ClasseCombinazione = 5 ---> Cinquina
Dim i As Integer, j As Integer, k As Integer, l As Integer, p As Integer
Dim NumComb As Long, n As Integer, collComb As New Collection
n = UBound(ArrayElementi)
NumComb = 0
Select Case ClasseCombinazione
    Case 2
        GoSub Ambo
    Case 3
        GoSub Terno
    Case 4
        GoSub Quaterna
    Case 5
        GoSub Cinquina
    Case Else
        MsgBox "Sono ammessi:" & vbCrLf & vbLf & _
               "2 ---> Ambo" & vbCrLf & _
               "3 ---> Terno" & vbCrLf & _
               "4 ---> Quaterna" & vbCrLf & _
               "5 ---> Cinquina"
        Exit Sub
End Select
For i = 1 To collComb.Count
    Debug.Print i, collComb.Item(i)
Next i
'----------------------------------------
Exit Sub
'----------------------------------------
Ambo:
'----
For i = 1 To n - ClasseCombinazione + 1
    For j = i + 1 To n
        NumComb = NumComb + 1
        collComb.Add ArrayElementi(i) & Space(2) & ArrayElementi(j)
    Next j
Next i
Return
Terno:
'-----
For i = 1 To n - ClasseCombinazione + 1
    For j = i + 1 To n - 1
        For k = j + 1 To n
            NumComb = NumComb + 1
            collComb.Add ArrayElementi(i) & Space(2) & ArrayElementi(j) & _
            Space(2) & ArrayElementi(k)
        Next k
    Next j
Next i
Return
Quaterna:
'--------
For i = 1 To n - ClasseCombinazione + 1
    For j = i + 1 To n - 2
        For k = j + 1 To n - 1
            For l = k + 1 To n
                NumComb = NumComb + 1
                collComb.Add ArrayElementi(i) & Space(2) & ArrayElementi(j) 
& _
                Space(2) & ArrayElementi(k) & Space(2) & ArrayElementi(l)
            Next l
        Next k
    Next j
Next i
Return
Cinquina:
'--------
For i = 1 To n - ClasseCombinazione + 1
    For j = i + 1 To n - 3
        For k = j + 1 To n - 2
            For l = k + 1 To n - 1
                For p = l + 1 To n
                    NumComb = NumComb + 1
                    collComb.Add ArrayElementi(i) & Space(2) & 
ArrayElementi(j) & Space(2) & _
                    ArrayElementi(k) & Space(2) & ArrayElementi(l) & 
Space(2) & ArrayElementi(p)
                Next p
            Next l
        Next k
    Next j
Next i
Return
End Sub

 ciao, AEOM
Avevo dato un algoritmo tempo fa ad uno che voleva calcolare tutte le
possibili combinazioni per il superenalotto.
Era una cosa con cicli for nidificati e interdipendenti tipo questa:
for i1=1 to n
  for i2=i1 to n
    for i3=i2 to n
      combinazione = valori(i1) & valori(i2) & valori(i3)
    next i3
  next i2
next i1



mi sembra che l'esempio sia chiaro
da un urna con 5 palle numerate voglio sapere tutte le possibili 
combinazioni estraendo 3 palle alla volta, stile lotto o sorteggio 
champizionsz lig (alla Galeazzi)
grazie comunque per la rispolverata alla analisi combinatorio purtroppo ho 
beccato solo 22 all'esame
anni e anni fa
ciao, AOEM

 e' fattibile?
Con quattro procedure (Ambo, Terno, Quaterna, Cinquina)
è un gioco da ragazzi.
La faccio con unica funzione, poi ti racconto.
Bruno