---++ Domande (e risposte) sull' HomeWork7aa0203 * Inserite le vostre domande usando la form [[#form][in fondo alla pagina]] * Vedi anche: HomeWork7aa0203, SoluzioneHomework7aa0203, RisultatiHomework7aa0203. ---- %TOC% ---- ---+++ Perchè tanta fretta nel fare gli esercizi? Sono costretto a darvi gli esercizi 7 8 e 9 prima che finisca il corso in modo che possiate prepararvi per l'esame (soprattutto per il canale di Tronci). Gli esercizi verteranno su: * 7 liste linkate * 8 alberi * 9 ci devo pensare -- Comment added by Users.AndreaSterbini on 04 Dec 2002 ---- ---++++ re: Perché abbiamo poco tempo! -- Comment added by Users.LeonardoParisi on 04 Dec 2002 ---- Esatto ... abbiamo poco tempo per provare a implementare ciò che vi verrà chiesto all'esame ... -- Comment added by Users.AndreaSterbini on 04 Dec 2002 ---- cosa ci verra chiesto all`esame??? puo farmi una panoramica generale sui possibili argomenti? grazie e ciao a tutti! cmq e' vero! abbiamo pochissimo tempo x fare gli esercizi! e poi sono anche molto complicati! -- Comment added by Users.AndreaSantoro on 04 Dec 2002 ---- ---+++ Poco TEMPO?!?!? Concordo :) -- Comment added by Users.StefanoColasanti on 07 Dec 2002 ---- ---+++ Print/Fine In questo esercizio, all'esempio di Input Output viene messo in Input print-fine e dopo in Output la lista dei numeri...ok, ma non dovrebbe essere che la lista appare tra il Print e il Fine? Cioè, la lista deve apparire appena scriviamo fine oppure appena scriviamo print da stdin? Magari è sottointeso, ma a scanzo di equivoci lo chiedo :) -- Comment added by Users.DavidVulpetti on 07 Dec 2002 ---- ---++++ Print/Fine Accidenti ... sarà la centesima volta che vi dico che l'input e l'output sono su due stream diversi ... -- Comment added by Users.AndreaSterbini on 07 Dec 2002 ---- ---+++ Qualche domanda.... Salve Professore, volevo chiederle: 1) Quando e' scaduto l'homework 6? 2) Sull'Homework7, visto che il cursore deve fermarsi al primo elemento, e siccome lei si e' ipotizzato che si debba inserire un nuovo elemento dopo il cursore, dunque... come facciamo a mettere un elemento prima del primo elemento :-) ? 3) perche' c'e' cosi' poca gente che fa domande su questo homework? mi sono perso qualcosa oppure e' solamente dovuto al fatto che c'ha dato piu' tempo? Grazie. -- Comment added by Users.DavideSammartino on 08 Dec 2002 1 rileggi la homepage 1 i casi sono due: 1 inserisci "dopo" il cursore e quindi diventa difficile inserire prima del primo elemento 1 inserisci "prima" del cursore e quindi diventa difficile inserire dopo l'ultimo elemento * quindi lascia stare l'esercizio così com'e' 1 forse l'esercizio è troppo facile ... devo inventare qualcosa (anche per muovere un po' il bersaglio :-) ) -- Users.AndreaSterbini - 08 Dec 2002 ---- ---+++ Momento di pausa........ -- Comment added by Users.LeonardoParisi on 08 Dec 2002 ---- ---+++ Esempio Corretto ? <table border='1' size='30%'> <tr> <th>Input</th> </tr> <tr valign='top'><td> <verbatim> add 1 add 2 add 3 print prev add 4 print next add 5 print fine </verbatim> </td> </tr> <tr valign='top'> <th>%RED%Output%FINE%</th> </tr> <tr valign='top'> <td> %RED% <verbatim> 1 2 3 * ------ 1° print ------- 1 2 4 * 3 ------ 2° print ------ 1 2 4 3 5 * ------ 3° print ------ </verbatim> %FINE% </td> </tr> </table> E' giusto così l'output prof? -- Comment added by Users.AndreaBandino on 08 Dec 2002 ---- Sì (tranne per i trattini e le scritte tra trattini) -- Comment added by Users.AndreaSterbini on 09 Dec 2002 ---- "tranne per i trattini e le scritte tra trattini" Si lo so. Le avevo messe per distinguere le varie fasi del programma -- Users.AndreaBandino - 09 Dec 2002 ---- ---+++ lista vuota ma nella sort se la lista e' vuota lo stampiamo "vuota" -- Comment added by Users.EmanuelePiersanti on 09 Dec 2002 ---- buona idea -- Comment added by Users.AndreaSterbini on 09 Dec 2002 ---- ---+++ input ed output se io in input dò: <verbatim> add 1 add 2 add 3 print prev add 4 add 6 print fine </verbatim> è giusto che l'output sia: <verbatim> 1 2 3 * 1 2 3 4 * 6 </verbatim> grazie -- Comment added by Users.CristianoMarra on 10 Dec 2002 Direi che invece dovrebbe essere ( __ATTENTI:__ separo i due print con dei trattini *che non fanno parte dell'output*! ): <verbatim> 1 2 3 * ---- 1 2 4 6 * 3 </verbatim> -- Comment added by Users.AndreaSterbini on 10 Dec 2002 ---- ---+++ Problemi di allocazione memoria Scusatemi,volevo sapere una cosa.Se ho per esempio una lista1 che punta a una struttura NODO(quindi dichiarata NODO *)con tutti i suoi puntatori next e prev,come faccio a copiare il contenuto della lista1 in una lista2 secondaria?Se dichiaro lista2 come NODO * e poi faccio : lista2=lista1; non mi da' errore e teoricamente mi copia il contenuto di destra a sinistra,ma come ALLOCAZIONI di memoria.Quindi appena modifico qualcosa in lista2 mi modifica indirettamente(o direttamente) la lista1.Come posso fare per far si che le due liste seppur inizialmente identiche abbiano un'allocazione di memoria differente,cosi' da manipolare solo una delle due liste? Per favore rispondetemi!Grazie!! -- Comment added by Users.FabioPoliti on 11 Dec 2002 ---- Non dovrebbe essere necessario, per risolvere l'esercizio, effettuare una copia "fisica" di una lista, e comunque questo andrebbe contro lo spirito dell'allocazione dinamica della memoria, il cui scopo e' proprio quello di allocare la memoria strettamente indispensabile (e di rilasciarla quando non serve piu') Comunque, se proprio vuoi effettuare la copia di una lista, tieni presente che quando dichiari una variabile _lista2_ di tipo _(Nodo *)_ NON stai allocando lo spazio di memoria di una struttura, ma solo un puntatore. Se poi scrivi _lista2 = lista1_ entrambe le variabili puntano alla stessa lista, ed ogni operazione effettuata tramite l'una avra' effetto anche sull'altra, per il semplice motivo che l'"oggetto" e' unico, ed i puntatori allo stesso oggetto sono due (quindi, in questo caso l'operazione e' sostanzialmente inutile). Se vuoi effettuare una copia fisica, devi allocare lo spazio per la nuova lista, quindi (ammettendo che _lista1_ punti ad una lista non vuota), devi : - allocare un nuovo _Nodo_ - assegnare l'indirizzo di questo nodo a _lista2_ - effettuare un ciclo che, per ogni ulteriore elemento di _lista1_ crea un nuovo _Nodo_, copia *solo il valore* del corrispondente elemento di _lista1_ , e linka opportunamente questo nuovo _Nodo_ a _lista2_ . Il ciclo termina quando si esaurisce _lista1_ - ricordarti di rilasciare lo spazio di memoria occupato da _lista2_ quando non serve piu' (effettuando una scansione e liberando uno ad uno lo spazio occupato dai suoi elementi. Non basta dereferenziare l'indirizzo puntato da _lista2_, il C continuerebbe a considerare occupate quelle locazioni di memoria, anche se non sarebbe piu' possibile accedervi. Sarebbe quello che in termine tecnico viene definito "garbage" (spazzatura), e che un in linguaggio come il lisp viene liberato da un apposito demon, il "garbage collector", che pero' in C non esiste). -- Users.ArcangeloTripi - 11 Dec 2002 ---- Perfetto ... non avrei potuto dirlo meglio, grazie :-) -- Comment added by Users.AndreaSterbini on 11 Dec 2002 ---- ---+++ input e output2 Ringraziandola della precedente risposta(e quindi correggendo l'errore)le volevo chiedere ancora un'altro esempio di input e output, questa volta però includendo tutti i comandi(ciò potrebbe anche tornare utile per gli altri studenti così possono vedere anche altri esempi), se io do il seguente input: <verbatim> add 1 add 2 add 3 print prev del add 4 add 5 print next add 6 print fine </verbatim> l' output deve essere: <verbatim> 1 2 3 * 1 3 4 5 * 1 3 4 5 6 * </verbatim> grazie -- Comment added by Users.CristianoMarra on 11 Dec 2002 ---- a occhio direi che è giusto ... -- Comment added by Users.AndreaSterbini on 11 Dec 2002 ---- ---+++ Problemi con malloc Ragazzi mi dite per favore cosa vuol dire "assignment makes pointer from integer without a cast" in una riga del genere newPtr=malloc(sizeof(NODO)); ?? grazie -- Comment added by Users.AlessandroCaruso on 11 Dec 2002 ---- ---+++ ma ma anche gli zeri possono essere inclusi? -- Comment added by Users.CristianoMarra on 11 Dec 2002 ---- ---+++ cioè è lecito fare add 0 ? -- Comment added by Users.CristianoMarra on 11 Dec 2002 ---- ---++++ re: ma certo (0 è un intero) e sono validi anche i numeri negativi! ---++++ re: malloc vuol dire che non hai fatto il cast dal ==void *== tornato da malloc al tipo ==NODO *== della variabile *newPtr* -- Comment added by Users.AndreaSterbini on 11 Dec 2002 %RED% ---++++ aggiornamento sulla malloc %FINE% In effetti il vero motivo di questo errore è che ti sei dimenticato la riga ==#include stdlib.h== per cui il compilatore assume che malloc ritorni un intero e poi ne fa un cast a puntatore. Se includi il file la malloc è dichiarata correttamente e *non c'e' bisogno di fare il cast*. -- Comment added by Users.AndreaSterbini on 17 Feb 2003 ---- ---+++ Stdin Come faccio a vedere se la stringa che ho preso in stdin è uguale a un'altra stringa definita nella dichiarazione delle variabili? -- Comment added by Users.LucaGiovanditto on 11 Dec 2002 ---- usa la funzione ==strcmp== -- Comment added by Users.AndreaSterbini on 11 Dec 2002 ---- grazie prof -- Comment added by Users.AlessandroCaruso on 11 Dec 2002 ---- ---+++ Nome e Cognome In questo esercizio non bisogna mettere il nome e cognome? -- Comment added by Users.LucaGiovanditto on 11 Dec 2002 ---- Accidenti, me ne sono dimenticato ... per non "muovere il bersaglio" lasciamo perdere ... (chi proprio ci tiene lo stampi solo se in input c'e' l'opzione ==-v== ... non lo controllero') -- Comment added by Users.AndreaSterbini on 12 Dec 2002 ---- ---+++ Soluzione HomeWork6aa0203 perche' la soluzione dell'hw non e' pubblicata? -- Comment added by Users.ElisabettaDAiutolo on 12 Dec 2002 ---- Perchè non ho ancora finito di implementarla :o (nella versione che gestisce gli errori) Lo faccio al più presto (e vi do' anche i risultati dei test) -- Comment added by Users.AndreaSterbini on 12 Dec 2002 ---- ---+++ Re:Soluzione HomeWork6aa0203 puo' mettere intanto online la versione che non gestisce gli errori? Grazie -- Comment added by Users.ElisabettaDAiutolo on 12 Dec 2002 ---- ---+++ Rilascio memoria Per verificare l'effettivo rilascio di memoria, ho provato a farmi stampare l'intero contenuto nel nodo appena cancellato. Domanda: Perchè mi stampa il numero e non mi da errore o un NULL???? Grazie -- Comment added by Users.AndreaArtibani on 12 Dec 2002 ---- Perchè il sistema operativo non ha avuto ancora il tempo di dare quel pezzo di memoria ad un altro programma e non è stato ancora modificato. (il rilascio non implica che la memoria venga "ripulita") -- Comment added by Users.AndreaSterbini on 12 Dec 2002 ---- ---+++ Warning!!! Prechè mi da questo warning? warning: passing arg 2 of `strcmp' from incompatible pointer type. Questa è la riga corrisondente: if(strcmp(add,comando)==0), add è char *add="add"; comando è char *comando[6];.Nonostante tutto il programma funziona! -- Comment added by Users.DomenicoBoiano on 13 Dec 2002 ---- comando é un _array di 6 puntatori ad array di caratteri_ (come argv, tanto per intenderci) e non un array di caratteri semplice quindi dovresti scrivere comando[0] oppure definirlo come ==char comando[6]== oppure come ==char * comando== -- Comment added by Users.AndreaSterbini on 13 Dec 2002 ---- *- 1 ora all'alba* ... da domani sarò il vostro peggior incubo... -- Comment added by Users.LauraRavagli on 13 Dec 2002 ---+++ da ListaDiStruttureConPuntatori inizio subito: <verbatim> struct nodo { int x struct nodo *next; }; struct nodo *aggiungi_elemento(struct nodo *lista, int val) { struct nodo *nuovo = (struct nodo *) malloc(sizeof(struct nodo)); nuovo->x = val; nuovo->next = lista; return nuovo; } </verbatim> scusate l'ignoranza: qual'è la necessità (oltre magari lo stile ) di dichiarare la funzione come nodo? sarebbe la stessa cosa dichaiarare la funz void e invece del <verbatim> return nuovo; fare lista = nuovo; </verbatim> ...vediamo chi risponde... :) -- Comment added by Users.LauraRavagli on 13 Dec 2002 ---- c'è qualcuno che spia :) -- Comment added by Users.LauraRavagli on 13 Dec 2002 ---- lista è un argomento, quindi è passata *per valore* e anche se la modifichi non riuscirai a modificare il valore della variabile usata nel main, fuori dalla funzione. Per comunicare la nuova lista fuori si usano due stili: * funzionale (quello visto a lezione) * con passaggio della variabile da modificare *per riferimento* La funzione di cui sopra in questo secondo caso va chiamata così: <verbatim> aggiungi_elemento(&L,5) </verbatim> e va modificata così: <verbatim> void aggiungi_elemento(struct nodo **lista, int val) { struct nodo *nuovo = (struct nodo *) malloc(sizeof(struct nodo)); nuovo->x = val; nuovo->next = *lista; *lista = nuovo; } </verbatim> Nota che ora l'argomento lista è _un puntatore ad un puntatore ad una struct_ e che per leggerlo/modificarlo va dereferenziato usando ==*lista== -- Comment added by Users.AndreaSterbini on 13 Dec 2002 ---- si,si io ho l'abitudine di definirmi direttamente il puntatore: <verbatim> typedef struct Nodo * TipoNodo; struct Nodo { int x; TipoNodo next; }; main() { TipoNodo Lista; aggiungi_elemento(&Lista,88); } void aggiungi_elemento(TipoNodo *vNodo, int valore) { TipoNodo a; a = malloc(sizeof(struct Nodo)); a->x = valore; a->next = (*vNodo); (*vNodo) = a; } </verbatim> -- Comment added by Users.LauraRavagli on 13 Dec 2002 ---- ---+++ Dubbio su del e NOTA IMPORTANTE Non ho ben capito una cosa: se nella lista ho un solo elemento, quando faccio "del" lo toglie e la lista rimane vuota... è qui che devo stampare "vuota" o solo quando eseguo "del" sulla lista vuota? Una nota MOLTO importante: aggiungendo elementi con lo stesso valore dopo la chiamata sort non si può stabilire, confrontando con l'output di un programma simile, su quale ci sia il puntatore: <font color="#009900"><pre> add 1 add 1 add 1 prev print </pre></font> dà in output <font color="#990000"><pre> 1 1 * 1 </pre></font> Dopo il sort potrebbe dare qualsiasi cosa: nel mio homework quando vado a mettere un elemento in una lista e il successivo nell'altra (per dividerla) cambia l'output se faccio una modifica piccolissima: <font color="#009900"><pre> if (ilnumeroèpari---++) {lo metto in A} else {lo metto in b} </pre></font> dove ilnumeroèpari è un contatore: se parte da zero l'output è <font color="#990000"><pre> 1 1 1 * </pre></font> mentre se parte da 1 (o da qualsiasi altro numero dispari) è <font color="#990000"><pre> 1 * 1 1 </pre></font> Probabilmente un tipo diverso di output viene dato anche se si prende metà lista da una parte e metà dall'altra... E non solo!: facendo più volte la sort (Es con la lista composta da 3 "uni") l'output a volte è in un modo, a volte nell'altro. Ho consegnato il mio homework, se vuole può guardarlo. -- Comment added by Users.LudovicoGrossi on 13 Dec 2002 ---- Hai ragione ... mmmhhhh ... ... facciamo così ... nei tests eviterò di eseguire il sort della lista quando il cursore è su un elemento con valore presente più di una volta nella lista. -- Comment added by Users.AndreaSterbini on 14 Dec 2002 ---- ---++++ re: del *vuota* viene stampato solo se la lista è *già* vuota quando si chiede il del. -- Comment added by Users.AndreaSterbini on 14 Dec 2002 ---- ---+++ DOMANDE: salve prof vorrei sapere alcune cose: 1) Se la posizione corrente è l'ultimo nodo e noi scriviamo il comando next, cosa deve apparire o succedere? del tipo "non puoi anadre avanti è l'ultimo nodo". 2) Se la posizione corrente è il primo nodo e noi scriviamo il comando prev cosa deve succedere? L'esempio è come L' 1) invertito. -- Comment added by Users.AndreaBandino on 14 Dec 2002 ---- Sul testo dice di restare sull'ultimo elemento se ci sei già e vuoi andare avanti, viceversa per il primo -- Comment added by Users.LudovicoGrossi on 14 Dec 2002 ---- probz.. allora..ho un problema con una parte del programma in cui voglio che la stringa che immetto da stdin( tipo add 4) venga spillata dopo lo spazio in un'altra stringa...il problema è che dopo lo spazio me lo considera ancora come l'inizio della stringa..lo so sembra una cosa assurda pero praticamente la pos 0 dell'array me la considera sia all'inizio che dopo lo spazio..scusate se è un po contorto ma è difficile da spiegare..cmq vi attacco sotto quello che ho scritto riguardo solo a questa parte e aspetto vostri commenti..tnx main() { LISTNODEPTR startPtr = NULL; char choice[size]; char choice2[size]; int item,x,m; scanf("%s", &choice); while(choice[0] != 'f') { /*switch per il vari comandi da eseguire*/ switch (choice[0]) { case 'a': for(x = 0;x < strlen(choice);x---++) { if(choice[x] == ' ') { for(m = x---+1;m < strlen(choice);m++) sprintf(choice2,"%s",choice[m]); } sscanf(choice2,"%d\n", &item); } inserisci(&startPtr, item); break; -- Comment added by Users.LorenzoLivi on 14 Dec 2002 ---- cacchio lo attaccato male ve lo riattacco qui un po meglio..scusate..:D main() { LISTNODEPTR startPtr = NULL; char choice[size]; char choice2[size]; int item,x,m; scanf("%s", &choice); while(choice[0] != 'f') { switch (choice[0]) { case 'a': for(x = 0;x < strlen(choice);x---++) { if(choice[x] == ' ') { for(m = x---+1;m < strlen(choice);m++) sprintf(choice2,"%s",choice[m]); } sscanf(choice2,"%d\n", &item); } inserisci(&startPtr, item); break; -- Comment added by Users.LorenzoLivi on 14 Dec 2002 ---- vabbe ci rinuncio...:D bravo chi lo sa leggere:D..ciap -- Comment added by Users.LorenzoLivi on 14 Dec 2002 ---- Prova a usare il tag <verbatim> -- Comment added by Users.AndreaSterbini on 14 Dec 2002 ---- che cos'è il tag? -- Comment added by Users.LorenzoLivi on 14 Dec 2002 ---- Guarda come faccio a inserire un pezzo di codice in una pagina di twiki ... tag=elemento HTML -- Comment added by Users.AndreaSterbini on 14 Dec 2002 ---- ok tnx.. -- Comment added by Users.LorenzoLivi on 14 Dec 2002 Ma perchè ti vuoi impiccare da solo? a che ti serve unire tutto il comando in una stringa e poi gestirla? Serve solo per okkupare spazio in questo esercizio! Spezza in due l'assimilazione dei dati! Ti crei uno switch e la prima parte dell'assimilazione la metti fuori da questo , mentre l'altra parte, dove richiesta la metti nel case! Più semplice di così! -- Users.AndreaBandino - 14 Dec 2002 ---- bhe guarda quello che cerco di fare è di spezzare in due la stringa, per dividere nnumero e comando..magari nn ci riesco pero è proprio quello che cerco di fare...cmq grazie. -- Comment added by Users.LorenzoLivi on 15 Dec 2002 Io intendevo dire che se usi due scanf, il primo al di fuori dello switch, che prende la stringa del comando, ed il secondo scanf, che prende l'intero, lo inserisci nei case in cui è richiesto il secondo argomento, risparmi, codice ed elimini cicli inutili! La gestione della stringa poteva servire nell'ese 6 perchè c'erano da esaminare le possibili combinazioni tra nome e cognome ma in questo ese, ci sono solo 2 argomenti e basta - comando - intero - e sono per così dire standard, ovvero non ci sono comandi con più parole (con spazzi) o più numeri ma solo comando(spazio)intero o comando e basta. -- Users.AndreaBandino - 15 Dec 2002 ---- ok ti ringrazio....pero c'è una cosa strano in quello che ho fatto io..come ho detto prima mi considera 2 volte la posizione 0 dell'array..probabilmente faccio fare qualcosa di strano pero a me nn sembra..cmq grazie ancora e provo a semplificare la questione..ciap- -- Comment added by Users.LorenzoLivi on 15 Dec 2002 ---- ---+++ le due settimane.... dalla consegna dell'homework6 le due settimane terminerebbero venerdi.. o sbaglio? spostare la scadenza a venerdi sarebbe troppo??? -- Comment added by Users.ElisabettaDAiutolo on 15 Dec 2002 ---- ---+++ passare la riga... alle funzioni a questo punto non serve... lùil suggerimento choice mi sembra la soluzione migliore per questo Hw -- Comment added by Users.ElisabettaDAiutolo on 15 Dec 2002 ---- ---+++ ... le due settimane partivano dal giorno della pubblicazione :-) ... se insistete prorogo ... -- Comment added by Users.AndreaSterbini on 15 Dec 2002 ---- ---+++ Algoritmi è possibile inserire negli appunti di esecitazioni gli algoritmi usati durante il corso? Sarebbe stato molto utile per chi non frequenta , grazie. -- Comment added by Users.ElinaRazumovsky on 16 Dec 2002 ---- ---+++ RE:...le due settimane io insisto... ma sono l'unica? -- Comment added by Users.ElisabettaDAiutolo on 16 Dec 2002 ---- insisto pure io.. :D tanto per solidarietà! -- Comment added by Users.LorenzoLivi on 16 Dec 2002 ---- ---+++ RE:..le due settimane.. mi manca di testare il programma... ma visto che allo scorso HW vinse la scanf sulla mia tenacia....se si potesse prorogare.. :) -- Comment added by Users.ElisabettaDAiutolo on 16 Dec 2002 ---- ---+++ Consegna esercizio Mi sono accorto che nella mail di conferma i miei tre include: <verbatim> #include <stdio.h> #include <stdlib.h> #include <string.h> </verbatim> sono diventati: <verbatim> #include #include #include </verbatim> Ho provato a riconsegnare l'esercizio con lo stesso risultato. Mi puo' dire prof se il file dell'esercizio e' giunto completo? Grazie. -- Comment added by Users.PaoloPancotto on 16 Dec 2002 ---- Che stai dicendo ... all'email non manca nulla ... sei tu che hai la visualizzazione HTML attiva nel tuo programma email e quei pezzi vengono nascosti perchè vengono interpretati come tag HTML ... -- Comment added by Users.AndreaSterbini on 16 Dec 2002 ---- ---+++ Merge-sort Dove si può trovare l'algoritmo merge-sort visto in aula???? Grazie mille. -- Comment added by Users.AndreaArtibani on 16 Dec 2002 ---- FunzioniRicorsiveSuListeDiStrutture -- Comment added by Users.AndreaSterbini on 16 Dec 2002 ---- ---+++ Il merge-sort mi sta facendo impazzire! :| So che e' ben spiegato e so che c'e' l'esempio di Arcangelo pero' non riesco proprio a capire dove sbaglio. Premesso che ho grossi dubbi su come implementare l'algoritmo su una lista non normale, ma doppiamente linkata... tutto qui sembra funzionare... (anche se probabilmente tutti i puntatori a prev dei vari nodi sono a NULL) ... anche se nella realta' dei fatti non e' cosi', ottengo, infatti, questo output:<br> <verbatim> add 56 add 1 add 5 add 8 print 56 1 5 8 * sort DEBUG PRINT LISTA A 56 * 5 DEBUG PRINT LISTA B 1 * 8 PASSO DI MERGE 1 * 8 56 5 </verbatim> <br> Ignorando la posizione del cursore (questo e' un problema a cui posso ovviare dopo), la funzione sembra svolgere il suo dovere ossia:<br> spezzo in due la lista grande, il primo elemento di A non e' minore del primo di B, quindi prendo il primo di B e attacco il resto ... pero' sembra ferma li :( ... E io sono veramente a corto di idee questa volta... C'e' qualcuno che puo' darmi qualche consiglio? -- Comment added by Users.MauroFerrara on 16 Dec 2002 ---- credo di aver capito concettualmente l'algoritmo :) vi faro' sapere se riusciro' o meno a metterlo in pratica -- Comment added by Users.MauroFerrara on 17 Dec 2002 ---- ---+++ Please Prof, si potrebbe spostare la consegna anche di un solo giorno per permettere di correggere e completare bene l'esercizio? -- Comment added by Users.AndreaBandino on 17 Dec 2002 ---- ---+++ Prorogato a mezzanotte di giovedì La consegna è prorogata a mezzanotte di giovedì -- Comment added by Users.AndreaSterbini on 17 Dec 2002 ---- ---+++ due cose: 1) venerdi ci fara' lezione? 2) grazie della proroga, cosi' provo anche a fare la parte facoltativa.. grazie -- Comment added by Users.ElisabettaDAiutolo on 17 Dec 2002 ---- ---++++ Parte facoltativa Ci sono riuscito (almeno cosi' pare), il problema stava nel fatto che la parte ricorsiva non andava ! grrr la ho spuntata solo a notte inoltrata. -- Comment added by Users.MauroFerrara on 17 Dec 2002 ---- La lezione di venerdì è spostata a giovedì pomeriggio alle ore 16 in aula 5 di Matematica (assieme al canale P-Z) -- Comment added by Users.AndreaSterbini on 17 Dec 2002 ---- cacchio ma perchè prolunghiamo sempre dopo che consegno? :D -- Comment added by Users.LorenzoLivi on 17 Dec 2002 ---- Puoi sempre migliorare e riconsegnare! -- Comment added by Users.AndreaSterbini on 17 Dec 2002 ---- ---+++ Dubbi sulla parte facoltativa (per il prof) Ho riconsegnato l'esercizio comprensivo di parte facoltativa, pero' credo di aver sbagliato... rileggendo il testo (e sopratutto le domande e risposte) mi e' venuto un dubbio.<br> <pre> Implementare il comando aggiuntivo: sort che ordina la lista usando l'algoritmo merge-sort il cursore rimane sul nodo che indicava prima </pre><br> Il cursore rimane sul nodo che indicava prima significa:<br> a) che rimane nella stessa posizione (come ho fatto io), allego un esempio: <br><pre> add 0 add 4 add 2 print 0 4 2 * sort print 0 2 4 * fine </pre><br>b) oppure sul nodo specifico (in questo caso 2) che indicava?!? quindi presumo con un output del genere:<br> <pre> add 0 add 4 add 2 print 0 4 2 * sort print 0 2 * 4 fine </pre><br> So di uscirmene piuttosto in ritardo pero' siccome la consegna e' stata posticipita potrei correggere... Se allega anche un paio di esempi sarebbe perfetto... La ringrazio in anticipo della risposta! -- Comment added by Users.MauroFerrara on 17 Dec 2002 ---- ---+++ Merge-Sort Prof, una volta che viene utilizzato il comando sort, cosa deve succedere? viene stampata ordinata la lista automaticamente? Oppure, per stamparla bisogna indicare print? Seconda cosa: se avevamo in non ordine 3 7(*) 4 9, una volta ordinata, avremo 3 4 7(*) 9, quindi il prossimo numero che inseriremo sarà tra il 7 ed il 9 ? -- Comment added by Users.AndreaBandino on 18 Dec 2002 ---- 1 la seconda che hai detto (la stampa si fa con *print* 1 esatto -- Comment added by Users.AndreaSterbini on 18 Dec 2002 ---- ---+++ Se... ... la lista è vuota e scriviamo next o prev, stampiamo "vuota\n" anche qui? -- Comment added by Users.AndreaBandino on 18 Dec 2002 ---- ok allora provo a migliorarlo e lo rimando.. -- Comment added by Users.LorenzoLivi on 18 Dec 2002 ---- ---++++ Re: se ... Solo se l'ho scritto nell'esercizio. -- Comment added by Users.AndreaSterbini on 19 Dec 2002 ---- Professore ma c'e' un modo con Cygwin per fare il debug riga per riga del programma? se si, come si fa? Grazie -- Comment added by Users.DavideSammartino on 19 Dec 2002 ---- usa *gdb* -- Comment added by Users.AndreaSterbini on 19 Dec 2002 ---- un'altra cosa... per il "sort", gli elementi devono essere ordinati in ordine crescente vero? dal piu' piccolo al piu' grande? -- Comment added by Users.DavideSammartino on 19 Dec 2002 ---- si -- Comment added by Users.AndreaSterbini on 19 Dec 2002 ---- ---+++ paragonabile all vecchia.... questo Hw7 mi ha impegnato alla pari di quello del parsing di una stringa in un'altra... fiuu... grazie al posticipo ho completato pure la parte facoltativa: saltato pure lezione :( buona serata a tutti -- Comment added by Users.ElisabettaDAiutolo on 19 Dec 2002 ---- Peccato ... ti aspettavo per farti gli auguri di Buon Natale! :-) -- Comment added by Users.AndreaSterbini on 20 Dec 2002 ---- ---+++ dubbio su FunzioniRicorsiveSuListeDiStrutture non riesco a capire perchè questo codice non mi funziona correttamente, ossia mi aspetterei l'inserimento in testa. inserisci_nodo è la routine che sta su FunzioniRicorsiveSuListeDiStrutture mettendo lista =inserisci_Nodo(Elem,lista,i); tutto ok <verbatim> void main() { Nodo *lista = NULL; Nodo *Elem =NULL; int i; for (i=0;i<15;i---++) { Elem =malloc(sizeof(Nodo)); Elem->pros = NULL; Elem->num = i; lista =inserisci_Nodo(Elem,lista,0); } stampa(lista); </verbatim> -- Comment added by Users.LauraRavagli on 27 Dec 2002 ---- In inserisci_nodo c'era un '==' al posto di un '=' ... ho corretto il codice -- Comment added by Users.AndreaSterbini on 28 Dec 2002 ---- ... anch'io sto sul rincretinito andante che non me ne sono accorta -- Comment added by Users.LauraRavagli on 28 Dec 2002 %COMMENT{button=" Aggiungete la domanda " mode="before" lines="5"}% <a name="form"> * Ricordatevi di dare un titolo alla vostra domanda come segue: <verbatim> <tre spazi>---+++<spazio>Titolo della domanda Testo della domanda </verbatim>
This topic: Programmazione1/AA0506/PZ
>
WebHome
>
HomeWork7aa0203
>
DomandeHomework7aa0203
Topic revision: r98 - 2003-09-30 - 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