Domande sugli homework

Preghiamo tutti gli studenti di non rispondersi tra loro, per evitare che vengano date informazioni imprecise o errate. Anche noi possiamo sbagliare, ma se sbagliamo potete prendervela con noi, se sbagliate per colpa di un errore/imprecisione commessa da un altro studente con chi ve la prendete? Controllate che le risposte vengano dai docenti o dagli esercitatori.

Ricordo a tutti di rimuovere dall'output degli esercizi stampe di interazione con l'utente, system("pause") o qualunque cosa non richiesta prima di inviare le soluzioni

La consegna delle soluzioni del quinto hw può essere fatta regolarmente entro le ore 24.00 di oggi 23/01/09. Consultate la pagina delle domande (Re: Consegna) per ulteriori chiarimenti

Domanda stupida

Un numero deve essere considerato multiplo/divisore di sé stesso?

[AGGIUNTA]: Nell'esempio del primo esercizio 0 non figura tra i multipli di 10, è corretto così o va considerato che 0 = 0 * 10?

-- SimoneBronzini - 10 Jan 2009

Re: Domanda stupida

Si considerate un numero come divisore di se stesso. 0 invece non è multiplo di nessun numero.

-- EmanueleFusco - 12 Jan 2009

Numeri Ripetuti

1. Eventuali ripetizioni di numeri in input devono essere scartate?

2. Se sì, da quale funzione ?

-- FabrizioCavaniglia - 12 Jan 2009


Re: Numeri Ripetuti

Se ci sono numeri ripetuti nella sequenza in input nel primo esercizio, dovete semplicemente inserirli più volte, quindi avrete liste con ripetizioni dello stesso valore.

-- EmanueleFusco - 12 Jan 2009

esercizio 1

Salve, volevo sapere se è possibile nella defizione della struct aggiungere un typedef in modo da poter scrivere nella defizione della funzione ....NodoPtr * origine..... invece di ....Nodo ** origine....
typedef Nodo * NodoPtr
-- AlessandroColetta - 12 Jan 2009

Re: esercizio 1

Si potete aggiungere una definizione di tipo puntatore a Nodo. Per farlo utilizzate ESATTAMENTE la dichiarazione che trovate qui sotto.
typedef Nodo * NodoPtr;
-- EmanueleFusco - 12 Jan 2009

home1: come gestire il caso k=0

in caso l'utente inserisca k=0, come ci dobbiamo comportare? i valori della lista sarebbe tutti divisori, e non multipli... che facciamo? li inseriamo tutti nella lista multipli/divisori, nella lista resto oppure ritorniamo tutti i puntatori alle 3 liste a NULL?grazie

-- MarioGreco - 12 Jan 2009

Re: home1: come gestire il caso k=0

il valore k sarà sempre >0.

-- EmanueleFusco - 12 Jan 2009


Il numero 1

Nel primo esercizione il numero 1 è da considerare multiplo e divisore di ogni numero oppure no? nell'esempio non c'è l'1 e non so come trattarlo

-- PierPaoloPetti - 12 Jan 2009

Re: Il numero 1

1 è divisore di qualunque numero intero >0.

-- EmanueleFusco - 12 Jan 2009

Funzione di inserimento

E' possibile creare una funzione che si occupi di inserire i valori all'interno di * origine in modo ordinato senza farlo nel main? Questa funzione dovrà allocare memoria

-- GianlucaCarroccia - 12 Jan 2009

Re: Funzione di inserimento

Si potete definire altre funzioni ausiliarie (ad esempio per effettuare gli inserimenti).

-- EmanueleFusco - 12 Jan 2009

Lista Inserita vuota

Salve, come gestire un eventuale input: -1 3 ? il programma deve stampare NULL NULL (per multipli_e_divisori e per resto) oppure non stampare nulla?

grazie


-- LuisaDiDionisio - 12 Jan 2009

Re: Lista Inserita vuota

L'elemento NULL non è un elemento effettivo di una lista ma un valore sentinella per capire quando la lista termina, quindi non deve essere stampato. La risposta alla sua domanda è quindi: non bidogna stmapre nulla

-- RobertoPetroccia - 13 Jan 2009

home1 e home2, chiarimenti e valgrind

primaDomanda. nell'home 2, se inserisco n=0 che devo fare? uscire subito dal programma o comunque prendere anche un x e quindi stampare solo lo sbilanciamento massimo (ovvero 0 in quel caso)? poi, il valore x sarà sempre>=0 giusto (esser negativo crea qualche problema fastidioso)...? secondaDomanda. entrambi gli home se eseguiti con valgrind mi danno summary error =0, però si lamentano che all'uscita del programma non ho liberato la memoria, va bene lo stesso o creo una funzione che alla fine dell'output richiesto cancella tutto?grazie e scusate la prolissità

-- MarioGreco - 13 Jan 2009

Re: home1 e home2, chiarimenti e valgrind

Nell'ordine. Per n=0 non dovete stampare nulla. Il valore x sarà sempre >0. Per quanto riguarda la memoria, sarà considerato errore non deallocare memoria al seguito di cancellazioni dalla tabella, mentre potete evitare di deallocare la memoria utilizzata dagli elementi della pseudo tabella hash ancora presenti al termine dell'esecuzione del programma.

-- EmanueleFusco - 13 Jan 2009

funzione trova esercizio 2

la funzione trova nel secondo esercizio viene richiamata all'interno delle funzioni elimina ed inserisci per trovare la lista il cui elemento chiave e' uguale al parametro c...giusto??

-- AlessandroColetta - 13 Jan 2009

Re: funzione trova esercizio 2

potete utilizzare la funzione trova ogni volta lo riteniate utile/necessario.

-- EmanueleFusco - 13 Jan 2009

Domanda sull'esercizio 1 riguardo l'ordinamento

Nel testo viene detto: "Attenzione: tutti gli elementi devono essere inseriti nelle liste rispettando l’ordinamento non decrescente per il campo val." Si intende ordine crescente o un ordine casuale non decrescente?Nel caso si intenda la seconda, va bene comunque se metto il tutto in ordine crescente?

-- FrancescoBelladonna - 13 Jan 2009

Re: Domanda sull'esercizio 1 riguardo l'ordinamento

Con ordinamento non decrescente si intende che se l'elemento "a" precede "b" nella lista allora "a.val" <= "b.val".

-- RobertoPetroccia - 13 Jan 2009

Inserimenti esercizio 1

Ma per inserire i valori nella lista *origine, è consentito usare la malloc in una funzione ausiliaria?

-- NicolaDonato - 14 Jan 2009

Re: Inserimenti esercizio 1

Si... come già detto in precedenza potete definire delle funzioni ausiliarie, e ovviamente potete utilizzare in queste funzioni tutto ciò che ritenete conveniente o necessario utilizzare.

-- EmanueleFusco - 14 Jan 2009

Compilazione Ex1,+altro

Salve,(domanda1) proprio all'ultima esercitazione fatta ,ho sentito che per evitare messaggi di warning durante la compilazione dovuti alla malloc ,bisognava effettuare un cast.....il codice lo allego qui sotto,il messaggio di warning generato è il seguente"107: warning: incompatible implicit declaration of built-in function ‘malloc’"mi sembra che il codice sia corretto,,ma xchè continua a darmi sto warning? (domanda2)una volta che è terminata la funzione separa liste, come faccio a vedere dove punta la testa della lista di origine?so' che dovrebbe essere a NULL............ Saluti...

 106         Nodo* nuovo=NULL;
 107    nuovo=(Nodo*)malloc(sizeof(Nodo));
-- Users.1243045 - 14 Jan 2009

Re: Compilazione Ex1,+altro

per poter utilizzare la funzione malloc devi includere la libreria stdlib.h (#include<stdlib.h>). Il cast invece non è necessario.

Il puntatore della lista origine dovrà essere correttamente impostato a NULL dalla funzione separa_liste, alla quale è stato passato per riferimento proprio per poter effettuare le necessarie modifiche.


-- EmanueleFusco - 14 Jan 2009

chiarimenti homework 2 sbilanciamento

Non mi è chiaro cosa si intende per sbilanciamento nel secondo homework. Leggendo all'inizio si intuisce che lo sbilanciamento sarebbe la differenza del numero di elementi nelle due liste. Tuttavia questo è in contrasto con l'esempio proposto per l'output. Potete fornire altri esempi??

-- EmanueleGiarlini - 14 Jan 2009

Re: chiarimenti homework 2 sbilanciamento

Lo sbilanciamento è la differenza tra la lista con più elementi e quella con meno elementi. Un lista vuota (in cui non sono stati inseriti elementi) avrà lunghezza pari a 0. Se la lista che contiene il maggior numero di elementi ha lughezza 3, allora lo sbilanciamento sarà 3 - 0 = 3. Se la lista con meno elementi contenesse 1 elemento e quella con più elementi ne contenesse 5, allora lo sbilanciamento sarebbe 5 - 1 = 4.


-- RobertoPetroccia - 15 Jan 2009

Esercizio 1 caso strano

per l'esercizio 1 non ho ben capito come trattare il numero 0. Nell'esempio di input 0 pur essendo multiplo di 10 non viene incluso nella lista Multipli_e_divisori ma in quella di resto. Ora avendo un input del tipo: 0 -1 0 (dove lo 0 finale sarebbe il k) in quale lista andrà l'elemento zero?

-- SerenaMatrone - 14 Jan 2009

Re: Esercizio 1 caso strano

Ottima domanda. La nozione "essere multiplo di ... " è una nozione che potrebbe sembrare elementare, ma è abbastanza delicata, poichè ha un suo preciso ambito di formulazione. Nell'opinione comune diciamo che un numero naturale n è multiplo del numero naturale m se esiste un terzo numero naturale h tale per cui n=hm. Se dovessimo applicare alla lettera la definizione data, essendo 0 un numero naturale, si avrebbe che la risposta è sì, n=0 è multiplo di ogni m naturale, essendo 0=0m, per ogni m naturale. Proprio per evitare queste situazioni nelle quali il numero 0 ha un ruolo un po' strano in certe definizioni, si preferisce non considerarlo. Dunque, per quanto detto, si conviene che lo zero NON E' MULTIPLO DI OGNI NUMERO, ma semplicemente perchè la nozione di multiplo, per convenzione, esclude che si possa trattare con il numero 0.

Invece direi che nel caso i cui k valga 0 allora possiamo considerare 0 un suo multiplo dato che ogni numero è multiplo e divisore di se stesso. MA COME DETTO SOPRA POTETE CONSIDERARE SEMPRE k > 0 (quindi un tale case non si verificherà nei nostri test).


-- RobertoPetroccia - 15 Jan 2009

stampare la lista nell'esercizio 1

salve, le due liste del primo esercizio possono essere stampate da una funzione ausiliaria richiamata nel main, semplicemente per comodità? Grazie,

Davide


-- DavideFrazzetto - 15 Jan 2009

Re: stampare la lista nell'esercizio 1

Si, potete utilizzare una funzione ausiliaria per effettuare le stampe.

-- EmanueleFusco - 16 Jan 2009

Main dell'EX.2

non mi è ben chiaro cosa debba fare la funzione main del secondo esercizio. Leggendo il testo mi è sembrato che: 1 bisogna leggere prima di tutto un intero n non negativo 2 leggere n chiavi, dove se la chiave è positiva bisogna leggere anche un ulteriore dato da inseire nella lista, mentre se la chiave è negativa bisogna cancellare un elemento dall lista. Dall'esempio fatto sul foglio xro, mi sorge un dubbio leggo n=8(quindi in teoria dovrei leggere 8 chiavi positive e 8 valori da inserire nella lista) n=8 kiave (1) 10 val (1) 0.43 kiave (2) -1 val (2) non và letto kiave (3) 1 val (3) 6 kiave (4) 2 val (4) 3.45 kiave (5) -4 val (5) non va letto kiave (6) -2 val (6) non va letto kiave (7) 14 val (7) 2.46 kiave (8) 4 val (8) 12.03 C'è un 14 finale xchè? E' giusta la mia interpretazione?


-- Users.1243045 - 16 Jan 2009

Re: Main dell'EX.2

n=8|kiave(1)=10|val(1)=0.43|kiave(2)=-1 |val(2)=non và letto|kiave(3)=1|val (3)=6|kiave(4)=2|val(4)=3.45 |kiave(5)=-4|val(5)=non va letto|Kiave(6)=-2|val (6)=non va letto|kiave(7)=14|val(7)=2.46| kiave(8)=4|val(8)=12.03| C'è un 14 finale sarà la x o sbaglio? E' giusta la mia interpretazione?

-- Users.1243045 - 16 Jan 2009

Re: Re: Main dell'EX.2

Dopo aver letto n e poi n valori di chiavi ed eventuali altri valori (se la chiave è positiva) viene letto anche un intero x. Il 14 che dice lei è questo x, l'output è infatti dato dal massimo sbilanciamento e dal valore dell'elemento con chiave x, se presente nella tabella

-- RobertoPetroccia - 16 Jan 2009

Dubbio su liste Ex.1

Buonasera, vorrei sapere se è possibile (viene giudicato corretto) inserire gli elementi nelle due liste da dietro cioè in coda, quindi avendo le due liste invertite...e se non è possibile, posso usare una funzione ausiliaria che me le torni invertite??

-- NicolaDonato - 16 Jan 2009

Re: Dubbio su liste Ex.1

Le liste devono essere generate rispettando l'ordinamento non decrescente, pertanto gli inserimenti andranno effettuati nella posizione corretta in base al valore ricevuto in input (quindi in testa se l'elemento è più puccolo di tutti gli elementi presenti, in coda se è più grande e da qualche parte nel mezzo negli altri casi...).


-- EmanueleFusco - 16 Jan 2009

Re: Re: (senza titolo)
D'accordo per la lista *origine; ma quando SPOSTO gli elementi nellle liste *mult..... e *resto, li inserisco in ordine inverso...dalla cosa alla testa....dall'esempio, al posto di 5 30 40, stampo 40 30 5.....è consentito? Se non lo è, posso invertirli con una funzione ausiliaria?

-- NicolaDonato - 16 Jan 2009

Re: Re: Re: (senza titolo)

Adesso ho capito la domanda smile Si, in linea teorica potresti inserirli in ordine inverso e poi invertire la lista, ma sarebbe meglio effettuare gli inserimenti nell'ordine corretto (ad esempio usando una coda). Inserire gli elementi in testa e poi invertire la lista è comunque preferibile piuttosto che scorrere l'intera lista per ogni inserimento.

Comunque le liste al termine della chiamata di funzione devono essere ordinate.


-- EmanueleFusco - 16 Jan 2009

Esercizio 2, funzione inserisci

E' possibile dichiarare la funzione inserisci nel seguente modo:

void inserisci(Nodo * * tabella, int c, double v);

invece che:

void inserisci(Nodo * tabella[], int c, double v);

?


-- SimoneBronzini - 16 Jan 2009

Re: Esercizio 2, funzione inserisci

Le due dichiarazioni sono assolutamente equivalenti, pertanto usare l'una o l'altra non cambia nulla nel modo in cui dovrai implementare il corpo funzione ed effettuare chiamate alla funzione stessa. Comunque, mantieni il prototipo come presentato nel testo dell'esercizio.

-- EmanueleFusco - 19 Jan 2009

paramatro n esrcizio 2

Se l'intero n che il secondo esercizio prende in input è zero non dobbiamo stampare nulla...ma il valore x dobbiamo comunque prenderlo in input o una volta preso n=0 si termina il programma?

-- AlessandroColetta - 19 Jan 2009

Re: paramatro n esrcizio 2

Se n vale 0, potete terminare il programma immediatamente, senza leggere altri valori, e non dovrete stampare nulla. Se leggerete comunque anche il valore della chiave da stampare, non verrà considerato errore (ovviamente la chiave letta non sarà presente nella tabella - vuota - e quindi non deve comportare nessuna stampa).

-- EmanueleFusco - 19 Jan 2009

Segmentation fault Ex2

Dopo aver dichiarato il prototipi dati dall'esercizio, dopo aver letto n>0 , una chiave positiva e un valore double,mando in esecuzione la funzione inserisci nel seguente modo.Metto anche il codice delle dichiarazioni delle variabili,. Mi genera l'errore di segmentation fault nella funzione inserisci metto una stampa di controllo tipo printf("qui"); ma essa non viene viusalizzata
Nodo * tab[10]={NULL};
int n=0;
int chiave=0;
double valore=0;
...
Leggo n >0
Leggo chiave>0
Leggo valore di tipo double ed eseguo l'inserimento
prima però faccio stampare n,chiave,valore per accettarmi che siano giusti(infatti lo sono)
inserisci(tab,chiave,valore);
e mi genera l'errore dopo aver letto il double.

-- Users.1243045 - 19 Jan 2009

Re: Segmentation fault Ex2

senza avere il codice della funzione che causa il segmentatio fault non è facile risponderti... comunque in linea di massima, mi immagino che tu abbia tentato di memorizzare i valori passati in input risolvendo una variabile di tipo puntatore a nodo inizializzata a NULL (quindi senza averla assegnata ad un'area di memoria allocata con una malloc).

-- EmanueleFusco - 19 Jan 2009

Ex.1 Caso particolare: stampare lista vuota

Se in input diamo solo multipli o divisori oppure sono tutti resti il programma mi va in segmentation fault.... mi chiedo se voi considererete la possibilità che la lista effettivamente non si divida, e cosa fare per risolvere questo caso

-- EmanueleMungai - 19 Jan 2009

Re: Ex.1 Caso particolare: stampare lista vuota

Allora... capire perchè un programma va in segmentation fault senza leggerlo richiede doti divinatorie di cui sono sprovvisto wink

Comunque, se il problema si presenta nel caso in cui una lista è vuota, è probabile che tu stia cercando di accedere a dei campi di un elemento Nodo, usando un puntatore inizializzato a NULL (tradotto, prima di cercare di leggere un campo di uno struct risolvendo una puntatore, dovete controllare che non punti a NULL).


-- EmanueleFusco - 19 Jan 2009

Re: Re: Ex.1 Caso particolare: stampare lista vuota
ma se la lista è vuota è normale che la testa punti a NULL (o perlomeno io l'ho inizializzata a NULL) e non contenendo alcun elemento mi va in segmentation fault se provo a stampare la lista vuota.....
void stampalista (Nodo* ptesta)
{
   if(ptesta==NULL){
         return;}
while(ptesta->succ!=NULL)
   {
      printf("%d ", ptesta->val);
      ptesta=ptesta->succ;   
   }   
      printf("%d", ptesta->val);
}
-- EmanueleMungai - 19 Jan 2009
Re: Re: Re: Ex.1 Caso particolare: stampare lista vuota
Quello che diceva Emanuele è che se provate ad accedere al campo val o succ di un elemento NULL avete un errore di segmentation fault, quindi prima di eseguire istruzioni del tipo h->val o h->succ dovete assicurarvi che h non sia NULL come nella funzione stampa da lei descritta.

-- RobertoPetroccia - 19 Jan 2009

problema elementi succ nella ricorsione

Nel primo usando la ricorsione e andando a stampare con la chiamata a funzione per la stampa dal main...le teste mi danno null.....il problema è che non riesco a tornare indietro con la ricorsione alla testa delle liste.... se provo a mettere nella ricorsione un elemento successivo ad esempio:

funzione(lista->succ);

...mi da errore.... posso dichiarare nel main due nodi? che puntano alla teste delle due liste???o non è possibile???perchè non so come risolvere questo problema...


-- MarcoBernardi - 19 Jan 2009

Re: problema elementi succ nella ricorsione

Sicuramente tutti i parametri passati alla funzione devono essere dichiarati nel main e poi passati in maniera appropriata alla funzione. Dovete stare attenti a quando modificate le teste delle liste per il fatto che il C usa la call by value, se volete modificarle o ritornate le nuove teste oppure usate il passaggio dei parametri all funzione per riferimento. Se le teste continuano ad essere NULL vuol dire che non ha aggiornato i loro valori.

-- RobertoPetroccia - 19 Jan 2009

Se la chiave non c'è?

Nel secondo esercizio cosa dobbiamo stampare se la chiave inserita alla fine non è stata inserita precedentemente e quindi la lista che le corrisponde è vuota?

-- SimoneBronzini - 19 Jan 2009

Re: Se la chiave non c'è?

Se la chiave cercata non è presente nella tabella, verrà stampato solo il massimo sbilanciamento.

-- RobertoPetroccia - 20 Jan 2009

(senza titolo)

error: request for member ‘succ’ in something not a structure or union

questo è l'errore che mi viene detto passando alla funzione l'elemento successivo cosi significa???


-- MarcoBernardi - 20 Jan 2009

Re: (senza titolo)

Stando a quello che dice l'errore pare che lei provi a chiedere l'accesso al campo succ a qualcosa che non ha tale campo e che per di più non è né una struttura né un'unione (quindi un tipo di dato con campi al proprio interno). Controlli che la variabile su cui chiede il campo succ sia in effetti una struttura che contiene tale campo.

-- RobertoPetroccia - 20 Jan 2009

Tipo Inserimento esercizio 2

Mi scusi professore, ma come va fatto l'inserimento? in modo ordinato crescente o decrescente, in testa o coda?? grazie

-- GiuseppeImperato - 20 Jan 2009

Re: Tipo Inserimento esercizio 2

Per il primo esercizio viene richiesto che "tutti gli elementi devono essere inseriti nelle liste rispettando l’ordinamento non decrescente per il campo val". Per il secondo esercizio potete inserire gli elementi nelle liste come volete, sta a voi capire il modo più intelligente (se ce ne è uno) rispetto alle operazione da eseguire sulla tabella.

-- RobertoPetroccia - 20 Jan 2009

domanda home1: -1 finale, ed output

salve, prima domanda: se l'utente inserisce come primo valore -1, la lista sarà vuota, ma il programma dovrà prendere in questo caso il valore k, oppure se si inserisce subito -1 il prog deve terminare senza bisogno del k? seconda domanda: va bene formulato così il codice per l'output?i valori di ogni lista separati da uno spazio e le due liste una a capo dell'altra....grazie
.
.
stampa(multipli_e_divisori);
printf("\n");
stampa(resto);
.
.

-- MarioGreco - 20 Jan 2009

Re: domanda home1: -1 finale, ed output

La risposta alla prima domanda la trova sopra (abbiamo già risposto), per la seconda l'output così organizzato va bene.

-- RobertoPetroccia - 20 Jan 2009

(senza titolo)

ah capito scusate ma mi ero dimenticato che chiamavo il successivo di un nodo NULL chiedo venia per la distrazione grazie mille

-- MarcoBernardi - 20 Jan 2009

Suggerimento sull'identificare una lista vuota EX 2

Avendo all'inizio dell'esercizio una lista vuota, se la passassi alla funzione trova mi ritornerebbe un errore...

non potendo passargli un puntatore a NULL (sarebbe stato un buon modo per identificarla, ma se passassi poi lo stesso valore a INSERISCI incorrerei nel grosso problema di non riuscire ad avere mai un puntatore ne tanto meno a poter inserire qualcosa nella lista), volevo sapere se posso inizializzare la lista a un valore "non possibile"...tipo:

Nodo lista[SIZE]={{(-1),0.00,NULL}};

visto che la chiave non può essere negativa

(ho fatto una cosa simile a questa nell'esercizio uno inizializzando la lista vuota a Nodo originList={(-1),NULL}; ) Va bene come metodo?(ottengo il puntatore alla lista e posso identificare se è vuota)

Gia che ci sono, nell'esercizio 2 devo supporre che non verrà passata mai una chiave pari a 0? (sarebbe impossibile eliminarla)


-- FrancescoBelladonna - 20 Jan 2009

Re: Suggerimento sull'identificare una lista vuota EX 2

La funzione trova non prende in input una lista, bensì un vettore di puntatori. Anche se il tipo di dato del primo argomento della funzione vi permette di passare come argomento alla funzione un puntatore alla lista per riferimento, concettualmente le due cose non coincidono. In particolare, individuare l'indice nel vettore che identifica la lista in cui cercare l'elemento al momento della chiamata e poi passare l'indirizzo della cella alla chiamata alla funzione trova è concettualmente SBAGLIATO. L'individuazione della lista in cui cercare l'elemento deve essere fatta all'interno della funzione trova.

Per quanto riguarda le liste vuote, invece, queste dovranno sempre essere rappresentate come puntatori a NULL e non come elementi con valori particolari.


-- EmanueleFusco - 20 Jan 2009

Problema malloc

Salve professore, ho un problema con la malloc, in quanto non mi alloca memoria, ovvero, il puntatore 'testa' che dovrebbe ricevere l'indirizzo, è sempre a NULL. Ho incluso le librerie stdio.h, malloc.h, stdlib.h. Non so proprio cosa fare, anche cercando in internet non ho trovato una soluzione. Lei ha qualche idea? smile

Qui sotto le posto il codice che ho usato per verificare se 'testa' è a NULL.

testa=malloc( sizeof(Nodo) );
if(testa!=NULL){
   printf("testa!=null");
}

-- DamianoIlacqua - 21 Jan 2009

Re: Problema malloc

Il codice da lei scritto sembra corretto, o più precisamente quello sotto descritto. Con questa istruzione sta creando un nuovo elemento di tipo Nodo puntato da testa. A questo punto testa dovrebbe punatare alla nuova memoria allocata e non più a NULL se la malloc è riuscita ad allocare tale memoria. Provi a mettere lo \n nella stampa per forzare il print a schermo. Non ci sono grosse cose da dire a riguardo e non posso credere che il suo computer non abbia memoria per allocare un elemento di tipo Nodo. Riprovi e mi faccia sapere.
Nodo* testa = NULL;
testa=(Nodo*)malloc( sizeof(Nodo) );
if(testa!=NULL){
   printf("testa!=null\n");
}
-- RobertoPetroccia - 21 Jan 2009

Re: Re: Suggerimento sull'identificare una lista vuota EX 2

C'è un problema: avendo il puntatore a NULL alla lista vuota, come faccio a modificarla (in teoria dovrebbe essere modificata tramite tale puntatore...ma se punta a NULL nella funzione, non potrò mai modificarla, anche perchè la lista è per forza vuota inizialmente)

Mi spiego meglio: la funzione separa_liste (dell'esercizio 1) ad esempio, ha tre liste come puntatori, la prima ha valori (origine) e le altre due sono necessariamente puntatori NULL. Detto questo, come farò poi a modificarle all'interno di una funzione? (essendo NULL, ribadisco che non ho alcun puntatore ad esse)


-- FrancescoBelladonna - 21 Jan 2009

Re: Re: Re: Suggerimento sull'identificare una lista vuota EX 2
L'esempio che ho riportato prima non era molto corretto (effettivamente io sono SICURO che due liste siano vuote alla chiamata di funzione), però invece nell'esercizio 2, io devo inserire i valori nella lista tramite la funzione "inserisci", ora, all'inizio la lista sarà totalmente vuota e io non posso passare NULL come parametro alla funzione (altrimenti quella non inserirebbe mai nessun valore), ma per controllare dove va inserito il prossimo nodo, dovrò fare i soliti listaPtr->succ ...e incorrerei nel grosso problema se listaPtr è vuoto...(e non null, ammenoche nn lo inizializzo come tale)

-- FrancescoBelladonna - 21 Jan 2009

Re: Re: Re: Re: Suggerimento sull'identificare una lista vuota EX 2

Lei può controllare se una lista è vuota semplicemente controllando che il puntatore alla testa di tale lista sia diverso da NULL. Inizialmente il puntatore sarà NULL ma poi per effetto delle chiamate alla funzione inserisci tale puntatore verrà aggiornato.

-- RobertoPetroccia - 21 Jan 2009

Re: Re: Re: Re: Suggerimento sull'identificare una lista vuota EX 2

La ringrazio, adesso ho capito! Senta visto che venerdi 23 il server andrà down alle 8 di sera (come sempre) è possibile rimandare la consegna del compito a sabato alle 12?(perdiamo 4 ore, in piu molta gente torna a casa per quell'ora circa!)

-- FrancescoBelladonna - 22 Jan 2009

Re: Problema malloc

Professore, purtroppo non va neanche così. Non so cosa fare, vorrei scrivere il programma, però se poi non gli viene assegnata memoria, è solo codice sprecato. Mi rendo conto che è una cosa molto bizzarra e con la quale io stesso non ne avevo mai avuto a che fare. Lei non ha suggerimenti/consigli in merito? Mi faccia sapere. smile

-- DamianoIlacqua - 22 Jan 2009

Re: Re: Problema malloc

Se il codice postato da Roberto non causa la stampa della stringa "testa!=NULL" c'è qualcosa di molto strano sullla macchina che stai utilizzando... in questo caso prova ad utilizzarne un'altra...

-- EmanueleFusco - 22 Jan 2009

Conferma esercizio 2

Giusto una conferma volevo: ottenere l'index della lista, bisogna fare chiave%10, quindi se come chiave è passato 100, l'index è 0?

-- FrancescoBelladonna - 22 Jan 2009

Re: Conferma esercizio 2

Si...

-- EmanueleFusco - 22 Jan 2009

Re: Re: Re: Problema malloc
Ok, a questo punto credo non consegnerò quest'hw...

-- DamianoIlacqua - 22 Jan 2009

Re: Re: Re: Re: Problema malloc

Se hai dei problemi particolari e modo di venire in dipartimento in giornata puoi venire a chiedermi spiegazioni alla stanza 301 (avvisami con una mail a fusco[at]di.uniroma1.it nel caso).

-- EmanueleFusco - 22 Jan 2009

X Damiano problema malloc

Ciao mi scuso sin d'ora se rispondo, ma volevo solo suggerire a damiano di fare una prova stampando (dopo la malloc) direttamente il contenuto di t come da codice sotto.

Un saluto


Nodo * t=malloc( sizeof(Nodo) );
printf ("t %p \n", t);
-- LuisaDiDionisio - 22 Jan 2009

Re: Problema malloc

@ Prof. Fusco: Purtroppo non ho possibilità di venire a roma in giornata comunque, per qualsiasi problema, se lei acconsente mi segno il suo indirizzo di posta elettronica.

@Luisa Di Dionisio: Il codice che mi hai suggerito effettivamente restituisce un indirizzo di memora (0x...).

Ora mi domando, se il problema non sia intermittente. Non so, fino a poco fa non andava, ora va. Forse è il caso di eseguire un bel format e reinstallare tutto. Ora formatto e, se vedo che il problema non si ripresenta, mi metto a scrivere il codice. Comunque sia, volevo fare una domanda ai prof: Se funziona, potrei avere una proroga per cortesia? Anche se mi mettessi subito dopo il format a scrivere codice, so già che non ce la farò entro le 8 di domani sera, dunque mi chiedevo se posso consegnarlo come termine ultimo lunedi. Aspetto notizie, così appena ricevute formatto e mi metto a scrivere. smile

printf("Grazie della comprensione");
-- DamianoIlacqua - 22 Jan 2009

Re: Re: Problema malloc

Non ci saranno proroghe alla data di consegna. Avete avuto parecchio tempo per completare questo homework, e ormai siamo vicini agli esami.

-- EmanueleFusco - 22 Jan 2009

Re: Problema malloc

Perfetto, vedrò di consegnare almeno il primo esercizio. Grazie dell'attenzione.

-- DamianoIlacqua - 22 Jan 2009

Esercizio 2, allocazione di memoria della tabella

essendo all'inizio il puntatore alla tabella NULL, per allocare la memoria della tabella (quindi un array di tipo Nodo dimensione 10) devo usare questa sintassi?
NodoPtr test;
test=malloc(sizeof(Nodo[10]));
-- FrancescoBelladonna - 22 Jan 2009

Re: Esercizio 2, allocazione di memoria della tabella

Errore mio, avevo capito che la struct era di dimensione 10 mentre è il puntatore di size 10...

Posso inizializzare tutto l'array di puntatori a NULL?


Nodo *test[SIZE]={NULL};
-- FrancescoBelladonna - 22 Jan 2009

Re: Re: Esercizio 2, allocazione di memoria della tabella

Credo che l'istruzione per inizializzare il vettore funzioni anche se vi consiglio sempre di controllare. Io essendo tradizionalista preferisco sempre un bel for in cui inizializzo tutte le caselline del mio vettore. In questo modo è sicuro che funzioni.

-- RobertoPetroccia - 22 Jan 2009

Re: Re: Re: Esercizio 2, allocazione di memoria della tabella

Non posso darle torto, anche io tendo a fare cosi (anche se SI funziona, almeno sulla mia macchina), non sono programmi cosi vasti da richiedere performance...

-- FrancescoBelladonna - 22 Jan 2009

Info primo homework

Salve professore, Domandina veloce smile Per quanto riguarda i divisori e multipli io l'elemento 0 l'ho escluso dall'essere sia un divisore che un multiplo del numero inserito è corretto ?

Per quanto riguarda le liste "multipli" e "resto"... Io prima ho creato la lista origine riempita con i dati dunque a questa ho legato la lista multipli e una volta elaborata la lista multipli o legato la lista resto a questa creando quindi delle code. E' quello che era possibile realizzare e che volevate? smile


-- AlainBucci - 22 Jan 2009

Re: Info primo homework

per multipli e divisori è corretto escludere 0 sia come multiplo che come divisore. Quello che dici sulle liste mi risulta poco comprensibile. Hai in pratica creato un'unica lista che contiene prima la sequenza in input, poi la sequenza dei multipli e quindi la sequenza dei divisori? Se si, non va bene. A partire dalla lista contenente la sequenza in input avresti dovuto generare le due liste, quella dei multipli e quella dei divisori, spostando gli elementi della lista origine nelle due liste di destinazione.

-- EmanueleFusco - 22 Jan 2009

Re:Re: Info primo homework

ho creato un legame tra tutte le liste avendo come ultimo nodo della prima l'inizio della successiva. Praticamente ho realizzato una lista origine, una volta finito gli input ho una lista con nodo->succ di valore di terminazione NULL dunque elimino il valore null dall'ultimo nodo della lista origine alloco memoria a questo e assegno il puntatore a *multipli_e_divisori avendo dunque una lista in creazione nuova di zecca ma che parte dalla fine di un'altra lista. Questa lista multipli crescerà a seconda della necessità di informazioni dunque farà lo stesso con la lista resto collegandola dopo aver finito all'ultimo nodo della lista multipli e assegnando al puntatore *resto l'ultimo nodo della lista multipli ed elaborando anche questa.

Dunque alla fine mi ritrovo con due liste *multipli_e_divisori *resto con i valori richiesti pronti da stampare a schermo e la lista origine con il nodo impostato a NULL

Ho fatto così perchè ho letto: la funzione separa_liste (o eventuali funzioni ausiliarie da essa invocate) NON deve allocare nuova memoria ma modificare i campi succ degli elementi della lista * origine per costruire le due nuove liste.

L'ho inteso come crea la lista origine riempila accodagli un'altra lista elaboralala con i dati riempiendola se necessario e poi ancora un'altra la "resto"riempiendola se necessario...

Altrimenti avrei creato due nuove liste semplicemente separate da qualsiasi altro nodo smile Il programma funziona avendo le due liste separate e la origine a null e rispecchia i parametri di input output spero di essere stato esplicativo smile


-- AlainBucci - 22 Jan 2009

Re: Re:Re: Info primo homework

Quello che hai fatto non è corretto. Avendo gli elementi della lista origine non è necessaria alcuna nuova allocazione di memoria. Gli elementi della lista vanno spostati. Peraltro, se tu allochi nuova memoria su un puntatore e poi assegni questo puntatore al valore di un puntatore esistente, la nuova memoria allocata diventa inaccessibile (non hai più un riferimento per sapere dov'è) e non saresti in grado di liberarla.


-- EmanueleFusco - 22 Jan 2009

Re: Re:Re: Info primo homework

lo snodo che ho fatto funziona così

|--------|---------|-------

po pm pr

puntatore origine puntatore multipli puntatore resto quindi sò a che indirizzo di memoria poter accedere per ogni lista che inizia.

Se mi dici che gli elementi della lista vanno spostati significa che devo creare altre due liste ciò significa che devo allocare altra memoria per altre due liste devo creare altre due Teste separate dalla prima e non successive come ho letto nel testo.Ma sicuramente ho qualche error di comprensione del testo XD p.s a proposito ma la memoria dell'origine alla fine che non è + utilizzabile prima di nullare il puntatore come descritto dall'homework devo liberarla ? Sul secondo ex lo dice sul primo no


-- AlainBucci - 22 Jan 2009

DATA CONSEGNA!

RIBADISCO QUELLO CHE A DETTO IL COLLEGA:

...E VENERDI MATTINA ABBIAMO UN'ESAME!!!!!!!!! QUELLE 4 ORE VALGONO ORO!!!!

"visto che venerdi 23 il server andrà down alle 8 di sera (come sempre) è possibile rimandare la consegna del compito a sabato alle 12?(perdiamo 4 ore, in piu molta gente torna a casa per quell'ora circa!) !!!!!!!!!!!!!!!!!!!!!!!"


-- LicinioChingotuane - 22 Jan 2009

Re: DATA CONSEGNA!

La consegna NON VERRA PROROGATA. Questa è l'ultima risposta che darò a domande di questo genere.

-- EmanueleFusco - 22 Jan 2009

Re: Re: Re:Re: Info primo homework

Allora, lo spostamento degli elementi di una lista fa si che NON serva alcuna nuova allocazione di memoria. Lo spostamento richiede solamente la corretta assengazione dei puntatori. Ad esempio, eliminare un elemento da una lista significa modificare il campo next del suo predecessore (o la testa della lista se necessario). Inserire un elemento esistente in una lista significa far si che il campo next del suo predecessore nella lista lo punti e che il campo next dell'elemento inserito punti al suo successore nella nuova lista.

-- EmanueleFusco - 22 Jan 2009

Re: Re: Re:Re: Info primo homework

Forse ho capito.... chiede praticamente di creare una nuova lista sfruttando i puntatori a nodi già esistenti? Tipo sò che per primo mi serve lo snodo secondario di origine lo prendo e lego i nodi rimanenti per permettermi di scorrerlo senza troncare la lista origine... dunque lo assegno a multipli e divisori come testa... dunque trovo gli altri e li lego? smile devo solo utilizzare i snodi già esistenti per crearne uno nuovo con testa *multipli_e_divisori? smile e l'altro *resto giusto? spero sia così non trovo altre soluzioni smile

Primo homework: la stampa delle due liste và bene se la effetuo così? printf("%d ",mdiv->val); printf("%d ",rest->val); è solo un esempio di come effettua la stampa del singolo valore non della lista XD facendo così sono separati tutti da uno spazio ma l'ultimo elemento stampato ha uno spazio dopo di se.. o se metto un carattere di nuova linea và a capo dopo l'ultimo carattere stampato... và bene o devo eliminarlo non vorrei lo prende come valore di risultato il vostro test O_O

Sul secondo homework mi domandavo se inserisco una chiave negativa la ricerca della chiave da eliminare nella tabella essendo sempre positive dovrò prima convertire il numero da negativo a positivo per poi cercare quella corrispondente esatto? smile


-- AlainBucci - 22 Jan 2009

Stampa secondo esercizio

mi scusi professore mi sorge un dubbio... Ma se io inserisco N=1, e c=-4 devo inserire anche la x? in tala caso la stampa come sarà?


-- GiuseppeImperato - 22 Jan 2009

Re: Stampa secondo esercizio

La x va inserita, poi se no è presente nella tabella non stampare il suo valore. Se tutte le liste sono vuote il massimo sbilanciamento direi sia zero.

-- RobertoPetroccia - 23 Jan 2009

Consegna

Rispetto la decisione di non prorogare la data di consegna ma credo sia anche giusto rispettare la data sul PDF. Se fosse possibile inviare i codici via mail (come quando ci ritorna il nostro per la conferma) la scadanza resterebbe invariata.

-- BrandoDeBenedictis - 22 Jan 2009

Re: Consegna

Bene ... vediamo di risolvere questo tasto dolente della consegna. Ho parlato questa mattina con i tecnici e mi hanno ASSICURATO che questa sera non ci sarebbero stati problemi sulla macchina twiki, quindi dovreste poter consegnare entro la mezzanotte come sempre. Nel caso dovesse succede qualcosa E SOLO IN QUESTO CASO vi dico di mandare le soluzioni via mail al mio indirizzo (petroccia@diNOSPAM.uniroma1.it) e poi mi occupo io di sistemare le cose. Create ovviamente una cartella con il vostro username su twiki, al suo interno un'ulteriore cartella con nome hw5 e in hw5 mettete i vostri file .c. Se twiki funziona e qualcuno o tanti di voi mi mandano le soluzioni via mail cestino tutto.

Ci tengo a sottolineare che quanto detto da Emanuele (concordato nei giorni passati con me) non è barbaria o non voler tenere in considerazione le vostre esigenze. Il fatto è che (oltre ad aver avuto abbastanza tempo per implementare le soluzioni e capendo che in genere vi riducete sempre sotto deadline per la consegna) la scadenza è vicina alle date di esame, ci occorre il tempo per correggere e valutare i vostri homeworks e per potervi dire come sono andati prima che sosteniate l'esame. E' vostra necessità sapere se siete esonerati dalla prova di laboratorio il prima possibile. Per via di queste necessità la deadline non può essere spostata, ma come detto sopra invece che fino alle 20.00 avete tempo fino alle 24.00


-- RobertoPetroccia - 23 Jan 2009

Se n è 0 nell'esercizio 2...

stampo unicamente "0"? (non viene memorizzata nessuna coppia, quindi non vi è nessun valore e lo sbilanciamento è necessariamente 0!)

Un'altra cosa, io in entrambi gli esercizi ripulisco tutta la memoria allocata dopo aver stampato ciò che è stato richiesto, va bene lo stesso? (nell'esercizio 2 la pulisco anche con la funzione elimina, ma alla fine per sicurezza ho fatto fare anche una pulizia di quel che è rimsato), valgrind mi dice che non ci sono "leaks", infatti a ogni malloc corrisponde un free, va bene così?


-- FrancescoBelladonna - 23 Jan 2009

Re: Se n è 0 nell'esercizio 2...

Se non ci sono coppie, come dice giustamente lei, il massimo sbilanciamento è zero, quindi tale valore va stampato. Non essendoci elementi nelle liste la chiave x letta in input non verrà trovata e quindi il valore corrispondente all'elemento con chiave x non può essere stampato. Quindi in output avrete un solo valore che è 0 (il massimo sbilanciamento)

-- RobertoPetroccia - 23 Jan 2009

Sbilanciamento

Se le liste sono tutte vuote lo sbilanciamento è 0 ? O non stampiamo nulla?

-- BrandoDeBenedictis - 23 Jan 2009

Re: Sbilanciamento

Stampate 0.

-- RobertoPetroccia - 23 Jan 2009

Re: Sblilanciamento

....SCUSATE....

-- BrandoDeBenedictis - 23 Jan 2009

Hw 2

Dobbiamo considerare anche il caso di un "n" negativo?

-- BrandoDeBenedictis - 23 Jan 2009

Consegna

Allora... sempre nel caso ci dovessero essere problemi con il twiki (e solo in quel caso e comunque entro mezzanotte), la consegna via mail per il canale AD dovreste farla al mio indirizzo di posta fusco[at]di.uniroma1.it


-- EmanueleFusco - 23 Jan 2009

Re: Se n è 0 nell'esercizio 2...

... per quanto riguarda la "pulizia" della memoria prima dell'uscita dal programma, non è necessaria in quanto al termine dell'esecuzione tutta la memoria allocata viene comunque liberata. Potete comunqe, se preferite farlo, deallocare tutte le strutture dati allocate dopo aver effettuato le stampe.

-- EmanueleFusco - 23 Jan 2009

esercizio 2 piu valori alla stessa chiave

scusate ma se una chiave viene ripetuta più di una volta con campo val diversi e quella chiave è proprio la x quale valore devo stampare? esempio 2 17 4 17 8 17 stampo il 4 o l'8?

-- TaniaIelpo - 23 Jan 2009

Re: esercizio 2 piu valori alla stessa chiave

Non possono esistere 2 nodi con la stessa chiave, nel tuo caso la funzione inserisci cancellerebbe il 4 con l'8.


-- BrandoDeBenedictis - 23 Jan 2009

homework2

Domanda! Mi chiedo ma se nell'homework 2 se inseriamo da subito 0 per N quindi abbiamo 0 valori da inserie il maxsbilanciamento che sarà 0 và stampato ugualmente?E la X in caso N=0 la faccio inserire ugualmente?

Perchè io come logica se tendo ad analizzare 0 valori è inutile creare una tabella... se altrimenti è così correggo subito! Attendo ansiosamente una risposta anche perchè dovrei riconsegnare in caso di modifica! Aggiungo Primo homework: la stampa delle due liste và bene se la effetuo così? printf("%d ",mdiv->val); printf("%d ",rest->val); è solo un esempio di come effettua la stampa del singolo valore non della lista XD facendo così sono separati tutti da uno spazio ma l'ultimo elemento stampato ha uno spazio dopo di se.. o se metto un carattere di nuova linea và a capo dopo l'ultimo carattere stampato... và bene o devo eliminarlo non vorrei lo prende come valore di risultato il vostro test O_O?


-- AlainBucci - 23 Jan 2009

Re: homework2

Visto che sono buono ed è l'ultimo homework rispondo anche se ho risposto alla stessa domanda qualche minuti fa. Usare una pagina visibile a tutti serve anche ad evitare di rispondere più volte alle stesse domande. Dopo questa precisazione ecco la risposta. Non inserire nessuna coppia, oppure inserire delle coppie ed eliminarle tutte, comporta avere tutte le liste della tabella vuota, quindi il massimo sbilanciamento è zero e va stampato. Il valore x va cmq letto in input e se non presente (perché le liste sono vuote o perché non trovato) non viene stampato ed in output avremo solo il valore per il max sbilanciamento, altrimenti in output avremo sia sbilanciamento che campo val dell'elemento con chiave x. Spero di essere stato chiaro ed aver precisato eventuali altri dubbi

-- RobertoPetroccia - 23 Jan 2009

Re: Re: homework2

Mi scusi XD ho passato tutta la notte a farli per accellerare i tempi e non mi sono accorto O_O!! Aggiungo una domanda: Primo homework: la stampa delle due liste và bene se la effetuo così? printf("%d ",mdiv->val); printf("%d ",rest->val); è solo un esempio di come effettua la stampa del singolo valore non della lista XD facendo così sono separati tutti da uno spazio ma l'ultimo elemento stampato ha uno spazio dopo di se.. o se metto un carattere di nuova linea và a capo dopo l'ultimo carattere stampato... và bene o devo eliminarlo non vorrei lo prende come valore di risultato il vostro test O_O? ?

-- AlainBucci - 23 Jan 2009

Re: Re: Re: homework2

Gli elementi devono essere separati da UNO ED UN SOLO spazio oppure vai a capo tra di loro. Eventuali vai a capo o spazi prima del primo valore stampato o dopo l'ultimo valore stampato vengono ignorati

-- RobertoPetroccia - 23 Jan 2009

home2, caso n=0 e risposte una il contrario dell'altra :|..quale è giusta?

EDIT: ho scritto la domanda poco dopo l'inserimento della risp del prof.. scusate... ora ogni dubbio è chiarito... scusate ancora smile


-- MarioGreco - 23 Jan 2009

Re: home2, caso n=0 e risposte una il contrario dell'altra :|..quale è giusta?

ragazzi cercate di leggere prima di ripostare sempre la stessa domanda. 0 è per il secondo esercizio: in questo caso, senza valori nella tabella stampate solo lo sbilanciamento (che è 0 per la tabella vuota). Per il primo esercizio, il -1 come primo valore significa liste vuote, e in questo caso non dovete stampare nulla.

-- EmanueleFusco - 23 Jan 2009

Re: Re: Re: Re: homework2

ok grazie smile ho modificato subito facendo inserire anche la x nonostante sia n=0 e stampando il maxsbilanciamento che sarà 0 smile grazie a tutti i professori per la cortesia e pazienza smile

-- AlainBucci - 23 Jan 2009

Ex 2....val

Per la variabile val noi prendiamo da input un double e lo dobbiamo ristampare("nel caso che la chiave giri") con solo 2 decimali?????

-- BrandoDeBenedictis - 23 Jan 2009

Re: Ex 2....val

si

-- EmanueleFusco - 23 Jan 2009

Sempre Ex2

Mentre per "n" e per "x" possiamo assumere che non vengano mai inseriti valori negativi?

-- BrandoDeBenedictis - 23 Jan 2009

Re: Sempre Ex2

Anche leggere la traccia è importante. Nel secondo esercizio si dice che n avrà valori interi non negativi, mentre x ha valore intero. E tra le precedenti risposte abbiamo già detto che considereremo x > 0.


-- RobertoPetroccia - 23 Jan 2009

CHIARIMENTI EX.2 se n=0

C'è stata una discordanza tra le risposte nel caso di n=0. Ho appena visto che in precedenza Emanuele ha detto che per n=0 non si sarebbe dovuto stampare nulla, mentre secondo me lo sbilanciamento andrebbe stampato cmq. Per evitare problemi di questo tipo non effettueremo test con n=0 in maniera tale da non penalizzare nessuno.

-- RobertoPetroccia - 23 Jan 2009

Re: Re: Sempre Ex2
Si per la "n" l'avevo letto sulla traccia mentre non avevo notato il post sulla x. Ok quindi nessun controllo su questi casi..

Grazie per le risposte


-- BrandoDeBenedictis - 23 Jan 2009

Puntualizzazione chiave

Scusate ho capito che k sarà >0, n=0 non sarà valutato e x sarà >0. Non ho capito però se il valore chiave potrà assumere il valore 0 oppure sarà sempre >0 (per l'inserimento) e <0(per l'eliminazione). Grazie

-- GianlucaCarroccia - 23 Jan 2009

Re: Puntualizzazione chiave

cito PDF :"valori delle chiavi pari a zero non sono ammessi e non verranno mai presentati come input"

-- BrandoDeBenedictis - 23 Jan 2009

Puntualizzazione chiave

Mi scuso! Con tutte queste domande e questi valori ammessi o non ammessi per un attimo non ho capito più niente! wink

-- GianlucaCarroccia - 23 Jan 2009

printf e scanf di un double

Per stampare il valore double ho usato printf("%.2f"...);

per leggerlo invece ho usato scanf("%lf"...);

vanno bene questo due metodi o devo scrivere printf("%.2lf"...); ?


-- FrancescoBelladonna - 23 Jan 2009

Re: printf e scanf di un double

... per i double la stampa andrebbe fatta con il formato "%.2lf".

-- EmanueleFusco - 23 Jan 2009

Re: Re: printf e scanf di un double
Scusi professore sul libro per la specifica di conversione per la printf di un double da: " %f " (la stessa di un float)

E' un errore di stampa??

Quindi dobbiamo fare la printf con %.2lf o lasciamo %.2f ? (il risultato credo sia lo stesso)


-- BrandoDeBenedictis - 23 Jan 2009

ex1

Scusate ancora ma leggendo non riesco a trovare la risposta a una mia domanda. Se nell'esercizio uno inserisco subito -1 k poi và letto o lo posso saltare? Io ho saltato in caso sia -1 la lista la richiesta di inserire k è corretto? smile

-- AlainBucci - 23 Jan 2009
No such template def TMPL:DEF{PROMPT:thread}
Edit | Attach | Watch | Print version | History: r395 < r394 < r393 < r392 < r391 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r395 - 2009-01-23 - AlainBucci






 
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