---++ Domande Homework 5 - Torri di Hanoi - (funzioni ricorsive) * Inserite le vostre domande usando la form [[#form][in fondo alla pagina]] * Vedi anche HomeWork5, SoluzioneHomework5, RisultatiHomework5. ---- %TOC% ---- ---- ---+++ Qualche domanda 1-Non ho capito bene il primo programma, quello con la funziona Hanoi e poi l'if-else. Noi in pratica dobbiamo fare la funzione ricorsiva ke "sposta n dischi dal piolo sorg al piolo dest, usando il piolo aux come appoggio" e poi usare questa funzione all'interno del nostro programma anke per aux->sorg per arrivare al dest (suppongo di si)? Poi...quella parte dell'if-else, dobbiamo usarla nel nostro programma? Se dobbiamo usarla...nn capisco l'utilità della printf...nell'esempio di output nn viene stampata la frase "Sposta da qui a lì ecc". 2-Chiamata Iniziale: vale a dire la formattazione ke dobbiamo dare noi all'interno del programma per far funzionare il tutto? Quindi inizialmente hanoi(0,1,2, ndiski)...e poi una volta ke tutti i diski sono messi nell'ausiliario hanoi(1,0,2, ndiski)? 3-In pratica dobbiamo usare liste di interi ke si accorciano(e poi diventano NULL) e ke (da NULL) si allungano? -- Comment added by Users.DavidVulpetti on 30 Nov 2003 ---- ---++++ Re: Qualche domanda Il programma di esempio mostra come vanno spostati i dischi e stampa quale mossa eseguire passo per passo. Voi dovete modificarlo in modo da poter stampare qual'è, ad ogni mossa, il contenuto dei tre pioli. La chiamata iniziale (hanoi(0,1,2,N)) fa tutto da sola, non c'e' bisogno di chiamare hanoi due volte (ci pensa hanoi stessa a fare le due chiamate usando il piolo di appoggio). In pratica potete usare sia liste puntate che array dinamici. (cercate di imparare le liste puntate) -- Comment added by Users.AndreaSterbini on 01 Dec 2003 ---- ---+++ Non c'entra molto con Formula1: il libro di Tronci Scusate se faccio questa domanda che non c'entra con l'homework (ma su questa pagina dovreste leggerla), ma mi chiedevo se qualcuno sa che libri usa Tronci. Il nostro Deitel&Deitel non gliel'ho mai visto usare, piuttosto usa "linguaggio C"(Kernighan - Ritchie) ed un altro di cui non so il nome e che invece vorrei sapere se qualcuno di voi lo sa. Grazie! -- Comment added by Users.CleoniceMansillo on 01 Dec 2003 ---- ---+++ ...ehm.. ERRATA CORRIGE della domanda sopra volevo dire "...con le torri di Hanoi" , ho ancora in mente l'altro homework. (una notte l'ho anke sognato!) -- Comment added by Users.CleoniceMansillo on 01 Dec 2003 ---- ---++++ Re: ...ehm.. ERRATA CORRIGE della domanda sopra ... che incubo! :-) -- Comment added by Users.AndreaSterbini on 01 Dec 2003 ---- ---+++ Menomale.. ..che la funzione già ce l'abbiamo fatta :) -- Comment added by Users.DaniloRossi on 01 Dec 2003 ---- ---+++ Re:Menomale.. Ce l'abbiamo già fatta? Mi sfugge qualcosa di questo esercizio...io sto pensando a un modo a come farla veramente.. -- Comment added by Users.DavidVulpetti on 01 Dec 2003 ---- ---++++ Re: Beh..pensa se dovevamo trovarcela da soli la funzione che ti dice passo passo quali spostamenti fare tra i vari pioli..non è poco avercela già. -- Comment added by Users.DaniloRossi on 01 Dec 2003 ---- ---+++ Re: eh si ho capito...infatti stavo diventando matto..ma dove sta la funzione? :) -- Comment added by Users.DavidVulpetti on 02 Dec 2003 ---- ---+++ Re:Consegna Guarda che sta scritto nella webhome dove c'e' "Date e scadenze" -- Comment added by Users.CleoniceMansillo on 02 Dec 2003 ---- Pero' e' anche vero che non era scritto nella pagina in cui e' descritto l'homework -- Comment added by Users.CleoniceMansillo on 02 Dec 2003 ---- Ma queste frasi le avevo scritte in un'altra pagina! perche' e' stata scritta qui? -- Comment added by Users.CleoniceMansillo on 02 Dec 2003 ---- ---+++ Liste Esempio X il prof Volevo sapere X defenire una lista ho sempre bisogno di struct la quale è composta di un campo info(numero) del campo next(che mi dice dove l'elemento succ. della lista) e di un campo prec che mi dice la locazione di memoria dell'elemento precedente. Es: ------------------------------------------------------- struct hanoi { int info; struct hanoi * prev; struct hanoi *next; }; E' così ho sbaglio? tutto ciò lo devo fare per tre liste(pioli del gioco) di interi? Vorrei questo chiarimento. Grazie. -- Comment added by Users.DarioFiorenza on 02 Dec 2003 ---- ---+++ Piccolo Bug Ho riscontrato un piccolo bug, se si introducono 0 dischi il programma va in loop. Dobbiamo gestire il caso di zero dischi? Poi volevo solo qualche informazione in più sulla formattazione è così? <br> 0:(spazio)(spazio)(spazio)disco(spazio)(spazio)(spazio)disco...<br> 1:(spazio)(spazio)(spazio)disco(spazio)(spazio)(spazio)disco...<br> 2:(spazio)(spazio)(spazio)disco(spazio)(spazio)(spazio)disco...<br> oppure gli spazi sono due come nell'esempio cioè<br> 0:(spazio)(spazio)disco(spazio)(spazio)disco...<br> .<br> .<br> .<br> <br><br>e poi c'è il tab tra i pioli e i dischi? Grazie -- Comment added by Users.AlessioDiMauro on 02 Dec 2003 ---- ---+++ Due domande: 1- Anche io volevo sapere come gestire il caso dello zero..si può comunque aggirare in base a come implementiamo la cosa..però volevo sapere come trattarlo, cioè se uscire e basta o stampare i tre pioli vuoti. 2- Per l'input non dobbiamo usare prompt, come al solito? Cioè, lancio il programma, metto un numero, premo invio, e il programma mi stampa tutto il resto? -- Comment added by Users.DaniloRossi on 02 Dec 2003 ---- Caso dello Zero Se pensate lo zero come uno spazio vuoto deve uscire senza stampare niente almeno credo che sia così Poi per sicurezza aspetterò anche io la risposta del prof ma alla fine penso che bisogno c'è di stampare i tre pioli visto che sono <b>tutti e tre vuoti</b> non lo pensi? :-) P.s. mi sa anche che rischieresti un segmentation fault. Xche sarebbe assurdo allocare memoria fissa,ma allocare la memoria che ti serve x i dischi e x gli scambi dalla sorgente all'appoggio fino al piolo finale. -- Comment added by Users.DarioFiorenza on 02 Dec 2003 ---- Non rischi nessuna segmentation fault e stampare i pioli vuoti avrebbe un suo senso :p -- Comment added by Users.AlessioDiMauro on 02 Dec 2003 ---- Voglio il mio avvocato :P :) Era per dare un'alternativa all'uscire senza stampare niente, per me una vale l'altra. Cmq stampare i pioli vuoti nn darebbe niente, perchè sarebbero solo printf senza allocare nulla. -- Comment added by Users.DaniloRossi on 02 Dec 2003 ---- ---+++ Mosse Wow, queste torri sono veramente dispendiose! Il numero di mosse necessario per risolvere uno status di partenza con n_dischi dischi è pari a n_mosse = 2<SUP>n_dischi</SUP> - 1 Cavolo, la leggenda quindi dice che l'Universo durerà ancora circa 51.240.000 miliardi di anni. Da tutto questo mi chiedo... ma a quell'epoca già fumavano così pesante?... <IMG SRC="http://heyaaa.united.net.kg/superlol.gif"> -- Comment added by Users.OliverTran on 03 Dec 2003 ---- ---++++ Re: Liste Esempio X il prof Scusami, ma l'esercizio lo devi fare tu :-) ---++++ Re: Due domande: Il caso dello zero corrisponde a mostrare i pioli vuoti e uscire. No prompt. -- Comment added by Users.AndreaSterbini on 03 Dec 2003 ---- ---++++ Tnx Allora lancio il programma, inserisco un numero (il numero dei dischi) premo invio e il programma stampa il resto..lo modifico. Grazie prof. -- Comment added by Users.DaniloRossi on 03 Dec 2003 ---- ---+++ Printf di Output Lo spazio tra il piolo e i dischi sono tre spazi vuoti oppure è una tabulazione? Se è una tabulazione, usando l'opzione "\t" nella printf non ottengo il risultato sperato... -- Comment added by Users.LivioDellaCorte on 04 Dec 2003 ---- ---+++ Errore: Scusate sapete mica perche quando faccio: "LISTA temp; temp=malloc(sizeof(listaNode));" Mi da questo tipo di errore: "ANSI C---++ forbids implicit conversion from `void *' in assignment"? -- Comment added by Users.DaniloDauria on 04 Dec 2003 ---- ---+++ Re:Errore: malloc() restituisce un puntatore a void, quindi, se non sbaglio, dovresti fare: LISTA *temp = malloc(...); se LISTA è del tipo struct listaNode. -- Comment added by Users.BeniaminoLarocca on 04 Dec 2003 ---- ---++++ Re: Errore: hai incluso il file stdlib.h ? LISTA e' un puntatore o una struct? dev'essere un puntatore. -- Comment added by Users.AndreaSterbini on 04 Dec 2003 ---- ---++++ Re: Printf di Output Ho corretto l'esempio (twiki trasforma 3 spazi in un tab). Scrivete ogni numero del disco formattato a destra in un campo da 3 caratteri (studiatevi *man printf* ). -- Comment added by Users.AndreaSterbini on 04 Dec 2003 ---- ---+++++ Re: Re: Printf di Output Nel caso che i dischi siano 11, è giusta questa formattazione per i primi due output? <pre> 0: 11 10 9 8 7 6 5 4 3 2 1 1: - 2: - 0: 11 10 9 8 7 6 5 4 3 2 1: - 2: 1 </pre> (Nell'esempio dell'homework5 manca in testa, il numero di dischi inserito) -- Comment added by Users.LivioDellaCorte on 04 Dec 2003 ---- Infatti quello è un esempio di output e non di input :p ---+++ Ancora qualche problemino di output cona la frase <b>Scrivete ogni numero del disco formattato a destra in un campo da 3 caratteri </b> si intende la funzione di printf cioè: <br> se il numero e di un carattere stampiamo spazio spazio numero<br> se è di due caratteri spazio 1°cifra 2°cifra<br> se è di tre (trooooppe mosse :p) 1°cifra 2°cifra 3°cifra questo ho capito, è esatto? Grazie -- Comment added by Users.AlessioDiMauro on 04 Dec 2003 ---- <font size=1>Infatti quello è un esempio di output e non di input</font> Ma per prendere l'input non devi fare una scanf? E dopo che digiti il numero di dischi, quel numero non ti va in output? :P <BR> <IMG src="http://www.math.it/images/hanoi.gif"> -- Comment added by Users.LivioDellaCorte on 04 Dec 2003 ---- eh eh che pignolo cmq è possibile leggere input anche senza echo :P -- Comment added by Users.AlessioDiMauro on 04 Dec 2003 ---- ---++++ Errore %RED% *ho tolto il codice ... non vi azzardate più a inserire codice che altri potrebbero copiare* %FINE% Ecco il codice, a me sembra giusto, anche perche la funzione insertTail non l'ho fatta io ma l'hanno fatta a lezione -- Comment added by Users.DaniloDauria on 04 Dec 2003 ---- ---++++ Re: Re: Re: Printf di Output OK -- Comment added by Users.AndreaSterbini on 04 Dec 2003 ---- ---++++ Re: Ancora qualche problemino di output esatto -- Comment added by Users.AndreaSterbini on 04 Dec 2003 ---- ---+++ Codice Guardi che il codice lo avete inserito voi su questo sito mica me lo sono inventato io, non c'entra niente con l'esercizio. A sto punto dovete togliere anche quel file con le funzione o_O -- Comment added by Users.DaniloDauria on 04 Dec 2003 ---- cmq io non posso fare esercizi sulle liste se non risolvo questo problema :( dato che il programma non viene proprio compilato! Aiutatemi pls! -- Comment added by Users.DaniloDauria on 04 Dec 2003 ---- risolto -- Comment added by Users.DaniloDauria on 04 Dec 2003 ---- ---+++ Ho capito finalmente come funzionano ste benedette liste!!! Ora devo mettere in paratica ciò che ho capito. 1 domanda ma l'input come deve essere? Noi inseriamo dati finchè non inseriamo un newline? o uno zero? -- Comment added by Users.DarioFiorenza on 04 Dec 2003 ---- ---+++ Non c'entra nulla con l'esercizio... e' solo curiosita'... Come si fa a calcolare le mosse che ci vogliono per spostare i 64 dischi? C'e' una formula precisa? E poi chi l'ha detto che siamo al sicuro...? Se i monaci stanno spostando dischi da 584 miliardi 999 milioni 999999 anni e 364 giorni, non credo che riusciremo a consegnare l'esercizio... -- Comment added by Users.StefanoGiachetti on 04 Dec 2003 ---- ---+++ Segmentation fault... Dannato segmentation fault... -- Comment added by Users.DavidVulpetti on 04 Dec 2003 ---- non credo ke 584 miliardi di anni fa esistevano i monaci :) -- Comment added by Users.DavidVulpetti on 04 Dec 2003 ---- ---+++ Monaci e mosse... Chi lo sa'... Puo' darsi che ce n'erano giusto un paio che servivano proprio per questo, spostare i dischi d'oro per fare i cronometristi del mondo... :-) Anche se a ben vedere per spostare il disco piu' grande ce ne voleva un po' piu' di un paio... (a meno che non fossero belli forzuti...). Il modo per trovare le mosse necessarie(l'ho letto solo ora, sorry), ricorda molto quello della leggenda sull'invenzione degli scacchi e dei chicchi di riso doppi per ogni casella successiva... -- Comment added by Users.StefanoGiachetti on 04 Dec 2003 ---- ---+++ Sull'output.. Sto facendo confusione: 1) devo fare una printf del tipo "<spazio><spazio><spazio>%d" dove in %d va il numero (e quindi se il numero è di due cifre, queste vengono stampate 'comunque' dopo tre spazi).. ..oppure.. 2) devo fare una printf in un campo di 3 spazi, per cui se il numero è una cifra viene come sopra, mentre se è di due cifre viene <spazio><decine><unità>? O_o -- Comment added by Users.DaniloRossi on 04 Dec 2003 ---- ---++++ Re: E' venuto sfasato il post perchè avevo messo i tag. Cmq come non detto, ho riletto bene, in pratica se ho un numero di due cifre mi verrà uno spazio, le decine e le unità..ovvero formattato a destra in un campo di 3 spazi. Ho fatto tutto da solo, pardon :) -- Comment added by Users.DaniloRossi on 04 Dec 2003 ---- ---++++ Re: Input L'input e' solo un numero che indica quanti dischi ci sono. ---++++ Re: numero di mosse totali Vediamo un po': * se va mosso un solo disco si fa una sola mossa * altrimenti ne vanno mossi N e questi si spostano: * spostando N-1 dischi sul piolo di appoggio * spostando il disco * spostando N-1 dischi dal piolo di appoggio alla destinazione Quindi la funzione F(N) che indica quante sono le mosse dovrebbe essere definita cosi': * F(1) = 1 * F(N) = 1---+ 2*F(N-1) Ad esempio: | *N* | *F* | | 1 | 1 | | 2 | 3 | | 3 | 7 | | 4 | 15 | | ... | ... | | n | 2^n-1 | ---++++ Re: Sull'output.. la seconda che hai detto. -- Comment added by Users.AndreaSterbini on 05 Dec 2003 ---- ---+++ Occhio all'OUTPUT! Io mi sono dannato l'anima perchè non mi funzionava il programma, fino a che non ho capito che era colpa dell'output che era sballato, mentre l'algoritmo era corretto e funzionava, per cui attenti a cosa stampa ;) PS: per fare una prova ho elaborato una torre da 20 dischi, mi è uscito un file di testo da quasi 78 Mb! :p -- Comment added by Users.StefanoNoffke on 05 Dec 2003 ---- ---+++ Sempre sull'output.. Mi sta stressando questo output :) ma tra lo 0, 1, 3 e i duepunti (cioè l'inizio dei pioli, 0: 1: 2:) ci va uno spazio (come nel testo dell'homework '0 :') o no (come in un es qui sopra che il prof ha detto essere corretto '0:')?? -- Comment added by Users.DaniloRossi on 05 Dec 2003 ---- ---++++ Re: 78 MB Ci credo, 2^20-1 sono circa 2 milioni di mosse! ---++++ Re: Sempre sull'output.. Fa fede l'esempio nella pagina dell'esercizio. -- Comment added by Users.AndreaSterbini on 05 Dec 2003 ---- ---+++ Ok, allora '0 :' ecc, grazie :) -- Comment added by Users.DaniloRossi on 05 Dec 2003 ---- ---+++ memoria&output scusi, non sono chiare due cose: (1) quando lei dice "Per motivi pratici, formattate l'output scrivendo il numero del disco a destra di uno spazio di 3 caratteri" intende dire che bisogna stampare una cosa del tipo: 0 : 4 3 2 1 ? (cioe' cn tre spazi prima dello zero) (2) una volta terminata con successo l'esecuzione del programma devo liberare la memoria? adios ocram -- Comment added by Users.MarcoValerioBarbera on 06 Dec 2003 ---- ---+++ errata corrige e' venuto scritto male l'esempio di output.. cmq volevo dire: spazio,spazio,spazio,numerodisco,duepunti ecc ecc.. :D -- Comment added by Users.MarcoValerioBarbera on 06 Dec 2003 ---- ---+++ Re: errata corrige a quanto ho capito io l'output deve seguire questo schema: {numero_torre}{spazio}{duepunti} seguito da una serie di campi di 3 caratteri contenenti la dimensione del disco, ad esempio una torre da 10 dischi sarà {numero_torre}{spazio}{duepunti}{spazio}{uno}{zero}{spazio}{spazio}{nove}...{spazio}{spazio}{uno} -- Comment added by Users.StefanoNoffke on 06 Dec 2003 ---- ---+++ Mandrake 9.2 in edicola Per chi non avesse ancora relegato Windows in un anfratto del hard disk comunico che la Mandrake 9.2 è in edicola con *Linux Magazine*. <verbatim> Nota: anche per chi, come me, preferisce un'altra distro, a volte può essere utile provare le distro più aggiornate, infatti provando la Mandrake sono riuscito a resuscitare il mio pen drive, malamente formattato da Windows. </verbatim> -- Comment added by Users.EmanueleQuattrini on 06 Dec 2003 ---- Pen drive? ---- ---++++ Re: memoria&output Ma l'esempio che sta scritto nel test dell'esercizio, a che serve? Liberare la memoria fa sempre bene. -- Comment added by Users.AndreaSterbini on 07 Dec 2003 ---- ---+++ Segmentation Fault E' già da un po' che sto girando appresso a questo errore, ho usato anche il gdb, che mi ha, a piacimento, segnalato un segmentation fault un po' a destra e a manca nella funzione che dovrebbe spostare un disco da una paletto ad un altro, senza mai individuarne una precisa. Cosa strana è che i blocchi di istruzioni li ho importati da un precedente programma che mi ero scritto per studiare le liste e che non dava alcun errore. Poi si è aggiunta questa cosa da parte del gdb:<br><br> 59 currPtr->nextPtr = newPtr;<br> (gdb) si<br> 63 }<br> (gdb) ni<br> hanoi (sorgPtr=0xbffff69c, auxPtr=0xbffff6a0, destPtr=0xbffff698, n=1) at hanoi.c:76<br> 76 }<br> (gdb)<br><br> Program received signal SIGSEGV, Segmentation fault.<br> 0x00000000 in ?? ()<br> (gdb)<br> Cannot find bounds of current function<br> (gdb)<br> Cannot find bounds of current function<br> (gdb)<br> Cannot find bounds of current function<br> (gdb)<br> Cannot find bounds of current function<br> (gdb)<br> Cannot find bounds of current function<br> (gdb) ni<br><br> Program terminated with signal SIGSEGV, Segmentation fault.<br> The program no longer exists.<br><br> Ma che gli è preso, qualcuno può aiutarmi? -- Comment added by Users.OliverTran on 08 Dec 2003 ---- ---+++ Ancora sull'output L'esercizio è fatto ma ho qualche dubbio sull'output. I pioli stanno attaccati allo schermo o ci deve essere dello spazio? La distanza tra i numeri è fissa o dipende se il numero è ad una o piu cifre? Buon lavoro a tutti!(Per la fine del mondo non c'è da preoccuparsi i dischi sono troppi perciò si sbagliano pure a metterli!) -- Comment added by Users.JacopoBusso on 08 Dec 2003 ---- ---+++ Numero dischi Come deve essere preso il numero dei dischi? Dalla riga di comando? Con una "scanf"? Oppure va specificato all'interno del programma? -- Comment added by Users.DanieleAmadio on 08 Dec 2003 ---- ---+++ re: Numero dischi il numero dei dishi va preso con una scanf -- Comment added by Users.AhmedGaberHaiba on 09 Dec 2003 ---- ---+++ help volevo qualche consiglio sull algoritmo da sviluppare: è una buona idea quella di inserire in hanoi una funzione che scambia i dischi da una lista all altra(pioli). grazie,comunque mandrake 9.2 è favoloso -- Comment added by Users.StefanoGuglielmi on 09 Dec 2003 ---- ---+++ sorry è il primo post che lascio... -- Comment added by Users.StefanoGuglielmi on 09 Dec 2003 ---- ---++++ Re: Segmentation Fault Normalmente il Segmentation Fault nasce dalla dereferenziazione di un puntatore non valido, nel tuo caso mi sembra che tu cerchi di deref. un puntatore NULL. ---++++ Re: Ancora sull'output Come già detto, stampate ciascun numero di disco in un campo largo 3 caratteri. ---++++ Re: help Sì -- Comment added by Users.AndreaSterbini on 09 Dec 2003 ---- ---+++ BASTA! Insomma una volta per tutte come diavolo va stampato l'output!!!!!! -- Comment added by Users.MorenoDeVincenzi on 09 Dec 2003 ---+++ SEGNO MENO Scusi prof.,ma il carattere orizzontale che indica la fine della lista e' il segno meno?Per inserire il numero di dischi non dobbiamo mettere nessun primpt?grazie -- Comment added by Users.DiegoCammarano on 09 Dec 2003 ---- ---++++ Re: BASTA! Insomma, una volta per tutte, ti guardi l'esempio!!! ---++++ Re: SEGNO MENO sì, è un meno nessun prompt -- Comment added by Users.AndreaSterbini on 10 Dec 2003 ---- ---+++ Errore di segmentazione Perchè questo benedetto errore di segmentazione deve essere così subdolo? Poi me lo da solo col Dev-C---++ mentre con un vecchio IDE della Borland mi va tutto liscio come l'olio. Il brutto è che compila tutto sembra andare a gonfie vele e poi appare in fase di esecuzione questo orrendo messaggio di Alert. Che mi conviene fare? Il bello è che tutte le funzioni di modifica le compila regolarmente e si ferma (in fase di debug) alla semplice funzione di stampa il cui unico scopo è far visualizzare i perni. Pensa che una semplice funzione di stampa possa dare un errore simile o è più probabile provenga dalla gestione delle liste implementate male e quindi in fase di lettura non trova i valori corrispondenti? Però continuo a ripetere che è strano perchè con l' IDE funziona benone. Mi rendo conto che è difficile trovare una risposta ad un errore del genere perciò questo messaggio è più uno sfogo mio personale e non una ricerca di risposte. -- Comment added by Users.JacopoBusso on 10 Dec 2003 ---- ---++++ Re: Errore di segmentazione Forse hai dereferenziato un puntatore NULL. Ad esempio hai scritto nodo->val e nodo è NULL. -- Comment added by Users.AndreaSterbini on 10 Dec 2003 ---- sto incominciando ad odiare questi cavolo di diski...ki se ne frega se moriremo tra 5000000000000000000000 di anni...tanto la maggior parte di noi si suiciderá dopo la prima sessione di esami!!! -- Comment added by Users.FedericoMarsili on 10 Dec 2003 ---- ---+++-- errata corrige forse io creperó un pó prima -- Comment added by Users.FedericoMarsili on 10 Dec 2003 ---- ---+++ Errore di segmentazione Sì credo abbiate ragione l'errore è proprio quello perchè usavo questa struttura per una funzione ricorsiva. Ho risolto con una funzione iterativa non mi da più l'errore. Tuttavia con la chiamata ricorsiva ero in grado di stampare la pila al contrario (di importanza fondamentale perchè io i dati li inserisco in testa e non in coda) mentre l'approccio iterativo non mi consente una cosa del genere a meno che non metta anche puntatori ai nodi precedenti ma non è molto regolare. Spero di riuscire a sfruttare l'algoritmo ricorsivo altrimenti devo cambiare tutto. -- Comment added by Users.JacopoBusso on 10 Dec 2003 ---- ---+++ Risolto Si era proprio lui l'incriminato errore. E' bastato mettere qualche controllino fuori la funzione per evitare che entrasse un valore puntato a NULL in modo da risolvere tutto. Vado subito ad inviare il programma -- Comment added by Users.JacopoBusso on 10 Dec 2003 ---- ---+++ Problemi sulla stampa ricorsiva di una pila Io mi sono fatto un metodo che prende il piolo lo legge fino a che non arriva all'ultimo suo elemento e poi lo stampa in modo ricorsorsivo in teoria dovrebbe funzionare ma in pratica non riesco a capire perkè mentre compilo mi da errore sulla compilazione. Io faccio se il puntatore è diverso da null la funzione richiama se stessa se no stampa il contentuto del campo. Es stampa(void * pippo) { if((void *)pippo!=NULL) stampa(pippo->next); printf("0: %d",pippo->info); } Kome mai non funziona cosa sbaglio? -- Comment added by Users.DarioFiorenza on 10 Dec 2003 ---- ---++++ Re: Problemi sulla stampa ricorsiva di una pila Stai dereferenziando il puntatore nel test. Il test giusto è <verbatim> if (!pippo) return; </verbatim> -- Comment added by Users.AndreaSterbini on 10 Dec 2003 ---- ---+++ Re Problemi sulla stampa ricorsiva si ma se faccio return; non è una funzione ricorsiva? non posso fare if(!pippo)stampa(pippo->next); e poi come ho scritto sopra? -- Comment added by Users.DarioFiorenza on 10 Dec 2003 ---- void stampa(void *start) { if(!(void *)pippo) stampa((void *)pippo->next); printf("0 : %d\n",(int)pippo->info); } dereferencing `void *' pointer request for member `next' in something not a structure or union warning: dereferencing `void *' pointer request for member `info' in something not a structure or union Come mai mi da questi errori? Uffa....ste liste!!! Mi sa ke rinuncio. -- Comment added by Users.DarioFiorenza on 10 Dec 2003 ---- Non lo definire come void pointer ... ma come struct nodo * -- Comment added by Users.AndreaSterbini on 10 Dec 2003 ---- ---+++ Lezione di oggi (giovedi 11 dicembre) *x il prof. :* potrebbe postare un accenno in proposito a quello che ha fatto oggi a lezione? *x i colleghi :* se qualcuno vuole informarmi su quello che è stato fatto oggi a lezione può mandarmi una e-mail a eq233@yahoo.it (togliete NOSPAM). Thanks! :-) -- Comment added by Users.EmanueleQuattrini on 11 Dec 2003 ---- ---++++ Re: Lezione di oggi (giovedi 11 dicembre) Backtrack (il problema delle 8 regine) Vedi il codice allegato all' HomeWork6 -- Comment added by Users.AndreaSterbini on 12 Dec 2003 %COMMENT{button=" Aggiungete la domanda " mode="before"}% <a name="form"> * Ricordatevi di dare un titolo alla vostra domanda come segue: <verbatim> <tre spazi>---+++<spazio>Titolo della domanda "non dovete mettere <>" Testo della domanda </verbatim>
This topic: Programmazione1/AA0506/PZ
>
WebHome
>
DomandeHomework5
Topic revision: r72 - 2003-12-14 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback