Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Gennaio 24, 2021, 03:35:06 pm

Titolo: [Risolto] Ordinamento vettori
Inserito da: petrusic - Gennaio 24, 2021, 03:35:06 pm
Per cominciare,  :D
sto continuando l'impegno con la conoscenza di Pascal e, trovandomi nella necessità di dovere riordinare  la sequenza alfabetica degli elementi di un vettore, ho provato a cercare oggi una funzione già presente in Pascal, ma non l'ho trovata.
Mi pare poco probabile che non esista. In Gambas c'è ed in Pascal no?

Mi si può dire: Vabbè, e che problema c'è, fallo da te.
Si lo so, e so anche come fare. Non è quello che mi spaventa, ma non vorrei scoprire l'acqua calda.

Secondo me, dovrei aggiungere la "use" corretta, in modo da richiamarla al momento opportuno, più avanti, nel progetto.

Titolo: Re:Ordinamento vettori
Inserito da: Avogadro - Gennaio 24, 2021, 06:29:10 pm

https://wiki.freepascal.org/TStringList
Titolo: Re:Ordinamento vettori
Inserito da: Stilgar - Gennaio 25, 2021, 10:06:12 am
Ciao.
Non mi risulti che esista la possibilità di ordinare un vettore con funzioni già esistenti.


Esistono dei metodi per ordinare dentro i contenitori standard.


Implementano in genere il qsort. A questi metodi devi passare solo la funzione di confronto.


Eventualmente puoi cercare se per il template degli array (TArray<T>) esiste qualche classe helper che lo implementa.


Stilgar
Titolo: Re:Ordinamento vettori
Inserito da: nomorelogic - Gennaio 25, 2021, 10:56:02 am

quì c'è una possibile soluzione
è una libreria pascal con trilioni di utilità tra cui il sort di un array
https://github.com/fundamentalslib/fundamentals5/blob/master/Source/Utils/flcDynArrays.pas (https://github.com/fundamentalslib/fundamentals5/blob/master/Source/Utils/flcDynArrays.pas)
Titolo: Re:Ordinamento vettori
Inserito da: petrusic - Gennaio 25, 2021, 03:37:57 pm
Vi ringrazio tutti per la vostra solerzia.


quì c'è una possibile soluzione
è una libreria pascal con trilioni di utilità tra cui il sort di un array
https://github.com/fundamentalslib/fundamentals5/blob/master/Source/Utils/flcDynArrays.pas (https://github.com/fundamentalslib/fundamentals5/blob/master/Source/Utils/flcDynArrays.pas)

Anche se ho risolto in maniera artigianale l'ordinamento del mio vettore , per valore crescente, ho voluto provare richiamare una delle funzioni trovata nella libreria che mia hai suggerito: "DynArraySortA".
Per poterne disporre nel mio progetto ho inserito fra gli uses la libreria che la contiene (fundamentals5). Ho avviato la compilazione ed ho ottenuto un messaggio d'errore "Non trovato"

Penso perciò che ne farò a meno. Il segmento di istruzioni che ho scritto ha riordinato 872 righe in circa
"2 secondi".
Ecco la mia formula di ordinamento:
Codice: [Seleziona]
var
  tabSplit: TStringArray;

 xk: Integer = 0;
  j1: Integer = 0;
  j2: Integer = 1;         

striMia: String;

begin
.....
  while(j1 < (xk - 1)) do
              begin
              if (j1 = 91) then
                j1:= j1;
                if (LeftStr(tabSplit[j1], 12) > LeftStr(tabSplit[j2], 12)) then
                begin
                  striMia:= tabSplit[j1];                      //    )
                  tabSplit[j1]:= tabSplit[j2];                //    (   swap rudimentale
                  tabSplit[j2]:= striMia;                      //    (
                  j2:= j1 + 2;
                end
                else
                begin
                  j2:= j2 + 1;
                end;
                if (j2 >= xk) then
                begin
                  j1:= j1 + 1;
                  j2:= j1 + 1;
                end;
              end;
.....
end;                             
Titolo: Re:Ordinamento vettori
Inserito da: Stilgar - Gennaio 25, 2021, 11:39:43 pm
Lentino ... 2 secondi per così pochi elementi.


Stilgar