Oppure

Loading
26/04/09 3:12
Louis
Ciao,
non so se hai già risolto, ma considerato che mi sono occupato dell'ordinamento di matrici in un post di poco tempo fa, ti ho predisposto la seguente routine che ordina contemporanenamente i due vettore i cui componenti sono tra loro correlati:

Option Explicit
Option Base 1
Dim varNomeAssociato() As Variant
Dim varPuntiAssociato() As Variant
Dim intSub As Integer
'-----------------------------------
Private Sub Command1_Click()
    Call Associazione
End Sub
'-----------------------------------
Private Sub Associazione()

    varNomeAssociato = Array("Luca", "Marco", "Daniele", "Mattia", "Giovanni")
    varPuntiAssociato = Array(100, 85, 75, 96, 65)

'    For intSub = LBound(varNomeAssociato) To UBound(varNomeAssociato)
'        varNomeAssociato(intSub) = InputBox("Qual'é il nome dell'associato ?")
'        varPuntiAssociato(intSub) = InputBox("Quali sono i suoi punti ?")
'    Next intSub
    
    Call Ordina

    ReDim Preserve varNomeAssociato(LBound(varNomeAssociato) To UBound(varNomeAssociato))
    ReDim Preserve varPuntiAssociato(LBound(varPuntiAssociato) To UBound(varPuntiAssociato))
    
End Sub
'-----------------------------------
' Ordina le due matrici i cui componenti sono correlati:
Private Sub Ordina()
    Dim intMsg As Integer
    Dim i As Integer
    Dim temp As Long, temp2 As String

' Dispone un ordinamento crescente:
    For i = UBound(varPuntiAssociato, 1) To LBound(varPuntiAssociato, 1) Step -1
        For intSub = LBound(varPuntiAssociato, 1) To i - 1
            If varPuntiAssociato(intSub) > varPuntiAssociato(intSub + 1) Then
                temp = varPuntiAssociato(intSub)
                temp2 = varNomeAssociato(intSub)
                varPuntiAssociato(intSub) = varPuntiAssociato(intSub + 1)
                varNomeAssociato(intSub) = varNomeAssociato(intSub + 1)
                varPuntiAssociato(intSub + 1) = temp
                varNomeAssociato(intSub + 1) = temp2
            End If
        Next intSub
    Next i

'Visualizza i dati acquisiti:
    ' Inizializza il primo subscritto:
    intSub = 1
    Do
        intMsg = MsgBox("L'associato" & Space(1) & intSub & " é " & varNomeAssociato(intSub) & _
        Space(1) & " ed i suoi punti sono pari a" & Space(1) & varPuntiAssociato(intSub))
        intSub = intSub + 1
    Loop Until (intSub > 5)

End Sub


Non ho idea se la strada suggerita da theprogrammer (vettore di strutture) sia più performante, dato che non l'ho provata (mi riservo comunque di farlo per esperienza personale).
L'ordinamento impostato é cresente (nel tuo esempio da 75 --> 100 punti) e parrebbe funzionare; qualora sia indispensabile l'ordinamento decrescente, prova ad impostare If varPuntiAssociato(intSub) < varPuntiAssociato(intSub + 1) Then .
Ciao :k:
Ultima modifica effettuata da Louis 26/04/09 3:35
aaa
26/04/09 8:04
theprogrammer
Postato originariamente da Louis:
Non ho idea se la strada suggerita da theprogrammer (vettore di strutture) sia più performante, dato che non l'ho provata (mi riservo comunque di farlo per esperienza personale).



Non e' una questione di performance (che sono paragonabili) ma di semplicità e coerenza maggiori.

Se ci sono diversi dati da trattare come se fossero "campi" di una tabella di db (e quindi sono "legati" uno all'altro) allora la cosa piu' logica da fare e' gestire una "riga" (o un "record" se ti e' piu' familiare il termine) in forma di "struttura".

E il VB6 mette a disposizione gli statement Type..End Type appositamente.

Ciao
Ultima modifica effettuata da theprogrammer 26/04/09 8:23
aaa
26/04/09 9:33
Louis
Non e' una questione di performance (che sono paragonabili) ma di semplicità e coerenza maggiori. 


Ti ringrazio della precisazione, solo che il costrutto da te indicato non l'ho mai utilizzato per operazioni del genere (solitamente uso il DB). Sarebbe interessante un esempio !!
Ultima modifica effettuata da Louis 26/04/09 9:35
aaa
29/04/09 16:41
matto00
Manco a farlo apposta il giorno dopo della mia richiesta ho fatto a scuola il type ... end type, sono cmq riuscito a farlo in entrambi i modi! grazie
aaa
29/04/09 17:21
la struttura di record la feci la prima volta in pascal per le tabelle, ore le stiamo usando in vb per i file :)
eh si usando il record basta ordinare quelli che insieme al nome si muove anche il punteggio quindi easy :)