Newsgroup: it.comp.lang.visual-basic
Titolo: Cerco esempio sort matrice bidimensionale

Salve a tutti.
Devo ordinare una matrice bidimensionale arr(2, n) As Double in base alla
seconda colonna. Il problema è che non ho la minima pratica degli algoritmi
di sort.
Volevo implementare un QuickSort perchè ho trovato su Google diversi post di
gente che l'ha usato su matrici bidimensionali, ma non ne ho trovato uno per
VB, e non sono riuscito a capirne il meccanismo negli esempi di codice
scritti in altri linguaggi. Perfino su Wikipedia ci sono esempi per tutti i
linguaggi tranne VB.
Domanda: qualcuno conosce un link a un esempio di implementazione per VB, in
modo che posso capirne il funzionamento e implementarlo?
Grazie a tutti per l'attenzione.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 modo che posso capirne il funzionamento e implementarlo?
Io ti posso spiegare la teoria (un esempio sottomano non c'e l'ho). Metti di
voler ordinare la sequenza di numeri:
"1 6 7 5 3 4 1 8 7 5"
Il quick sort per prima cosa divide a metà i numeri mettendoli in due
categorie: quelli superiori e quelli inferiori a 5, quindi avremo:
"1 3 4 1" da una parte e "5 5 6 7 7 8" dall'altra.
Poi continua ricorsivamente a dividere a metà le due sotto-categorie
trovate.
"1 3 4 1" quindi viene diviso in due gruppi, uno superiore e l'altro
inferiore a 3, avremo quindi "1 1" e "3 4 1", mentre "5 5 6 7 7 8" viene
suddiviso in categoria superiore e inferiore a 7, quindi avremo
"5 5 6" da una parte e "7 7 8" dall'altra.
Si prosegue in questo modo fino ad ottenere un ordinamento completo.

di sort.
Ciao ciao
Sono poche ore che ho cominciato a dare un occhiata a Visual Basic per
cui non ho da insegnarti nulla, ma la tua domanda mi risulta strana.
Gli algoritmi di sort si usavano quando ancora non esistevano i DB,
con Visual Basic dovrebbe essere sufficente inserire la tua matrice in
un DB e creare una chiave sulla colonna da ordinare.
Se ho detto una cazzata dimmelo.
Jordy54
Clickare sotto per rispondere privatamente
http://www.mynewsgate.net/mp.php?u=17524

 Se ho detto una cazzata dimmelo.
Una cazzata no, ma è come comprare una corazzata per usarne
i cannoni per spiaccicare una formica. Funzionare funziona, e
magari prendere la mira non è neanche un problema, ma capisci
da solo che non è certo un metodo ottimale, né leggero.
*****************
Per yronium:
http://groups.google.com/groups?as_q=algoritmi+sort&as_ugroup=it.comp.lang.visual-basic
cerca un post di GbC.
Oppure: 
http://cfapps.scripps.com/Library/sorts.htm
Oppure il Sito Comune.
Oppure Planet Source Code :-P
Bye, G.

 Grazie a tutti per l'attenzione.
Che domande... il sito comune ;)
www.it-lang-vb.net
Ciao
-- 
Free .Net Reporting Tool - 
http://www.neodatatype.net
 


Ciao ciao
Ripeto che sono solo poche ore che ho cominciato a guardare VB.
Posso solo fare una questione filosofica.
VB č un linguaggio ad alto livello, che se non sbaglio con una
istruzione SQL si puň creare una tabella e con la seconda istruzione
ne creo la chiave..... e ho finito !!!!
Penso che implementare l'algoritmmo del Bubble sort sia veramente piů
complicato con il rischio di commettere errori nell'implementazione.
Inoltre si vuol praticare una programmazione a basso livello con VB
che a basso livello non lo č.
Se conosci VB mi potresti dare qualche dritta per indirizzarmi a
studiarlo, guadagnando tempo prezioso nella ricerca delle
informazioni.
Guarda il post sopra ho fatto una domanda alla quale Hall1961 non ha
voluto rispondere perchč non si vuole abbassare.
Sai la risposta.


 Sai la risposta.
Guarda, non è per cattiveria: a parte tutto il resto dei discorsi,
io e i DB non andiamo affatto d'accordo. Per la maggior parte
dei *miei* usi me la cavo molto meglio, molto più velocemente
con dei normali file a record.
Semplicemente non me ne intendo abbastanza per risponderti :-/.
Bye, G.

 gestisca una specie di paging traparente all'utente, è così ????
nel senso di ricevere un  certo  numero di righe per volta? si`, si
puo` fare, ma lo devi gestire tu perche` il  computer non sa quanti
dati vuoi per volta.
-- 
ciao, hal

dati vuoi per volta.
Quello che dici č quello che vorrei fare ma non corrisponde a quanto
ho letto: per esempio non ho trovato istruzioni per leggere un solo
record ?? non ho trovato istruzioni per leggere per chiave ???
Per essere piů chiaro ho realizzato un prog. che legge un DB e tramite
un bindingnavigator mi permette di scorrere tutti i record ma il
codice creato non contiene nessuna gestione dei record pari a come
dici tu, come dicevo c'č solo un comando fill che riempe il dataset,
il mio DB č di 1MB se fosse 10GB dovrebbe funzionare ugualmente,
quando ho creato la connessione mica mi ha chiesto quanto č grande il
DB.


con dei normali file a record.
Ciao ciao
Ma dimmi una cosa ...usi solo file sequenziali ??? se li devi ordinare
ti fai l'algoritmo di sort ????
Non sono daccordo con quello che hai detto.


 DB.
perche` non provi?
-- 
ciao, hal

 Oppure: 
http://cfapps.scripps.com/Library/sorts.htm
visto (e linkato il suo sito nei Preferiti). Il secondo link sembra non
funzionare. Ho cercato anche sul SitoComune ma non sono riuscito a trovare
nulla per VB, solo qualcosa per .Net, magari sono io che sono
handicappato....
Il problema è la seconda dimensione, anzi la seconda colonna della seconda
dimensione.
Invece, sempre googlando sono riuscito a trovare questo:
http://www.vba-programmer.com/Snippets/Code_Word/QuickSort_MultidimensionalArray_TwoLevels.html
dopo aver corretto un paio di errori va che è una meraviglia.
Grazie a tutti per l'interessamento. Ciao.


 dopo aver corretto un paio di errori va che è una meraviglia.
Uhm... questo me lo guardo io con calma, grazie della segnalazione :-).
Bye, G.

 Non sono daccordo con quello che hai detto.
Va bene così. Altrimenti non si chiamerebbe gruppo di discussione,
ma help-desk :-).
Bye, G.

 sempre ordinato.
questo papero e` una miniera :-)
mi illustreresti qualche dettaglio?  in pratica ti fai un indice dove
memorizzi le posizioni? (preventivamente preparate con spazio vuoto?)
-- 
ciao, hal

 memorizzi le posizioni? (preventivamente preparate con spazio vuoto?)
No, č un sistema ancora piů stupido :-)))
Immagina un bubble sort (lo so, lo so, anatema, anatema ! :-) ) ma usato
ogni volta che inserisco un record, quindi con un solo elemento alla volta.
In pratica, rileggo il file andando all'indietro dall'ultima posizione,
e ogni record lo sposto di una posizione 'piů in basso'; se la posizione č
quella giusta, posso inframmezzare il record nuovo e lasciare il resto
come sta. Naturalmente la cosa vale sia se sto lavorando su file che nel
caso stia usando i record nella loro brava matrice in memoria. In quel
caso, sostituisci il concetto di 'lettura da file' con 'scorrimento della matrice
in memoria'.
Oh, te l'avevo detto che era un metodo stupido :-)
Non č affatto efficiente, ma, per quel che vedo dai risultati, sempre piů che
passare da trecentotredici altri layer di applicativi e processi diversi, per
gestire quelle poche migliaia di record.
Un esempietto, tagliando definizioni, apertura files e tutto, lasciando
solo la parte in discussione:
***********************
      NumeroFilmInMemoria = NumeroFilmInMemoria + 1
      N = NumeroFilmInMemoria
      ' inutile fare la stessa conversione ogni volta
      FilmDaPiazzare = UCase$(Trim$(Scheda.NomeFilm))
       ' inizia il loop, che continua fino all'inizio del file, o fino a che
      ' non viene piazzata la scheda corrente
      Do While N > 1
           ' prende dalla fine del file una scheda (che č sicuramente vuota,
           ' nel caso dell'ultima, quindi prende quella prima)
           Get #NumeroDelFileCorrente, N - 1, SchedaTMP
          ' se il record non č vuoto...
          ' e se la posizione alfabetica della stringa č corretta...
           If InStr(SchedaTMP.NomeFilm, Chr$(0)) = 0 And _
            UCase$(Trim$(SchedaTMP.NomeFilm)) < FilmDaPiazzare Then
                ' piazza la scheda nella posizione giusta che ha appena trovato
                Put #NumeroDelFileCorrente, N, Scheda
                ' ok, č stata piazzata: mň me lo segno...
                BlnPiazzato = True
                ' ed esce dal loop
                Exit Do
           Else
                ' piazza la scheda temp una posizione piů in giů
                Put #NumeroDelFileCorrente, N, SchedaTMP
                ' e va indietro di uno
                N = N - 1
           End If
           ' niente di fatto, prova la prossima scheda
      Loop
      ' se non č stata ancora piazzata, e siamo usciti dal loop, puň voler
      ' solo dire che va prima di tutte le altre, quindi la piazziamo ora
      ' N naturalmente ora č 1.
      If BlnPiazzato = False Then Put #NumeroDelFileCorrente, N, Scheda
***********************
C'č un paio di cose che possono sembrare strane, lo so, ma hanno
il loro motivo per altre cose presenti nel programma :-).
Bye, G.

 gestire quelle poche migliaia di record.
osservazione pertinente,  soprattutto sono  rimasto sconcertato dalla
macchinosita` e dalla pesantezza degli oggetti .net.
l'idea comunque e` buona e credo che te la rub^K prendero` a prestito
-- 
ciao, hal

 Uhm... questo me lo guardo io con calma, grazie della segnalazione :-).
Come ti ripeto, funziona, ma viste le poco brillanti figurette fatte nei
post precedenti, adesso dubito anche di me stesso. In effetti, esegue
l'ordinamento, ma non sono sicuro che venga fatto in base alla seconda
colonna. Non ho avuto abbastanza tempo per fare tutte le prove.
Oggi c'è stata la presentazione della demo e anche se mi aspettavo peggio ne
sono uscito fisicamente a pezzi. Se poi subito dopo si aggiunge la festa di
Carnevale della bambina (chissà perché alle quattro di oggi tutti i
partecipanti alla presentazione, nessuno escluso, avevano fretta, mogli e
figlie mascherate che li aspettavano...), quando sono tornato a casa ho
dovuto cenare con un Aulin.
Vabbè, non c'entra una mazza, ma è la prima volta in 15 giorni che tiro il
fiato. Grazie ancora della considerazione, uno di questi mesi mi metto a
studiare il QuickSort per bene, promesso.
Ah, PS: sono completamente d'accordo con te sull'utilizzo dei file esterni
per pochi record, e io avrei fatto la stessa cosa, anche se magari per
scrivere le routine di inserimento ci avrei messo dei mesi.


 scrivere le routine di inserimento ci avrei messo dei mesi.
Routine ? =8-O
Open, seek, put, close, finito. Se guardi quello spezzone d'esempio,
ci sono più commenti che codice. Se serve altro, basta dirlo :-).
Bye, G.