[[Utente:Blakwolf|<font color=black size +1>'''BW'''</font>]] [[Discussioni utente:Blakwolf|Insultami ]] 09:27, Nov 29, 2004 (UTC)
[[categoria: discussioni aperte]] ▼
== ERRORI ??? ==
* Non saprei, la parola chiave ''register'' in effetti ''lascia'' fare al compilatore (il suo significato letterale potrebbe essere reso con: "questa variabile verrà usata molto frequentemente nelle prossime istruzioni, se possibile sarebbe utile mantenerla in un registro di CPU"... [[Utente:Moongateclimber|Moongateclimber]]<br/>
** Mi pare che così com'è il programma non funzioni. Credo sia fondamentale che i due cicli abbiano andamento opposto: una sale e l'altro scende. Consiglio di guardare [http://wikisource.org/wiki/bubble_sort qui]. bye [[Utente:DanGarb|DanGarb]] 10:49, Lug 21, 2005 (CEST)<br/>
***Non e'è necessario che gli andamenti siano opposti; su molti libri l'algoritmo viene riportato con i 2 cicli in uguale direzione. Ogni ciclo interno posiziona nella cella definitiva ''almeno'' uno dei valori non ancora a posto. Purche' il ciclo esterno comporti N iterazioni (dimensione array), alla fine tutti gli elementi sono a posto. Il ciclo inverso rende semplicemente piu'più semplice esprimere gli indici di partenza e di arrivo dei confronti.[[Utente:Moongateclimber|Moongateclimber]]<br/>
*** Il programma in C così com'è non funziona. Basta applicarlo al seguente array : [2,1] oppure a [3,2,1] . Un bug banale dipende dal fatto che l'elemento 0 non viene mai toccato. Anche correggendo questo piccolo bug però il programma non funzionerebbe comunque poichèpoiché il primo elemento verrebbe scambiato al più una sola volta. IMHO i due cicli devono essere opposti, anche se devo ammettere che sono anni che non leggo libri di informatica. bye [[Utente:DanGarb|DanGarb]] 11:31, Lug 21, 2005 (CEST)<br/>
****Sulla cella 0 avevi chiaramente ragione, sui cicli invertiti posso dirti... fidati! Spiego il bubblesort in corsi di C da anni, ce ne sono N varianti equivalenti da tutti i punti di vista. Vero che forse sarebbe piu'più chiaro che tutti gli esempi di codice si rifacessero alla stessa versione (cosa che adesso non e'), e magari potrei aggiungere una sezione ''varianti e ottimizzazioni''... che ne dite?[[Utente:Moongateclimber|Moongateclimber]]
***** Scusate se insisto, fidarsi è bene ma non fidarsi è meglio :-]. Insisto perchèperché dal mio punto di vista è palese che il programma in C non faccia il suo dovere, ovvero non ordini i vettori. Per una verifica certa occorrerebbe implementarlo e testarlo. Qui proverò con qualche ragionamento e con un controesempio a convincervi: (anche se contrariamente a quanto ho detto prima, il programma può essere implementato con entrambi i cicli crescenti; in questa maniera :'''for (b=0; b<elemN-a-1; ++b)'''). Il ragionamento che confuta l'attuale versione: per ''a=0'' il primo elemento dell'array è confrontato col secondo ed eventualmente scambiato; per i successivi valori di ''a'' il primo elemento non viene più toccato... quindi ==> se l'elemento minore del sistema non è in prima o seconda posizione ne consegue che non potrà mai arrivare in prima posizione. Il controesempio : array = (2,3,1) a=0 b=0 --> (''2'',''3'',1) a=0 b=1 (2,''1'',''3'') --> a=1 b=1 (2,''1'',''3'') --> fine programma . Bye [[Utente:DanGarb|DanGarb]] 13:40, Lug 21, 2005 (CEST)
******Scusami, hai assolutamente ragione anche questa volta. Il problema e'è che se entrambi i cicli vanno in avanti, quello + interno dovrebbe avere una forma del tipo: "for(b=0; b<nElem-1; b++)", o ancora meglio (ottimizzato) "for(b=0; b<nElem-1-a; b++)", cioe' l'indice deve partire da 0 (non da a). Ho avuto un po' fretta nel risponderti, chiedo venia :-((
****** A questo punto direi che siamo d'accordo Moongateclimber. :-) . Lascio comunque l'indicazione ''da controllare'' perchèperché sarà opportuno dare un'occhiata anche agli altri linguaggi. Da una prima occhiata veloce, per quel che capisco qualche bug è ancora presente. Ora non ho tempo, spero di riuscire a darci un'occhiata più tardi. Mi sembri un esperto del ramo. Se hai tempo dacci un'occhiata anche tu. Alla prossima [[Utente:DanGarb|DanGarb]] 15:13, Lug 21, 2005 (CEST)
Prego, accomodati. se la pagina viene esageratamente lunga, si fa un articolo a parte, tipo [[Varianti del Bubblesort in C]], e si inserisce prima del codice la nota
Ho modificato di nuovo il codice C, ora e'è molto piu'più coerente con la descrizione
--[[Utente:Bermas66|bermas66]] 19:16, Lug 21, 2005 (CEST)
Sono d'accordo con te, su tutti i punti. Inoltre credo che la struttura del programma debba essere la stessa in tutti i linguaggi. Eventualmente si potrebbe scegliere il C per inserire anche una versione ottimizzata. bye [[Utente:DanGarb|DanGarb]] 08:54, Lug 22, 2005 (CEST)
▲[[ categoriaCategoria: discussioni aperte]]
|