Differenze tra le versioni di "Ordinare gli elementi dei membri vettoriali di una Struttura in base ad uno di loro"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Il caso in questione è qello in cui: * si ha una ''Struttura'', i cui membri sono dei vettori; * ogni elemento di un membro vettoriale è in stretta rapporto con l'elemento d...")
 
 
Riga 11: Riga 11:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim ri, nuova As New RISULTATI
 
   Dim ri, nuova As New RISULTATI
Riga 19: Riga 19:
 
    
 
    
 
  <FONT Color=gray>' ''Imposta i valori iniziali per entrambi gli array:''</font>
 
  <FONT Color=gray>' ''Imposta i valori iniziali per entrambi gli array:''</font>
  nomi = ["Aaaa", "Bbbb", "Cccc", "Dddd"]
+
  nomi = ["Aaaa", "Bbbb", "Cccc", "Dddd"]
  punteggi = [15, 32, 18, 50]
+
  punteggi = [15, 32, 18, 50]
  For b = 0 To nomi.Max
+
  For b = 0 To nomi.Max
    ri.nome[b] = nomi[b]
+
    ri.nome[b] = nomi[b]
    ri.punt[b] = punteggi[b]
+
    ri.punt[b] = punteggi[b]
  Next
+
  Next
 
    
 
    
 
  <FONT Color=gray>' ''Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo, che fa così da appoggio:''</font>
 
  <FONT Color=gray>' ''Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo, che fa così da appoggio:''</font>
  With bb = New Byte[]
+
  With bb = New Byte[]
    For b = 0 To ri.nome.Max
+
    For b = 0 To ri.nome.Max
      .Push(ri.punt[b])
+
      .Push(ri.punt[b])
    Next
+
    Next
    .Sort(gb.Descent)
+
    .Sort(gb.Descent)
  End With
+
  End With
 
    
 
    
  <FONT Color=gray>' ''Genera un nuovo vettore di tipo della Struttura "RISULTATI" contenente nei propri elementi''
+
  <FONT Color=gray>' ''Genera un nuovo vettore di tipo della Struttura "RISULTATI" contenente nei propri elementi le variabili del tipo Struttura "RISULTATI", "ordinati" in base al membro ".punt":''</font>
' ''le variabili del tipo Struttura "RISULTATI", "ordinati" in base al membro ".punt":''</font>
+
  For b = 0 To bb.Max
  For b = 0 To bb.Max
+
    For c = 0 To bb.Max
    For c = 0 To bb.Max
+
      If bb[b] = ri.punt[c] Then
      If bb[b] = ri.punt[c] Then
+
        With nuova  
        With nuova  
+
          .nome[b] = ri.nome[c]
          .nome[b] = ri.nome[c]
+
          .punt[b] = ri.punt[c]
          .punt[b] = ri.punt[c]
+
        End With
        End With
+
      Endif
      Endif
+
    Next
    Next
+
  Next
  Next
 
 
      
 
      
 
  <FONT Color=gray>' ''Verifica finale:''</font>
 
  <FONT Color=gray>' ''Verifica finale:''</font>
  For b = 0 To nuova.nome.Max
+
  For b = 0 To nuova.nome.Max
    Print nuova.punt[b], nuova.nome[b]
+
    Print nuova.punt[b], nuova.nome[b]
  Next
+
  Next
 
    
 
    
  '''End'''
+
  End

Versione attuale delle 04:19, 8 giu 2024

Il caso in questione è qello in cui:

  • si ha una Struttura, i cui membri sono dei vettori;
  • ogni elemento di un membro vettoriale è in stretta rapporto con l'elemento di un altro membro;
  • si intende ordinare gli elementi di ciascun membro, conservando ovviamente quello stretto legame.

Mostriamo un esempio pratico, nel quale, avendo una Struttura composta da due membri di tipo array in cui l'elemento dell'uno è correlato ad un elemento dell'altro membro, si intende ordinare gli elementi ovviamnete di entrambi i membri sulla base del membro vettoriale di tipo Byte:

Public Struct RISULTATI
  nome[4] As String
  punt[4] As Byte
End Struct


Public Sub Main()
 
 Dim ri, nuova As New RISULTATI
 Dim nomi As String[]
 Dim punteggi, bb As Byte[]
 Dim b, c As Byte
  
' Imposta i valori iniziali per entrambi gli array:
 nomi = ["Aaaa", "Bbbb", "Cccc", "Dddd"]
 punteggi = [15, 32, 18, 50]
 For b = 0 To nomi.Max
   ri.nome[b] = nomi[b]
   ri.punt[b] = punteggi[b]
 Next
  
' Passa il valore del membro oggetto dell'ordinamento ad un vettore di tipo omogeneo, che fa così da appoggio:
 With bb = New Byte[]
   For b = 0 To ri.nome.Max
     .Push(ri.punt[b])
   Next
   .Sort(gb.Descent)
 End With
  
' Genera un nuovo vettore di tipo della Struttura "RISULTATI" contenente nei propri elementi le variabili del tipo Struttura "RISULTATI", "ordinati" in base al membro ".punt":
 For b = 0 To bb.Max
   For c = 0 To bb.Max
     If bb[b] = ri.punt[c] Then
       With nuova 
         .nome[b] = ri.nome[c]
         .punt[b] = ri.punt[c]
       End With
     Endif
   Next
 Next
    
' Verifica finale:
 For b = 0 To nuova.nome.Max
   Print nuova.punt[b], nuova.nome[b]
 Next
  
End