Domande (e risposte) sull' HomeWork7aa0203



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 AndreaSterbini on 04 Dec 2002


re: Perché abbiamo poco tempo!

-- Comment added by LeonardoParisi on 04 Dec 2002


Esatto ... abbiamo poco tempo per provare a implementare ciò che vi verrà chiesto all'esame ...

-- Comment added by 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 AndreaSantoro on 04 Dec 2002


Poco TEMPO?!?!?

Concordo smile

-- Comment added by 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 smile

-- Comment added by 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 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 smile ?
  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 DavideSammartino on 08 Dec 2002

  1. rileggi la homepage
  2. i casi sono due:
    1. inserisci "dopo" il cursore e quindi diventa difficile inserire prima del primo elemento
    2. inserisci "prima" del cursore e quindi diventa difficile inserire dopo l'ultimo elemento
    • quindi lascia stare l'esercizio così com'e'
  3. forse l'esercizio è troppo facile ... devo inventare qualcosa (anche per muovere un po' il bersaglio smile )

-- AndreaSterbini - 08 Dec 2002


Momento di pausa........

-- Comment added by LeonardoParisi on 08 Dec 2002


Esempio Corretto ?

Input
add 1
add 2
add 3
print
prev
add 4
print
next
add 5
print
fine
Output
1
2
3 *
------
1° print
-------
1
2
4 *
3
------
2° print
------
1
2
4
3
5 *
------
3° print
------

E' giusto così l'output prof?

-- Comment added by AndreaBandino on 08 Dec 2002


Sì (tranne per i trattini e le scritte tra trattini)

-- Comment added by 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

-- AndreaBandino - 09 Dec 2002


lista vuota

ma nella sort se la lista e' vuota lo stampiamo "vuota"

-- Comment added by EmanuelePiersanti on 09 Dec 2002


buona idea

-- Comment added by AndreaSterbini on 09 Dec 2002


input ed output

se io in input dò:
add 1
add 2
add 3
print
prev 
add 4
add 6
print
fine 
è giusto che l'output sia:
1
2
3 *
     
1    
2  
3  
4 *
6    
grazie

-- Comment added by CristianoMarra on 10 Dec 2002

Direi che invece dovrebbe essere ( ATTENTI: separo i due print con dei trattini che non fanno parte dell'output! ):

1
2
3 *
----
1    
2  
4
6 *   
3  

-- Comment added by 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 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).

-- ArcangeloTripi - 11 Dec 2002


Perfetto ... non avrei potuto dirlo meglio, grazie smile

-- Comment added by 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:
add 1
add 2
add 3
print
prev
del
add 4
add 5
print
next
add 6
print
fine

l' output deve essere:

1
2
3 *
1
3
4
5 *
1
3

4
5
6 *

grazie

-- Comment added by CristianoMarra on 11 Dec 2002


a occhio direi che è giusto ...

-- Comment added by 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 AlessandroCaruso on 11 Dec 2002


ma

ma anche gli zeri possono essere inclusi?

-- Comment added by CristianoMarra on 11 Dec 2002


cioè

è lecito fare add 0 ?

-- Comment added by 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 AndreaSterbini on 11 Dec 2002

aggiornamento sulla malloc

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 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 LucaGiovanditto on 11 Dec 2002


usa la funzione strcmp

-- Comment added by AndreaSterbini on 11 Dec 2002


grazie prof

-- Comment added by AlessandroCaruso on 11 Dec 2002


Nome e Cognome

In questo esercizio non bisogna mettere il nome e cognome?

-- Comment added by 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 AndreaSterbini on 12 Dec 2002


Soluzione HomeWork6aa0203

perche' la soluzione dell'hw non e' pubblicata?

-- Comment added by ElisabettaDAiutolo on 12 Dec 2002


Perchè non ho ancora finito di implementarla embarrassment (nella versione che gestisce gli errori)

Lo faccio al più presto (e vi do' anche i risultati dei test)

-- Comment added by AndreaSterbini on 12 Dec 2002


Re:Soluzione HomeWork6aa0203

puo' mettere intanto online la versione che non gestisce gli errori? Grazie

-- Comment added by 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 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 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 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 AndreaSterbini on 13 Dec 2002


- 1 ora all'alba

...

da domani sarò il vostro peggior incubo...

-- Comment added by LauraRavagli on 13 Dec 2002

da ListaDiStruttureConPuntatori

inizio subito:


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;
}

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

return nuovo;
fare 
lista = nuovo;

...vediamo chi risponde... smile

-- Comment added by LauraRavagli on 13 Dec 2002


c'è qualcuno che spia smile

-- Comment added by 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ì:

   aggiungi_elemento(&L,5)
e va modificata così:
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;
}

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 AndreaSterbini on 13 Dec 2002


si,si

io ho l'abitudine di definirmi direttamente il puntatore:


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;
   }

-- Comment added by 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:

add 1
add 1
add 1
prev
print

dà in output

1
1 *
1

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:

if (ilnumeroèpari---++) {lo metto in A}
else {lo metto in b}

dove ilnumeroèpari è un contatore: se parte da zero l'output è

1
1
1 *

mentre se parte da 1 (o da qualsiasi altro numero dispari) è

1 *
1
1

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 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 AndreaSterbini on 14 Dec 2002


re: del

vuota viene stampato solo se la lista è già vuota quando si chiede il del.

-- Comment added by 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 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 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 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 LorenzoLivi on 14 Dec 2002


vabbe ci rinuncio...:D bravo chi lo sa leggere:D..ciap

-- Comment added by LorenzoLivi on 14 Dec 2002


Prova a usare il tag <verbatim>

-- Comment added by AndreaSterbini on 14 Dec 2002


che cos'è il tag?

-- Comment added by 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 AndreaSterbini on 14 Dec 2002


ok tnx..

-- Comment added by 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ì!

-- 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 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.

-- 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 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 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 ElisabettaDAiutolo on 15 Dec 2002


... le due settimane

partivano dal giorno della pubblicazione smile ... se insistete prorogo ...

-- Comment added by 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 ElinaRazumovsky on 16 Dec 2002


RE:...le due settimane

io insisto... ma sono l'unica?

-- Comment added by ElisabettaDAiutolo on 16 Dec 2002


insisto pure io.. big grin tanto per solidarietà!

-- Comment added by 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.. smile

-- Comment added by ElisabettaDAiutolo on 16 Dec 2002


Consegna esercizio

Mi sono accorto che nella mail di conferma i miei tre include:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
sono diventati:
#include
#include
#include
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 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 AndreaSterbini on 16 Dec 2002


Merge-sort

Dove si può trovare l'algoritmo merge-sort visto in aula???? Grazie mille.

-- Comment added by AndreaArtibani on 16 Dec 2002


FunzioniRicorsiveSuListeDiStrutture

-- Comment added by 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:
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

Ignorando la posizione del cursore (questo e' un problema a cui posso ovviare dopo), la funzione sembra svolgere il suo dovere ossia:
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 frown ... E io sono veramente a corto di idee questa volta... C'e' qualcuno che puo' darmi qualche consiglio?

-- Comment added by MauroFerrara on 16 Dec 2002


credo di aver capito concettualmente l'algoritmo smile vi faro' sapere se riusciro' o meno a metterlo in pratica

-- Comment added by 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 AndreaBandino on 17 Dec 2002


Prorogato a mezzanotte di giovedì

La consegna è prorogata a mezzanotte di giovedì

-- Comment added by 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 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 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 AndreaSterbini on 17 Dec 2002


cacchio ma perchè prolunghiamo sempre dopo che consegno? big grin

-- Comment added by LorenzoLivi on 17 Dec 2002


Puoi sempre migliorare e riconsegnare!

-- Comment added by 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.
Implementare il comando aggiuntivo: 
sort che ordina la lista usando l'algoritmo merge-sort 
  il cursore rimane sul nodo che indicava prima 

Il cursore rimane sul nodo che indicava prima significa:
a) che rimane nella stessa posizione (come ho fatto io), allego un esempio:
add 0
add 4
add 2
print
0
4
2 *
sort
print
0
2
4 *
fine

b) oppure sul nodo specifico (in questo caso 2) che indicava?!? quindi presumo con un output del genere:
add 0
add 4
add 2
print
0
4
2 *
sort
print
0
2 *
4
fine

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 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 AndreaBandino on 18 Dec 2002


  1. la seconda che hai detto (la stampa si fa con print
  2. esatto

-- Comment added by AndreaSterbini on 18 Dec 2002


Se...

... la lista è vuota e scriviamo next o prev, stampiamo "vuota\n" anche qui?

-- Comment added by AndreaBandino on 18 Dec 2002


ok allora provo a migliorarlo e lo rimando..

-- Comment added by LorenzoLivi on 18 Dec 2002


Re: se ...

Solo se l'ho scritto nell'esercizio.

-- Comment added by 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 DavideSammartino on 19 Dec 2002


usa gdb

-- Comment added by 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 DavideSammartino on 19 Dec 2002


si

-- Comment added by 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 frown buona serata a tutti

-- Comment added by ElisabettaDAiutolo on 19 Dec 2002


Peccato ... ti aspettavo per farti gli auguri di Buon Natale! smile

-- Comment added by 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

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);

-- Comment added by LauraRavagli on 27 Dec 2002


In inserisci_nodo c'era un '==' al posto di un '=' ... ho corretto il codice

-- Comment added by AndreaSterbini on 28 Dec 2002


... anch'io sto sul rincretinito andante che non me ne sono accorta

-- Comment added by LauraRavagli on 28 Dec 2002

No such template def TMPL:DEF{PROMPT:before}

<tre spazi>---+++<spazio>Titolo della domanda
Testo della domanda
Edit | Attach | Watch | Print version | History: r98 < r97 < r96 < r95 < r94 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r98 - 2003-09-30 - AndreaSterbini






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback