Newsgroup: it.comp.programmare
Titolo: vbscript: algoritmo per ordinare un array

qualcuno potrebbe postare o farmi sapere dove reperire l'algoritmo per
ordinare gli elementi di una matrice in ordine alfabetico?

 ordinare gli elementi di una matrice in ordine alfabetico?
L'algoritmo in concetti base te lo posso costruire io, tu poi devi tradurlo
in VB, ma non capisco la politica di ordinamento! Che senso ha ordinare una
matrice? Di che elementi? in che modo?
--
| /
| \Byte - Andrea Briganti
E-Mail 
kbyt...@freemail.it
ICQ 40872731


Ciao sto scrivendo da casa quindi ho un altro indirizzo.
Il problema è questo: devo ottenere un Recordset che abbia dei campi
provenienti da tabelle di diversi DB, quindi di diverse connessioni ADO.
Io ho pensato di convertire il recordset in matrice e poi sostituire il
campo con gli elementi a me necessari (e fin qui ci sono riuscito).
Ora il problema sarebbe quello di ordinare il mio recordset virtuale fatto
con matrice per il campo modificato. dovrei postarti la porzione di codice
riguardante la matrice per renderti le idee + chiare, ma al momento non mi è
disponibile vedrò di postarla domani grazie.

 disponibile vedrò di postarla domani grazie.
Guarda non riesco a capire!!!
Fai una cosa fai una matrice di esempio e di come deve essere ordinata!



questo è il pezzo di codice che utilizzo:
 'PROCEDURA MEDIANTE ARRAY
'inizializzo gli indici
intNumReturned=0
intNumFields=0
intField=0
intRecord=0
' inserisco il recordset in una matrice bidimensionale con GetRows.
'get rows mi crea gia bella e pronta una matrice con il contenuto del
recordset (che in questo caso ho chiamato rstins)
varRecords = rstins.GetRows
' Determina il n° max della seconda dimensione della matrice.
intNumReturned = UBound(varRecords, 2)
' Determina il n° max della prima dimensione della matrice.
intNumFields = UBound(varRecords, 1)
' riscrivo la tabella
For intRecord = 0 To intNumReturned
     For intField = 0 To intNumFields
     'se l'indice di campo è 3 (quindi 3 è l'indice che individua il campo
che io voglio cambiare nel recordset) inserisco al suo posto del testo
      if intField=3 then
        'prelevo e immetto in art_for il valore da sostituire
           art_for=varRecords(intField, intRecord) 'intField=3
        'immetto nel relativo campo il testo che mi occore (ricavato da un
apposita funzione denominazione) al posto del codice già presente nel campo.
           varRecords(intField, intRecord)=denominazione(art_for) '
denominazione () ricava da il codice art_for il testo che mi occorre
      end if
      Next
Next
----------------------------------------------------------------------------
----------
Spero che ti abbia reso le idee un po + chiare sul mio problema, cmq in ogni
caso ti ringrazio molto per l'interesse.
Grazie Ciao

 varRecords = rstins.GetRows
Questo lo avevo capito, quello che vorrei capire è secondo quale ordinamento
vuoi ordinarla! altrimenti non ha senso....
Guarda se ti può essere di aiuto un esempio su una matrice generica
considerando di volere ordinare le righe di una matrice bidimenzionale.
Uso una specie di metalinguaggio in pratica molto simile al c++,
l'interessante è capire la logica, puoi adattare a qualsiasi linguaggio.
Innanzitutto bisogna definire quando un elemento precede un altro.
Puoi creare allora una funzione che date due righe o il campo (i campi)
significativi di due righe possa dire quale dovrebbe precedere l'altra...
Ammettiamo che questa funzione sia:
bool precede(Riga uno, Riga due) /*restituisce true se uno <  due */
{
  /*fa quello che deve fare */
}
E una funzione per scambiare due righe:
void scambia(Riga& uno, Riga& due)
{
  /*fa quello che deve fare */
}
Per il metalinguaggio considero una funzione che restituisce una Riga dal
suo indice:
Riga dammiRiga(int i)
{
  /*fa quello che deve fare */
}
Si possono usare tanti algoritmi di ordinamento, io consiglio per questo
caso un boubble sort.
ATTENZIONE CONSIDERO CHE LE RIGHE VADANO DA 1 A MAX_NUM_RIGHE
int i = MAX_NUM_RIGHE;
int limite = i;
while(limite > 1) {
  int ultimoScambio = 1;
  for(int j = 1; j < limite; j++) {
    if(precede(dammiRiga(j+1), dammiRiga(j)) {
      scambia(j, j+1);
      ultimoScambio =  j;
    }
  }
  limite = ultimoScambio;
}
Spero di essermi spiegato
