Nokioteca [Nokia] Forum: [mshell] Ordinare Matrice - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[mshell] Ordinare Matrice

#1 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 07 dicembre 2008 - 16:01

ho un array in forma di matrice
[[a,789,c,d],[a1,790,c1,d1],[a2,-30,c2,d2]];

devo ordinarlo secondo la grandezza del numero:

[[a2,-30,c2,d2],[a,789,c,d],[a1,790,c1,d1]];

non so quindi come usare la funzione array.isort/array.sort (mi dà errore perchè lavora soltanto con numeri o stringhe).

Messaggio modificato da Ra_ il 07 dicembre 2008 - 16:09

0

#2 L   masmil1988 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 1576
  • Iscritto: 03 dicembre 2005
  • Località:Alcamo (TP)
  • Cellulare:Nokia 5800
  • Firmware:51.0.006

Inviato 08 dicembre 2008 - 09:54

In che senso "secondo la grandezza del numero"?
0

#3 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 08 dicembre 2008 - 10:36

Visualizza Messaggimasmil1988, il 08/12/2008 - 09:54, ha scritto:

In che senso "secondo la grandezza del numero"?


nella matrice nella colonna due ci sono dei numeri. li devo ordinare dal più piccolo al più grande o dal più grande al più piccolo.
La funzione isort funziona però soltanto su numeri e stringhe.
0

#4 L   masmil1988 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 1576
  • Iscritto: 03 dicembre 2005
  • Località:Alcamo (TP)
  • Cellulare:Nokia 5800
  • Firmware:51.0.006

Inviato 10 dicembre 2008 - 14:56

Puoi usare Bubble Sort :-)
Sai come funziona?

Con mShell puoi scambiare tranquillamente di posto due righe all'interno di una matrice...
0

#5 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 10 dicembre 2008 - 16:02

Visualizza Messaggimasmil1988, il 10/12/2008 - 14:56, ha scritto:

Puoi usare Bubble Sort :-)
Sai come funziona?

Con mShell puoi scambiare tranquillamente di posto due righe all'interno di una matrice...

se mi posti la variante per mshell ti ringrazio =)
0

#6 L   masmil1988 

  • Millennium Member
  • Gruppo: Developer
  • Messaggi: 1576
  • Iscritto: 03 dicembre 2005
  • Località:Alcamo (TP)
  • Cellulare:Nokia 5800
  • Firmware:51.0.006

Inviato 10 dicembre 2008 - 18:47

Bubble sort
ordinato=false;
k=1
while ordinato=false do
  ordinato=true;
  for i=0 to len(matrice)-k-1 by 1 do
	if matrice[i][1]>matrice[i+1][1] then
	  tmp=matrice[i];
	  matrice[i]=matrice[i+1];
	  matrice[i+1]=tmp;
	  ordinato=false;
	end;
  end;
  k++;
end;


Non l'ho provato ma dovrebbe funzionare, il funzionamento generale di questo algoritmo è questo (valido per qualsiasi vettore non ordinato)...
Fammi sapere :D
0

#7 L   Ra_ 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 181
  • Iscritto: 24 agosto 2006
  • Cellulare:N73

Inviato 11 dicembre 2008 - 19:03

Visualizza Messaggimasmil1988, il 10/12/2008 - 18:47, ha scritto:

Bubble sort
ordinato=false;
k=1
while ordinato=false do
  ordinato=true;
  for i=0 to len(matrice)-k-1 by 1 do
	if matrice[i][1]>matrice[i+1][1] then
	  tmp=matrice[i];
	  matrice[i]=matrice[i+1];
	  matrice[i+1]=tmp;
	  ordinato=false;
	end;
  end;
  k++;
end;


Non l'ho provato ma dovrebbe funzionare, il funzionamento generale di questo algoritmo è questo (valido per qualsiasi vettore non ordinato)...
Fammi sapere :thumbs:


funziona perfettamente!
0

#8 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 27 settembre 2009 - 17:16

Visualizza MessaggiRa_, il 07/12/2008 - 17:01, ha scritto:

ho un array in forma di matrice
[[a,789,c,d],[a1,790,c1,d1],[a2,-30,c2,d2]];

devo ordinarlo secondo la grandezza del numero:

[[a2,-30,c2,d2],[a,789,c,d],[a1,790,c1,d1]];

non so quindi come usare la funzione array.isort/array.sort (mi dà errore perchè lavora soltanto con numeri o stringhe).

Probabilmente sono fuori tempo massimo! ma quando avete formulato detta domanda non bazzicavo ancora in Nokioteca...
Ufff! il solito pedante rompi b... Probabilmente Alter ha ragione...comunque,
TITOLO: A volte incasinarsi conviene!
Quanto sopra esposto va tutto bene, che sia il Bubble Sort, il Quick Sort, o altro ma solo se la matrice è composta da pochi elementi,

Per ordinare una matrice di 32000 elementi (o più) in mShell ci vuole mooolto tempo, è il limite di questi linguaggi.
Ogni volta che compie un ciclo di ordinamento l'interprete esegue una marea di verifiche per assicurarsi che non stiamo commettendo cavolate.

In questo caso ci vorrebbe un ordinatore scritto in C++ che non perde tempo in verifiche e se fatto da professionisti è in grado
di applicare l'algoritmo di ordinamento più idoneo e altri trucchi vari.

Già e dove lo pesco quel ordinatore? .array.isort A grullo! mo me fai vedè tu ad usarlo. Alter è inutile che insisti come dice "Ra_" non la si può usare direttamente su questo 'array a=[['a',789,'c','d'],['a1',790,'c1','d1'],['a2',-30,'c2','d2']]; ma...... su questo sì b=[789,790,-30];.
use array
b=[];
a=[['a',789,'c','d'],['a1',790,'c1','d1'],['a2',-30,'c2','d2']];  // il nostro array

// crea l'array b[] contenente solo i numeri interessati all'ordinamento
for c=0 to len(a)-1 do
  .append(b,a[c][1]);
end;

// eseguo l'ordinamento alla velocità della luce e assegno sempre a b[] non i numeri 789,790,-30 ma il loro ordine di precedenza
b=array.isort(b);

// a questo punto abbiamo una matrice indice sfruttabile per stampare i valori di a[] in ordine
for c=0 to len(a)-1 do
  print(a[b[c]][1]);
end;

// oppure possiamo trasferire in un altra matrice tutti i valori di a[] ma ordinati
d=[];
for c=0 to len(a)-1 do
 append(d,a[b[c]]);
end;
print d

Tutto questo crea e disfa può sembrare molto lento ma non è così. (Provare per credere.)
Spero di non aver annoiato nessuno...e se qualcuno conosce trucchi più potenti.....
Urka! era ora finalmete potrò gestire in modo veloce l'elenco delle mie sfinzie... Magari fossero così tante Alter...Magari... :)
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione