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:
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
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
Ultima modifica effettuata da Louis 26/04/09 3:35
aaa