Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

[VBA] Combinazioni Semplici e con Ripetizione

  1. #1
    Una piccola Function di mia invenzione per calcolare tutte le Combinazioni Semplici di gruppo K ottenibili con un Array di N elementi :

     
    Public Function CombinazioniSemplici(arrayElementi() As Variant, dimensioneGruppo As Byte) As Collection
     
        Dim LC As New Collection
        If UBound(arrayElementi) = 0 Then
            Set CombinazioniSemplici = LC
        End If
        If dimensioneGruppo = 0 Or dimensioneGruppo > UBound(arrayElementi) Then
            Set CombinazioniSemplici = LC
        End If
        Dim aP() As Integer
        ReDim aP(dimensioneGruppo - 1)
        Dim i As Integer
        For i = 0 To UBound(aP)
            aP(i) = i
        Next i
        Dim j As Integer
        Dim C As String
        Dim cnt As Integer
        Do
            C = ""
            For i = 0 To UBound(aP)
                C = C & arrayElementi(aP(i))
            Next i
            LC.Add (C)
     
            cnt = 0
            For i = UBound(aP) To 0 Step -1
                If aP(i) = UBound(arrayElementi) - cnt Then
                    cnt = cnt + 1
                    If cnt = UBound(aP) + 1 Then Exit Do
                Else
                    aP(i) = aP(i) + 1
                    For j = 0 To UBound(aP)
                        If i < j Then aP(j) = aP(i) + (j - i)
                    Next
                    Exit For
                End If
            Next i
        Loop
     
        Set CombinazioniSemplici = LC
     
    End Function
    
    - Esempio di utilizzo ( output su ListBox ) :
     
        ListBox1.Clear
     
        Dim N() As Variant
        N = Array("a", "b", "c", "d")
        Dim K As Byte
        K = 3
     
        Dim Comb As Collection
        Set Comb = CombinazioniSemplici(N, K)
     
        Dim i As Integer
        For i = 1 To Comb.Count
            ListBox1.AddItem (Comb(i))
        Next i
     
        MsgBox Comb.Count
    
    Carina, no ?

  2. #2
    ... E questa invece, come da titolo, sulle Combinazioni con Ripetizione :

     
    Public Function CombinazioniConRipetizione(arrayElementi() As Variant, classe As Byte) As Collection
     
        Dim LC As New Collection
        If UBound(arrayElementi) = 0 Then
            Set CombinazioniConRipetizione = LC
        End If
        If classe = 0 Then
            Set CombinazioniConRipetizione = LC
        End If
        Dim aP() As Integer
        ReDim aP(classe - 1)
        Dim i As Integer
        Dim j As Integer
        Dim C As String
        Dim cnt As Integer
        Do
            C = ""
            For i = 0 To UBound(aP)
                C = C & arrayElementi(aP(i))
            Next i
            LC.Add (C)
     
            cnt = 0
            For i = UBound(aP) To 0 Step -1
                If aP(i) = UBound(arrayElementi) Then
                    cnt = cnt + 1
                    If cnt = UBound(aP) + 1 Then Exit Do
                Else
                    aP(i) = aP(i) + 1
                    For j = 0 To UBound(aP)
                        If i < j Then aP(j) = aP(i)
                    Next
                    Exit For
                End If
            Next i
        Loop
     
        Set CombinazioniConRipetizione = LC
     
    End Function
    
    - Ed esempio di utilizzo ( output su ListBox ) :
     
        ListBox1.Clear
     
        Dim N() As Variant
        N = Array("a", "b", "c", "d")
        Dim K As Byte
        K = 3
     
        Dim Comb As Collection
        Set Comb = CombinazioniConRipetizione(N, K)
     
        Dim i As Integer
        For i = 1 To Comb.Count
            ListBox1.AddItem (Comb(i))
        Next i
     
        MsgBox Comb.Count
    

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Ciao Marco.

    Non essendo un Post di aiuto che fai ma un suggerimento utile al Forum, perchè non raggruppi i tuoi 2 interventi in un unico da inserire nella SottoSezione "How to...." di questa sezione...?

    In questo modo rimarrà come proposta tecnica.
    ℹ️ Leggi di più su @Alex ...

  4. #4
    L'avatar di TheTruster
    TheTruster non è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Concordando con @Alex ho unito entrambe le discussioni in argomento di Combinazioni e le ho spostate nel sotto-forum VBA Tutorials & How-To.

    Marco, per favore, le prossime discussioni riguardanti tips o tutorial, inseriscile nelle apposite sezioni How-To.
    Dopo la valutazione da parte dei moderatori, saranno comunque visibili per tutti gli utenti del Forum.

    In questo modo possiamo tenere separate e ordinate le discussioni relative ai Tips, evitando di mescolarle con le discussioni per le richieste di aiuto.

    Grazie ancora per il contributo e per la collaborazione.

    TheTruster
    ℹ️ Leggi di più su TheTruster ...

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Quote Originariamente inviato da TheTruster Visualizza il messaggio
    Concordando con @Alex ho unito entrambe le discussioni in argomento di Combinazioni e le ho spostate nel sotto-forum VBA Tutorials & How-To.

    Marco, per favore, le prossime discussioni riguardanti tips o tutorial, inseriscile nelle apposite sezioni How-To.
    Dopo la valutazione da parte dei moderatori, saranno comunque visibili per tutti gli utenti del Forum.

    In questo modo possiamo tenere separate e ordinate le discussioni relative ai Tips, evitando di mescolarle con le discussioni per le richieste di aiuto.

    Grazie ancora per il contributo e per la collaborazione.

    TheTruster
    Grazie TT in effetti avrei potuto fare il Mix anch'io... proprio non ci ho pensato...!
    ℹ️ Leggi di più su @Alex ...

  6. #6
    Chiedo scusa.
    Grazie per la correzione.
    Il fatto è che l'icona messaggio mi ha tratto un po' in inganno e pensavo si potessero inserire "threads propositivi"...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Decodificare semplici operazioni
    Da systemgvp nel forum Delphi
    Risposte: 3
    Ultimo Post: 16-12-2016, 18:33
  2. ripetizione
    Da sistemista nel forum Pausa caffè
    Risposte: 1
    Ultimo Post: 26-09-2010, 10:45
  3. [C] Ottimizzazione di semplici programmi
    Da jmimmo82 nel forum C/C++
    Risposte: 5
    Ultimo Post: 27-12-2009, 00:04
  4. 2 semplici domande
    Da Mauro T nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 21-07-2008, 11:04
  5. Semplici domande Newbie!
    Da Maphia nel forum Tutto Linux
    Risposte: 5
    Ultimo Post: 28-12-2004, 02:14