---++ Domande (e risposte) sull' HomeWork5aa0203 * Inserite le vostre domande usando la form [[#form][in fondo alla pagina]] * Vedi anche: HomeWork5aa0203, SoluzioneHomework5aa0203, RisultatiHomework5aa0203. ---- %TOC% ---- ---+++ Traccia della chiamata ricorsiva Ok sono stupido! Ma cosa vuol dire? Non ho capito!! Cosa vuol dire.. Traccia della chiamata ricorsiva -- Comment added by Users.MatteoLaBella on 12 Nov 2002 Una funzione ricorsiva e' una funzione che puo' chiamare se stessa. E anche in questa nuova chiamata puo' chiamare se' stessa. Chiaramente, questo non puo' andare avanti all'infinito, perche' ogni volta si avvicina di piu' ad un caso elementare di cui conosce la risposta senza dover effettuare un'ulteriore chiamata a se stessa. In ognuna di queste chiamate, si scende di un livello di " profondita' ", che poi corrisponde al numero di chiamate lasciate ancora in sospeso in quel momento, e che nel caso del prof sono indicate con degli asterischi. Quindi, ad ogni nuova chiamata va stampato il livello di profondita' raggiunto. -- Comment added by Users.ArcangeloTripi on 12 Nov 2002 Grazie Arcangelo per l'ottima e concisa spiegazione! La traccia e' una cosa che mi sono inventato per evidenziare l'uso della ricorsione. -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Input e parametri di chiamata I parametri di chiamata sono esclusivi? O bisogna considerare anche una chiamata come: es4 -f 10 -v e/o es4 -v -f 10?? -- Comment added by Users.TizianoMorgia on 12 Nov 2002 Sono esclusivi. -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Fattoriale Non per fare i pignoli o i super matematici, ma dire che il fattoriale(0) = 0 non è un pò bruttino? non sarebbe meglio dire fattoriale(0) = 1?? -- Comment added by Users.MarcoEsposito on 12 Nov 2002 Accidenti, che svista, correggo subito! :-( -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Scusate Ma non sarebbe possibile posticipare la consegna? Così abbiamo a disposizione solo 5 giorni per provare a creare qualcosa, e sinceramente mi sembra pochino! :( --added by Users.MarcellaMancinetti 12 nov 2002 ---- in effetti concordo anche io...posticipiamo di qualche giorno la consegna...siamo a martedi sera e ancora non è stato pubblicato completamente l'esercizio.. -- Comment added by Users.LucaAngeletti1 on 12 Nov 2002 Fatto. -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Passare gli argomenti Non frequento il corso, e quindi ho un po' di difficoltà a seguire il percorso del programma di studi. Sul deitel l'argomento è trattato a pagina 477, verso la fine quindi. E' lì che devo andare a cercare, o è stato fatto qualcosa a lezione/esercitazione che mi sono perso? -- Comment added by Users.GermanoGuerrini on 12 Nov 2002 Lo spiego a lezione oggi. (e comunque nessuno vi impedisce di cercare da soli :-) ) -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ BUona Fortuna!!! buona fortuna per l'homework 4...mi sembra piu' difficile degli altri!!! :) -- Comment added by Users.EnricoDiPaolantonio on 12 Nov 2002 ---- ---+++ Mailing List mmh oserei dire: Iscrivetevi alla Mailing List, c'e' un box nella mia user-page su twiki o in alternativa mandate una e-mail vuota a gentemalata-subscribe@domeus.it -- Comment added by Users.EnricoDiPaolantonio on 12 Nov 2002 Ottima idea, ora spengo twiki, tanto non ne avete bisogno. -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ Risultato univoco per la serie di Fibonacci? Per quanto riguarda la traccia delle chiamate ricorsive della serie di Fibonacci, questa mi risulta diversa se uso qualcosa del tipo <verbatim> return fibonacci(n-1)---+ fibonacci(n-2); </verbatim> piuttosto che <verbatim> return fibonacci(n-2)---+ fibonacci(n-1); </verbatim> e questo e' evidentemente legato al fatto che l'ordine di valutazione degli addendi e' diverso nei due casi. L'output sarebbe diverso per due soluzioni corrette, e almeno una fallirebbe un test automatico. Oltretutto, se non ricordo male, il C non assicura nemmeno quale sia l'ordine di valutazione per le operazioni aritmetiche (ma non ne sono sicuro al 100%). E se questo e' vero, l'output potrebbe essere addirittura diverso per lo stesso codice su due compilatori diversi, o su due versioni diverse dello stesso compilatore. Il codice e' usato solo a scopo illustrativo, e non e' detto che sia quello reale. -- Comment added by Users.ArcangeloTripi on 12 Nov 2002 ---- E' proprio come ricordavo, a parte certe eccezioni il C non specifica in che ordine vengono valutati gli operandi di un operatore. E' scritto sul Kernighan & Ritchie, che Dio li abbia in gloria (anche se sono ancora vivi). Questo significa che in un'espressione come <verbatim> x = f()---+ g(); </verbatim> f puo' essere valutata prima di g o viceversa. La cosa non ha rilevanza se interessano solo i valori restituiti dalle funzioni, ma ha rilevanza se ci sono anche effetti collaterali, e nel nostro caso _ci sono_ effetti collaterali, ossia la stampa della profondita' di chiamata della funzione. Altro effetto collaterale puo' essere il mal di fegato di chi si trovi un *NO* grosso come una casa anche se ha scritto un algoritmo corretto. -- Users.ArcangeloTripi on 13 Nov 2002 Per essere sicuri dell'ordine potete calcolare separatamente i due valori usando due variabili di appoggio ed eseguire la somma successivamente. -- Users.AndreaSterbini - 13 Nov 2002 ---- ehm <verbatim> esercizio4.c:9: switch quantity not an integer esercizio4.c:10: case label does not reduce to an integer constant </verbatim> con le opzioni -m andrebbe usato getopt il che non e' carino, prof xche' nn riduce le opzioni a `char` semplice, invece che -`char`, dato che lo switch non sembra voler accettare un array di caratteri nei case? con il char semplice, non ci son problemi, altrimenti mi tocca togliere il - davanti al char e non mi pare carino complicarsi cosi' la vita... -- Comment added by Users.ValerioTesei on 13 Nov 2002 Leggi il secondo carattere. (suggerimento di Valerio Tesei) -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Qualche domanda <font color= blue> Mi scusi tanto prof. so che mi odierà perchè ogni volta che faccio un mio intervento sparo una serie infinita di domande, spero che lei sia così gentile da rispondermi a tutte o agran parte di esse :)</font> <font color= red> 1 è lecito usare la math.h ? 1 nel programma si deve solo lanciare un' opzione per volta oppure si può anche fare così: es4 -f 5 -v ? 1 si potrebbe posticipare la consegna(e lo chiedo anche a nome di tutti) per via della complessità e della lunghezza del programma? La ringrazio anticipatamente! :-) </font> -- Comment added by Users.CristianoMarra on 13 Nov 2002 1 OK per math.h ... aggiungero' l'opzione ==-lm== alla compilazione 1 Le opzioni vanno usate in modo esclusivo (una sola per volta). 1 fatto -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Riguardo le librerie ho passato un po' di tempo questa notte a pensare al programma (data la mia proverbiale insonnia) e ponderando, mi sono fatto una domanda simile a quella di sopra, per giungere alla conclusione che lei vuoi ci riscriviamo ogni funzione a mano (la storia del debug con gli *), ora sono convinto che ci faccia bene, anche se le math.h sono tanto carine, ho continuato i test in direzione di quello switch e l'unica soluzione, nella mia infinita ignoranza, e' stata di prendere agrv[1][1] per sapere il carattere dell'opzioni, difatti argv (argument valure) viene definita cosi: char **argv, mi corregga se sono in errore o se c'e' un modo migliore di affrontare il problema. -- Comment added by Users.ValerioTesei on 13 Nov 2002 Se usate math.h per non fare l'esercizio non imparate nulla ... e allora che ci siete venuti a fare a Informatica? %BIGGER% *Andate a zappare!!!* :-) :-) :-) :-) %FINE% -- Users.AndreaSterbini - 13 Nov 2002 ---- ---+++ Ancora sull'ordine di valutazione - domanda x Sterbini Non vorrei essere _pedantic_, ma visto che il risultato dipende dall'ordine in cui sono valutate le funzioni, quale ordine dobbiamo usare? Immagino che si debbano guardare le specifiche, e visto che e' scritto <verbatim> fibonacci(x) = fibonacci(x-1)---+ fibonacci(x-2) </verbatim> si debba procedere da sinistra a destra, calcolando prima fibonacci(x-1) e poi fibonacci(x-2), e che lo stesso valga per la funzione m, prima dall'alto verso il basso e poi da sinistra a destra, ma vorrei una conferma. Spero di non essere mandato a zappare o peggio per questa domanda. -- Comment added by Users.ArcangeloTripi on 13 Nov 2002 Accidenti alla mia linguaccia! :-) (ed alla vostra codina di paglia :-) ) ... ma gli smileys che ce li metto a fare? Hai ragione, seguite la specifica dell'esercizio. -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ fibonacci IO ho preso in esame che il primo numero di fibonacci è 1 il secondo 2 e il terzo 3 e il quarto 5, è giusto così o no? -- Comment added by Users.CristianoMarra on 13 Nov 2002 La sequenza di Fibonacci (matematico di diversi secoli fa) è: 1 1 2 3 5 8 13 21 ... -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ funzione 42 <font style= comic sans ms>riguardo la funzione 42 se io inserisco 2 la funzione f(x) = f(x-1)---+ 2*x che numero mi deve restituire?</font> GRAZIE :-) -- Comment added by Users.CristianoMarra on 13 Nov 2002 Direi che dovresti ottenere _f(2) = f(1)---+ 2*2 = f(0) * 2*1 + 2*2 = 42 + 2 + 4 = 48_ Con un output: <verbatim> 2 * 1 ** 0 48 </verbatim> -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ Al lavoro "Al lavoro al lavoro Cenerellaaaaaaaaaa!!!" Buon lavoro a tutti raga' :) Figo...finalmente ho imparato come mettere i parametri (santo deitel) -- Comment added by Users.EnricoDiPaolantonio on 13 Nov 2002 A pagina? -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ Testo Ese 5 Scusi prof, ma nella spiegazione dello svolgimento, del 5° ese, la funzione fibonacci, quando x=0, non dovrebbe essere 0 e quindi fibonacci(0) = 0 invece che fibonacci(0) = 1 come sta sul testo? Probabilmente, avendo letto una domanda simile sul fattoriale, le ha invertite, ed ha corretto solo la funzione fattoriale :) -- Comment added by Users.AndreaBandino on 13 Nov 2002 No, mi pare di ricordare la funzione correttamente ... cercate su Internet se volete essere proprio sicuri (le correzioni sono sempre bene accette, ho ancora voglia di imparare). -- Users.AndreaSterbini - 14 Nov 2002 Sul Deitel & Deitel, a pag 155, è riportato: fibonacci(0)=0 fibonacci(1)=1 fibonacci(2)=1 fibonacci(x)=fibonacci(x-1)---+ fibonacci(x-2) Mi sono permesso di scrivere il commento precedente, perchè ho letto questo; e quindi dovrebbe essere quando x = 0 la funzione = 0 e non = 1 :) -- Users.AndreaBandino - 14 Nov 2002 Vedo :-( ... ma per favore implementatela come l'ho detta senno' mi tocca riscrivere tutto l'esercizio. -- Users.AndreaSterbini - 15 Nov 2002 ---- ---+++ Conversione da char a int Per convertire una stringa nel corrispondente numero intero, lei ci consiglia di usare la funzione : sscanf(const char* stringa, const char* formato, ...) Esempio: int numero = 0; char * stringa = "42"; sscanf(stringa,"%d",&numero); /* a questo punto in numero c'e' il valore intero 42 */ invece della sscanf ho usato atoi..... va bene? poi un'altra domanda.... se il terzo parametro inserito fosse un negativo quindi la riga di comando sarebbe del tipo: es4 -f -5 il programma deve uscire o prender la parte senza segno dell'intero? grazie ancora :) -- Comment added by Users.ElisabettaDAiutolo on 14 Nov 2002 OK per ==atoi== I numeri negativi non fanno parte del dominio di definizione di nessuna delle funzioni (ovvero, non ve ne curate). -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ Trace per Fibonacci Salve prof. Mi potrebbe confermare che una chiamata alla funzione fibonacci(n) con le specifiche da le detatte si risolve in circa (n-1) * (n-2) chiamate ricorsive? Beh in ogni caso, potrebbe inserire l'output della trace che lei si aspetta x un fibonacci, che so, ad esempio di 8? grazie -- Comment added by Users.AlessandroCamillo on 14 Nov 2002 Ho messo la trace di Fibonacci. -- Users.AndreaSterbini - 14 Nov 2002 ---- ---+++ Esempi anche con la funzione m e fibonacci Mi scusi se la disturbo ancora(forse l'ultima perchè se la sua risposta coincide con i miei test) ci può fare un esempio di output anche per la funzione m e la funzione fibonacci, naturalmente con relativo input? se dalla sua risposta vedo che ho finito posso consegnare anche oggi o devo farlo per forza dopo il 20? La ringrazio tanto -- Comment added by Users.CristianoMarra on 14 Nov 2002 ---- Aspetta dopo il 20 sennò il tuo HW5 va a finire tra gli HW4 e fallisce tutti i test -- Comment added by Users.AndreaSterbini on 14 Nov 2002 ---- ---+++ passaggio parametri alle funzioni oltre all'intero inserito dalla riga di comando ossia argv[2] devo passare alle funzioni anche la profondita'.... questa resta invariata o varia tra i vari addendi ? (mi spiego ultimo = fibonacci((n-1),p)---+ fibonacci((n-2),p+1) e' corretta... OVVIO dopo aver incrementato la profonditaà :D Non ne esco... In esecuzione ho un loop fino a -174683 e poi un bel segmentation fault... sgrunt -- Comment added by Users.ElisabettaDAiutolo on 14 Nov 2002 ---- Io troverei piu' logico passare la stessa profondita' ai due addendi, e quindi scriverei (usando la tua notazione) <verbatim> ultimo = fibonacci((n-1),p)---+ fibonacci((n-2),p) </verbatim> ma mi pare che entrambe le interpretazioni siano compatibili con la specifica, che dice: "in ciascuna chiamata della funzione si abbia l'accortezza di incrementare la profondità di 1 prima di eseguire la chiamata ricorsiva e la stampa della traccia " in quanto non si capisce se la "chiamata" della specifica e' legata al fatto che si scende di un livello, come a me sembrerebbe piu' logico, o al fatto che semplicemente si effettua una nuova chiamata. In quest'ultimo caso, gli asterischi non descriverebbero la profondita' raggiunta, ma il numero di chiamate effettuate fino a quel momento (e forse nemmeno quello). Ancora una volta, un bell'esempio di output non ci starebbe male. -- Users.ArcangeloTripi - 15 Nov 2002 Ha ragione Arcangelo. -- Users.AndreaSterbini - 15 Nov 2002 ---- ---+++ Fibonacci f(n) = f(n-1)---+ f(n-2) per n>2 f(1) = f(2) = 1 cosi' per conoscenza.... (ho risolto) !!! >:-) -- Comment added by Users.ElisabettaDAiutolo on 14 Nov 2002 ---- ---+++ Esempi anche con la funzione m e fibonacci Concordo con il mio compagno di corso nel richiedere degli input e degli output esaustivi come esempio... grazie ;) -- Comment added by Users.ElisabettaDAiutolo on 14 Nov 2002 ---- Passate la stessa profondita' a entrambe le chiamate. Attenti che l'homework 5 non e' ancora definitivo! -- Comment added by Users.AndreaSterbini on 15 Nov 2002 ---- ---+++ Che Fare? Salve, frequento il canale A-D e ieri il Prof. Piperno ci ha esonerati dal fare l'esercizio 4 (quello delle stringhe) e quindi ci ha detto di svolgere l'attuale hw5...la mia domanda e': quando lo dobbiamo consegnare? entro il 20 o il 24? E poi , qualcuno mi può dire dove posso trovare qualcosa di più chiaro della mazza paginetta del deitel sul come passare i parametri da shell? Grazie in anticipo pierlooqup@infinito.it -- Comment added by Users.PierluigiCau on 15 Nov 2002 Io oggi ho spiegato sia le stringhe che il passaggio dei parametri. Sul Deitel sono spiegate. Perchè perdere l'occasione di imparare? :-) Direi che sia meglio che facciate l'esercizio 4 anche voi. -- Users.AndreaSterbini - 15 Nov 2002 ---- ---+++ Data Esame Salve, non riesco a trovare informazioni sulla durata complessiva del corso. Da Settembre a.... ? Qulcuno è riuscito a configurare il winmodem con la RedHat?. Dove posso trovare informazioni? grazie :) maxx -- Comment added by Users.MassimoCiappina on 15 Nov 2002 ... a natale/inizio gennaio, come tutti i corsi del primo semestre. -- Users.AndreaSterbini - 15 Nov 2002 ---- ---+++ Funzioni mutuamente ricorsive Visto che m chiama g e g chiama m e che il compilatore deve conoscere una funzione prima di poterla usare in un'altra funzione, dovete inserire il prototipo di g prima della funzione m (supponendo che il codice di g sia *dopo* quello di m). -- Comment added by Users.AndreaSterbini on 18 Nov 2002 ---- ---+++ Varie 1)la fibonacci di un numero > 40 ci mette 20 anni a calcolarsi, è normale?<br> 2)usare swich è obbligatorio? mi funziona tutto con if e else, devo correggere?<br> 3)il mio prog consente sia un argomento singolo (ad es -f) sia multipli (-fv), è una bella cosa o ho fatto un lavoraccio inutile? :-)<br> 4)in caso di imput scorretto (mettere lettere al posto di numeri, argomenti che non esistono, meno o più argomenti) il programma deve dare un qualche messaggio di errore? avendoci smanettato due giorni il mio bambino fa anche il caffè ma se è troppo lo semplifico :-)<br> -- Comment added by Users.AndreaZucchi on 18 Nov 2002 1 la complessità di Fibonacci(n) è 2^n ... altro che 2 anni per 2^40 chiamate! * ne esiste una versione che ci mette tempo O(n), ora la aggiungo tra le facoltative 1 se usi switch lo impari, ma fai come vuoi 1 beh, visto che non ho definito l'output da dare per parametri multipli ai fini della correzione hai fatto più lavoro del necessario 1 non importa che gestiate gli errori -- Users.AndreaSterbini - 18 Nov 2002 ---- ---+++ Fibonacci 2 <verbatim> l'esempio di output su Fibonacci era ancora da testare ma poichè nel testo dice: 'si abbia l'accortezza di incrementare la profondità di 1 prima di eseguire la chiamata ricorsiva e la stampa della traccia' si deduce che nella prima chiamata stampa cmq un asterisco: Es4 -F 5 * 5 ** 4 *** 3 **** 2 ***** 1 ***** 0 **** 1 *** 2 **** 1 **** 0 ** 3 *** 2 **** 1 **** 0 *** 1 8 </verbatim> o sbaglio? -- Comment added by Users.LauraRavagli on 18 Nov 2002 Hai ragione, il testo dice così ... dovrò cambiare la mia implementazione! :-( (ma al lavoro che dicono di twiki?) -- Users.AndreaSterbini - 18 Nov 2002 ---- p.s. (anche le altre funzioni) cosa pensano in che senso? che ci passo le giornate (...finchè non ho altri bug da metter a posto :) e/o mi licenziano xchè sto troppo su ie) oppure di come è strutturato (non sono di mentalità open-source, ma credo che chi lo conosce lo ama)? -- Comment added by Users.LauraRavagli on 18 Nov 2002 ---- ---+++ ancora fibonacci m'era venuto sto dubbio e ho controllato... sul deitel fibonacci(0)=0<br> qua lessi---+ sopra che è 1.... insomma come stanno le cose? :-) -- Comment added by Users.AndreaZucchi on 19 Nov 2002 Lo so ... lo so ... che devo fare, chiamarla *fibonacci-di-x-meno-1* ? Per non smuovere le acque implementate quello che vi ho detto ... che vi frega come si chiama? :-) -- Users.AndreaSterbini - 19 Nov 2002 ---- ---+++ L'urlo di fibonacci terrorizza anche l'occidente scusate se continuo a rompere i maroni :-)<br> ho fatto una funzioncina fibonacci efficiente... va tutto alla grande fino al fibonacci(45)... il calcolo lo fa istantaneo e sono tutto felice<br> provo col 46 e zac esce un bel numero negativo<br> suppongo sia dovuto alle limitazioni del long...<br> a sto punto consiglierei di levare fibonacci dall'esercizio e rimettere fattoriale o una funzione ex novo<br> -- Comment added by Users.AndreaZucchi on 19 Nov 2002 Hai ragione, Fibonacci(46)= Fibonacci(45)---+Fibonacci(44)=1836311903+1134903170=2971215073 > 2147483647 = INT_MAX. Superato di poco INT_MAX si hanno numeri negativi, e quindi da lì in poi si ha un casino ... -- Users.AndreaSterbini - 19 Nov 2002 ---- ---+++ fibonacci efficiente ma si può creare ricorsivamente o si deve creare ricorsivamente io finora sono riuscita con un ciclo, ricorsivamente mi sa che non ho capito la spiegazione... -- Comment added by Users.LauraRavagli on 19 Nov 2002 Oh, sì! ricorsiva anche issa deve essere! Volendo calcolare F(n), se la chiamata ricorsiva a F(n-1), invece di tornare 1 valore ne tornasse 2 (cioè F(n-1) ed F(n-2)) allora sarebbe facile calcolare dai valori tornati i valori da tornare per F(n) ... Per il caso base basta tornare la coppia (1,1) se n=1. -- Users.AndreaSterbini - 19 Nov 2002 ---- ---+++ Fibonacci di 5 non è per caso 5 invece di 8? Scusi prof. ma mi potrebbe dare un output coretto per i casi delle funzioni Fibonaci e dell'ultima (f di g)? Gliene sarei grato. -- Comment added by Users.ElvisBodeci on 19 Nov 2002 Ho inserito l'output corretto sia per Fibonacci che per Fibonacci_efficiente, ora mi calcolo *m* e la aggiungo. -- Users.AndreaSterbini - 19 Nov 2002 ---- ---+++ il mio Fibonacci puo permetersi di essere semplice? Cioè il fibonacci di 0 è 1 e non 0. Nessun problema.Ma deve essere efficente l'output dell fibonacci o va bene anche il primo caso? -- Comment added by Users.ElvisBodeci on 19 Nov 2002 Segui la definizione data nel testo. La funzione di fibonacci puo' essere implementato in due versioni, doppiamente ricorsiva (opzione -F) e/o efficiente (opzione -E). -- Users.AndreaSterbini - 19 Nov 2002 ---- ---+++ Fibonacci Strike Back uhm, essendo dotato di un sgi, con 2gb di ram, 1 terabyte di hd, un P IV Duoble Processor ognuno da 4giga ho fatto la mia funzioncina fibonacci, e fino al 125 riesco a calcolarlo! ma solo con "double double", ora il mio gcc lo accetta, ma sul mio caro vecchio manuale di C nn c'e' il double double... posso usare C non Ansi? -- Comment added by Users.ValerioTesei on 19 Nov 2002 Complimenti per il PC da sogno ... quanto costa? Io userò interi (il massimo che posso calcolare è Fibonacci(45) ) ... attento a non incappare nell'opzione ==-pedantic== -- Users.AndreaSterbini - 19 Nov 2002 ---- ---+++ Dove posso comprarla? Davvero una bella macchina! <img src="/pub/Users/ArcangeloTripi/9.gif" > Ti pregherei, se possibile, di dirmi dove l'hai comprata, vorrei procurarmi qualcosa di simile. Anche perche', su un articolo di "Tom's Hardware", leggo "That said, in view of the use of the 0.13 µm manufacturing technology, clock speed has its limits. The highest level of development for the P4 with Northwood core will be the 3.6 GHz version. If the rumors are true, Intel won't launch it until the first half of 2003." e quindi secondo loro (generalmente ritenuti i piu' informati nel campo) risulta solo da indiscrezioni che Intel rilascera' non prima della meta' del 2003 i Pentium4 a 3.6 GHz, mentre vedo che la tua macchina ha gia' dei processori a 4 GHz. -- Comment added by Users.ArcangeloTripi on 20 Nov 2002 ---- ---+++ L'Intel Lascialo a Casa...... Sinceramente l'intel da 4 GHz verra buttato del cestino nella magiorparte dei casi perche' sara' solo buono a fare l'uovo al tegamino... gia' un K7 daq 2.5 Ghz gli fara' mangiare i bit... Cmq io punterei ancora piu' in alto.. con un Alpha o magari per restare un po piu' bassi ma (solo con i prezzi non con le prestazioni) un PPC 790 fondato su circuiteria da 0,13 micron ma passerà presto a circuiteria a 0,9 micron. Lavora a 64bit ma e' compatibile con programmi scritti a 32bit. Interessante l'ampiezza di banda del bus principale supportata dal PPC 970 che teoricamente è in grado di arrivare fino a 900 MHz (attualmente il bus processore del più veloce dei G4 é di soli 167 MHz) con una banda nominale di 7,2 GB al secondo. Ha tecnologie integrate del tipo Silicon On Insulator e Low-k dielectric, AltiVec e SIMD (Single Instruction Multiple Data).Debutera' a 1.8 GHz per arrivare presato a 2 GHz e superarlo. Io direi un signor processore....... -- Comment added by Users.LeonardoParisi on 20 Nov 2002 ---- io ho un pII 350 e sono felice (certo avendo i soldi x uno migliore sarei ancora---+ felice) comunque se il prof ci garantisce che metterà in imput numeri < 45 posso dormire sogni tranquilli :-) -- Comment added by Users.AndreaZucchi on 20 Nov 2002 ---- You are missing the point... Non volevo aprire un dibattito sui processori, non mi pare il posto adatto. Semplicemente volevo capire come ha fatto Valerio Tesei a procurarsi un processore che, stando ai piu' informati, non doveva ancora esistere...<img src="/pub/Users/ArcangeloTripi/5.gif"> -- Comment added by Users.ArcangeloTripi on 20 Nov 2002 Neanche io ... anche se un doppio AMD mi fa proprio gola ... quando lo compro vi dico come va ;-) -- Users.AndreaSterbini - 20 Nov 2002 ---- ---+++ Domanda per Sterbini scusi professore, ma nel far scegliere quale funzione eseguire, dobbiamo inserire anche dei prompt, o come abbiamo fatto sempre, dobbiamo usare semplicemente la "scanf"? A proposito di Fibonacci. Sulla traccia c'è ancora scritto che fibonacci(0)=1. Sulla pagina web www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/fibtable.html#bib100c'è scritto che fibonacci(0)=0 fibonacci(1)=1 -- Comment added by Users.DanieleComandini on 20 Nov 2002 Che prompt? che vi faccio passare il primo argomento a fare? (-f -F -E -m -h -G) :mad: Accidenti, lo so !!! implementate la funzione che ho definito ... la chiameremo *fibonacci-di-Sterbini-che-non-si-ricorda-bene-qual-è-il-caso-base* :-) ... ma fatela come ho detto, grazie. -- Users.AndreaSterbini - 20 Nov 2002 Questo significa anche che è normale che non mi viene l'esempio messo per l'homework 5? A me viene il seguente: 5*<br> 4**<br> 3***<br> 2****<br> 1*****<br> 1*****<br> Rispondetemi perchè se deve cmq venire l'esempio proposto giuro che lo inserisco di printf("5*\n4**\n ... ") :D -- Users.MarcoMennillo - 24 Nov 2002 ---- Prof se nn se la ricorda nn la facciamo che e' meglio!!! -- Comment added by Users.AndreaSantoro on 20 Nov 2002 Fate come vi pare ... io testo la mia versione. -- Comment added by Users.AndreaSterbini on 20 Nov 2002 ---- ma fibonacci non aveva niente altro da fare che contare i conigli e le foglie d'albero?? ...mi sa proprio di no... penso e ripenso e nel pensar mi impazzo e dopo aver tanto pensato... -- Comment added by Users.LauraRavagli on 20 Nov 2002 ... adesso vediamo come finisci la rima :-) -- Users.AndreaSterbini - 20 Nov 2002 ---- YES YES YEEEEEEAHHH! managgia a me e a quando mi metto subito a scrivere il codice invece di azionare i 2 neuroni che mi sono rimasti... -- Comment added by Users.LauraRavagli on 20 Nov 2002 ---- ---+++ prototipi "Visto che il compilatore deve conoscere una funzione prima di poterla usare in un'altra funzione, dovete inserire nel testo il prototipo di g prima della funzione m (supponendo che il codice di g sia dopo quello di m)." x il fatto del minimo privilegio e cose belle non sarebbe---+ giusto inserire i prototipi nelle funzioni in cui vengono richiamati e quindi x esempio il prototipo di g in m e versavice?? -- Comment added by Users.LauraRavagli on 21 Nov 2002 Immagino di sì -- Users.AndreaSterbini - 20 Nov 2002 ---- cioè rettifico (sennò lo farà qualcun'altro :) ): poichè M è la prima chiamata e quindi il suo prototipo sarà già presente prima della chiamata basta che in illa sia presente il prototipo di G. (sempre supponendo che M sia definita prima di G) hasta luego -- Comment added by Users.LauraRavagli on 21 Nov 2002 ---- ---+++ Attivazione alla sezione di archittettura 1 Mi scusi prof, so che questa non è la sede per queste domande ma ho già tentato per ben tre volte di spedirle per e-mail, ciò che che sto per scrivere: dato che sono già autorizzato alla sezione di programmazione 1, posso avere l'autorizzazione anche ala sezione di architettura 1 senza che ritorno da lei con il documento? La prego :-( -- Comment added by Users.CristianoMarra on 21 Nov 2002 Vai dal (o scrivi al) tuo docente ... io che c'entro? -- Users.AndreaSterbini - 21 Nov 2002 ---- prendo spunto per far notare quanto noi del III canale siamo sfigati: niente esame su pc, niente arch. su twiki, niente s.o. su twiki :( -- Comment added by Users.LauraRavagli on 21 Nov 2002 Lo prenderò come un complimento :cool: ! Vai dal (o scrivi al) tuo docente ... -- Users.AndreaSterbini - 21 Nov 2002 ---- ecco... X qui frequenta ed è del III canale: perchè non cercate di parlarne con i professori? -- Users.LauraRavagli - un dì di Nov 2002 ---- ---+++ Sgi 4gh... wow Arcangelo Tripli, mi apparaiva scontata che la macchina descritta nel post fosse un richiamo ironico al P75 che al momento sto usando, dato che il mio pc figissimo(p3 800) e' sprovvisto di ram funzionante... Capisco che la voglia di apparire agli occhi del Professor Sterbini e' immensa, ma discorrere su una battuta in modo tecnico, mi sembra una cosa sciocca... cmq complimenti almeno per me sei un gran figo! (p.s. le SGI hanno processore Alpha Sparc a 64bit, di norma e penso che pochi possano permettersi di comprarne una...) -- Comment added by Users.ValerioTesei on 21 Nov 2002 Basta bisticci :-) grazie. -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Funzione MG composta Nel testo dell'esercizio si chiede di richiamare con l'opzione -m la funzione doppiamente ricorsiva m°g che assiomiglia a una funzione composta. Il mio problema e' che secondo me c'e' un errore o forse (molto più probabile) qualcosa che mi sfugge , quando lei dice : <verbatim> m(0) = 0 g(0)= 1 </verbatim> ma se io chiamo il programma e gli passo -m 0 non puo arbitrariamente scegliere di darmi o 0 o 1 a seconda della sua preferenza per m o per g!!! capito la domanda? cioé nel caso -m 0 noi dobbiamo far uscire 0 o 1? dobbiamo quindi scegliere m o g ? (sebbene una chiami l'altra ricorsivamente? vi prego rispondetemi. non ci dormo la notte. ;P -- Comment added by Users.PierluigiCau on 21 Nov 2002 Nell'esercizio c'e' scritto di calcolare m(x). -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Argv[] Salve prof, come faccio a mettere il contenuto di argv[1] in un'altro vettore? Inoltre, che vuol dire: "warning: assignment makes pointer from integer without a cast" ? Grazie -- Comment added by Users.PaoloCoppi on 21 Nov 2002 ---- ---+++ Funzione 42 funzione 42 di 2 (domanda di Cristiano Marra) Risposta di Sterbini: Direi che dovresti ottenere f(2) = f(1)---+ 2*2 = f(0) * 2*1 + 2*2 = 42 + 2 + 4 = 48 Con un output: <verbatim> 2 * 1 ** 0 48 </verbatim> in contraddizione con le specifiche dell hw5 che sono h (quarantadue) <verbatim> es5 -h 5 (che calcola la funzione 42 di 5) * 5 ** 4 *** 3 **** 2 ***** 1 ****** 0 72 </verbatim> Mi sono persa io qualche asterisco??????? -- Comment added by Users.ElisabettaDAiutolo on 21 Nov 2002 ---- credo che l'output dovrebbe essere <verbatim> * 2 ** 1 *** 0 48 </verbatim> -- Comment added by Users.LauraRavagli on 21 Nov 2002 Esatto ... qualcuno mi aveva fatto notare che ho detto 'incrementate la profondità prima di stampare gli asterischi' ed ho corretto gli asterischi dell'esercizio ma non quelli delle domande ... -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Argomento -v -f -F ecc ecc Non riesco a dare come argomento un carattere preceduto dal segno meno, mentre se do come argomento un carattere va tutto ok. Come posso fare? -- Comment added by Users.PaoloCoppi on 21 Nov 2002 Non capisco ... vuoi dire che non riesci a scrivere ==es5 -f 10== sulla riga di comando? -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Ancora output funzione 42 Concordo con Laura <verbatim> * 2 ** 1 *** 0 48 </verbatim> anche secondo me l'output dovrebbe essere quello.... -- Comment added by Users.ElisabettaDAiutolo on 21 Nov 2002 ---- il commento del prof faceva riferimento ad un'implementazione non corretta. -- Comment added by Users.LauraRavagli on 21 Nov 2002 ---- ---+++ Mi sono persa due asterischi :) -- Comment added by Users.ElisabettaDAiutolo on 21 Nov 2002 ---- ---+++ Floating point exception nella funzione G ... perche'?!?!? -- Comment added by Users.ElisabettaDAiutolo on 21 Nov 2002 Dipende da come l'hai implementata ... non usi solo interi? -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ FUNZIONE G.... Dice il saggio: -G (GCD) <verbatim> es5 -G 10 25 (calcola il Massimo Comun Divisore tra 10 e 25) * 10 25 ** 5 10 *** 0 5 5 </verbatim> ma nelle specifiche..... funzione GCD, ovvero massimo comun divisore usando l'algoritmo di Euclide (opzione -G) * definita per 0 < x < y * GCD(0,y) = y * GCD(x,y) = GCD(mod(y,x),x) * Esempio: GCD(10,25) = GCD(5,10) = GCD(0,5) = 5 * ricordatevi di disporre i due parametri in ordine crescente prima di chiamare la funzione.. AGGIUNGO IO: ma se x < y e' corretta sta scrittura? ris= functgcd (((y,x)%x),x,p); -- Comment added by Users.ElisabettaDAiutolo on 21 Nov 2002 ---- ---+++ sta funzione G... e le parentesi era gdc ((y%x),x,p) mannaggia le parentesi eh -- Comment added by Users.ElisabettaDAiutolo on 21 Nov 2002 Ma dovete proprio risolvere l'esercizio per gli altri? Volete togliere loro tutto il gusto di imparare? Egoisti! :-) -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Due domande su Fibonacci efficiente: 1) E' stato gia detto che per valori superiori a 45 la funzione restituisce valori errati, occorre gestire questa eccezione? Oppure in fase di test non saranno immessi valori superiori a 45? 2) Qual' è l' output corretto per es5 -E 0 ? e' accettabile un output come: <verbatim> * 0 1 </verbatim> ---- Mi pareva di averlo detto ... i test useranno solo numeri fino a 45. Sì -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Algoritmo di Euclide Se ho come input il primo valore maggiore del secondo e li passi entrambi alla funzione senza controllare chi è il più grande, funziona lo stesso e fà una traccia tipo questa: <verbatim> * 25 15 ** 15 25 *** 10 15 **** 5 10 ***** 0 5 </verbatim> è corretto, oppure devo controllare qual'è il maggiore prima di passarlo alla funzione? -- Comment added by Users.AngeloFerrantini on 21 Nov 2002 Come detto nell'esercizio: "ricordatevi di disporre i due parametri in ordine crescente prima di chiamare la funzione" -- Users.AndreaSterbini - 21 Nov 2002 ---- ---+++ Argomenti da linea di comando Il problema è che se scrivo es5 -f 10 il programma non funziona, mentre se scrivo es5 f 10 il programma funziona. Come devo fare per far accettare come argomento un carattere preceduto dal segno meno? -- Comment added by Users.PaoloCoppi on 21 Nov 2002 ---- la main riceve un vettore di stringhe, char *argv[] l'indice 1 di questo vettore contiene '-F'. in realtà il vettore è un vettore di puntatori quindi basta che usi l'aritmica dei puntatori x vedere il 2° carattere. -- Comment added by Users.LauraRavagli on 21 Nov 2002 ---- ---+++ FUNZIONE M Mi scusi professore,volevo sapere solo una cosa: E' normale che la funzione M se riceve un intero dispari mi dia come risultato un numero positivo mentre nel caso sia pari l'output e' negativo? Grazie -- Comment added by Users.FabioPoliti on 22 Nov 2002 Non so ... dovremmo guardare bene la definizione e ragionarci un po' -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Punto G (GCD) prof. xche' farsi male? neanche mi ricordo come si calcola... giuro che alle elementari ero un fenomeno, ma sinceramente e' stato cattifo... -- Comment added by Users.ValerioTesei on 22 Nov 2002 Povero piccolo ... :-) -- Users.AndreaSterbini - 22 Nov 2002 ---- ---+++ Floating point exception (il ritorno) nella funzione G ... perche'?!?!? uso SOLO interi :( -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ma il problema te lo da in esecuzione? -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- Bisognerebbe vedere il codice ... ma io posso farlo solo *dopo* la consegna (*prima* non sarebbe giusto verso gli altri). -- Comment added by Users.AndreaSterbini on 22 Nov 2002 ---- ---+++ il problema me lo da in esecuzione...(gli input sono in ordine crescente )...la cosa strana e' che il calcolo della profondita' e' corretto.. infatti ho: es5 -G 10 25 (calcola il Massimo Comun Divisore tra 10 e 25) * 10 25 ** 5 10 *** 0 5 floating point exception... MA DE CHE?? sono tutti interi.... -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ ecco.. il problema me lo da in esecuzione...(gli input sono in ordine crescente )...la cosa strana e' che il calcolo della profondita' e' corretto.. infatti ho: es5 -G 10 25 (calcola il Massimo Comun Divisore tra 10 e 25) * 10 25 ** 5 10 *** 0 5 floating point exception... MA DE CHE?? sono tutti interi.... -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ ecco.. il problema me lo da in esecuzione...(gli input sono in ordine crescente )...la cosa strana e' che il calcolo della profondita' e' corretto.. infatti ho: es5 -G 10 25 (calcola il Massimo Comun Divisore tra 10 e 25) * 10 25 ** 5 10 *** 0 5 floating point exception... MA DE CHE?? sono tutti interi.... -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ ecco.. il problema me lo da in esecuzione...(gli input sono in ordine crescente )...la cosa strana e' che il calcolo della profondita' e' corretto.. infatti ho: es5 -G 10 25 (calcola il Massimo Comun Divisore tra 10 e 25) * 10 25 ** 5 10 *** 0 5 floating point exception... MA DE CHE?? sono tutti interi.... -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- Avrai mica fatto il resto della divisione per zero? -- Comment added by Users.AndreaSterbini on 22 Nov 2002 ---- ---+++ RE: ecco.. scusa, ma il calcolo della profondità è <verbatim> * 10 25 ** 5 10 *** 0 5 5 </verbatim> cmq, perchè non metti un pò di printf di debug oppoure usa il debugger. la base di uscita è corretta? -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ NO all'interno della function incremento la profondita' metto in un intero il modulo (y%x) poi assegno nel risultato (che la funct ritorna) functgcd (modulo, x, profondita) giuro su madre teresa che sono tutti interi!!!! -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ... madre teresa è già morta ... -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ RE: RE: ecco! il calcolo della profondita' e' correttoooooooooo ho messo printf di debug ma anche il printf mi da floating point exception... ho messo pure piu' cifre intere... -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ Sempre problemi con gli argomenti da linea di comando Penso proprio di non aver capito bene, che vuol dire usa l'aritmetica dei puntatori? In che modo? Perchè sto switch non mi accetta '-v', mentre se gli do 'v' tutto funziona alla perfezione??? -- Comment added by Users.PaoloCoppi on 22 Nov 2002 ---- perchè probabilmente nella condizione della switch usi un puntatore che punta al primo carattere. se passi -v punti a - , se passi v punti a v. (non hai un libro di testo, oppure perchè non guardi sui libri che stanno su ie?) -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ RE Ecco risolto l'arcano: una condizione mal usata nel caso x=0 il ris all'interno della funzione e' corretto la funz ritorna un intero la stampa di questo intero nel main... e' zero... grr -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- c'è sempre qualcosa sotto... ;) ed io x poco non mi dimeticavo d inviare l'esercizio :( -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Scusatemi basta risolvere... tutta colpa mia... avevo lasciato nel mai long double..... -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- povera madre teresa ! -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Domanda banale <font color="blue">Scusate come mai la stampa degli asterischi in fibonacci e nella funzione m non è piramidale come nella funzione fattoriale? cioè:</font> <br> es5 -f 5 <br> <verbatim> * 5 ** 4 *** 3 **** 2 ***** 1 ****** 0 120 </verbatim> <br> <font color="blue"> sull'esempio del fibonacci lei mette: :</font> <br> <verbatim> * 5 ** 4 *** 3 **** 2 ***** 1 ***** 0 **** 1 *** 2 **** 1 **** 0 ** 3 *** 2 **** 1 **** 0 *** 1 8 </verbatim> <font color="blue"> I numeri mi vengono ma la stampa degli asterischi è sempre piramidale è sbagliato? grazie </font> -- Comment added by Users.CristianoMarra on 22 Nov 2002 Perchè le due funzioni sono *doppiamente* ricorsive -- Users.AndreaSterbini - 22 Nov 2002 ---- ---+++ scusate la stampa <font color="green">scusate se ho stampato male l' esempio ho scordato gli accapo comunque spero di aver reso l'idea</font> -- Comment added by Users.CristianoMarra on 22 Nov 2002 Usate il tag <verbatim> !!! -- Users.AndreaSterbini - 22 Nov 2002 ---- ---+++ Re domanda banale nel fattoriale viene effettuata un'unica chaimata ricorsiva, come anche per -G e per fibonacci efficiente mentre per fibonacci ogni chiamata si suddivide in altre 2. diciamo che nel primo caso è regolare nel 2° si dirama. c'è un errore logico sul tuo codice -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Fibonacci efficiente... mi sfugge un particolare... a prescindere mi devo calcolare la fibonaccieff(i) per i che va da due a n?? per poi riempire il vettore?? che c''e' di efficiente? gulp...temo di non aver capito -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 Che la chiamata di F(x) (e di tutto l'albero di chiamate al di sotto) viene eseguita una sola volta .... da quelmomento in poi si legge il valore dall'array. -- Users.AndreaSterbini - 22 Nov 2002 ---- ---+++ allora.... entro nella funzione fibonacci efficiente con due interi che sono n e la profondita'; mi alloco un vettore di dimensione al piu' n; per j che va da due a n la funzione dell'elemento j-esimo e' uguale alla somma della funzione dell'elemento j-1iesimo piu---+ la funzione dell'elemento j-2iesimo.... a parte cil caso base il ritorno della funzione per n e' unguale al valore dell'ennesimo elemento del vettore... ecco l'output.... <verbatim> * 5 ** 1 ** 0 ** 2 ** 1 ** 3 *** 1 *** 0 ** 2 134513841 </verbatim> sgrunt -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ ATTENZIONE: ho %RED%separato%FINE% i due tipi di implementazione della fibonacci ricorsiva * ==-E== per l'implementazione che torna coppie di valori * ==-A== per quella che usa un array per _ricordare_ i valori calcolati -- Comment added by Users.AndreaSterbini on 22 Nov 2002 ---- ---+++ -A -E premessa: sì lo so---+ si fa + si impara (ma già sto facendo altro) domanda: la fibonacci efficiente deve essere svolta in tutti e 2 i modi? -- Comment added by Users.LauraRavagli on 22 Nov 2002 A vostro piacere! -- Users.AndreaSterbini - 22 Nov 2002 ---- ---+++ re: attenzione PROFESSO' !!!!!! appena dove ?? qui nelle domande?? e chi ha gia consegnato??? insomma.... il bersaglio deve essere fisso no??? rischiamo che questo strumento altamente tecnologico ci si ritorce contro..... eh -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ venerdi stiamo alle 16 di venerdi e avevo deciso di sviluppare la fiboonacci efficiente col vettore.... non aggiungo altro -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ costruzione vettore di appoggio ma se il vettore lo creo nella function dove sta l'efficienza? -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ Re: Mailing list suvvia prof. Twiki è per fare cose serie e anche per scherzare...la ML sta su soltando per scherzare e scambiarci cose che su Twiki sarebbero esageratamente OT :) -- Comment added by Users.EnricoDiPaolantonio on 22 Nov 2002 ---- ---+++ Santo WinZozz uaz...mentre vedevo piu' o meno come funzionava (tanto non faro' a tempo a finirlo) mi son dimenticato di mettere un limite alla fibonacci e mi e' entrato il loop l'emulatore di ms-dos :9 Spettacolo :) -- Comment added by Users.EnricoDiPaolantonio on 22 Nov 2002 ---- ---+++ Domanda per Sterbini 1ª domanda] Professore AIUTO!!! oggi in aula mi ha fatto vedere come si usa da terminale chmod---+x e il nome del file, per renderlo eseguibile. Lui mi ha risposto "Segmentation fault" che devo fare? 2ª domanda] avendo usato il Turbo Pascal per programmare, lì le funzioni venivano dichiarate e svolte prima del corpo vero e proprio del programma. Qui nel c, è vero che vanno prima dichiarate, poi messe ne lprogramma e infine svolte? (Così mi hanno riferito) 3ª domanda] non è che avendo anche windows nello stesso hard-disk di linux, ciò mi crei problemi? -- Comment added by Users.DanieleComandini on 22 Nov 2002 1 non saprei ... mi dici troppo poco 1 L'unica cosa importante è che siano definite (anche solo come prototipi) prima del loro uso 1 non direi -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Ma se io sta pagina non la leggevo oggi? Professore mi scusi, ma se io sta pagina non la leggevo oggi e magari fino a martedì? Se non disponessi di internet a piacimento? E se magari non frequentassi manco il corso? Chi me la veniva a dire la differenza fra -A e -E? Non voglio creare inutili polemiche, ma credo che sarebbe meglio per tutti modificare il meno possibile il testo degli esercizi. Già facciamo abbastanza confusione da soli! -- Comment added by Users.GiovanniColombi on 22 Nov 2002 ---- ---+++ Anche a me questo segmentation fault Scusatemi tanto ma il programa non vuole funzionare con la riga di comando e io non so come spiegarvi il problema se non dire cosa ho fatto. Il mio errore è scrito cosi <verbatim> main(int argc, char*argv[]) { char*f; long int x,y,i,j,k=1; int funk; f=argv[1]; funk=f[1]; x=atoi(argv[2]); y=atoi(argv[3]); switch(funk){ </verbatim> Penso sia giusto che questa facenda sia un po piu chiara, percio mi sono permesso di fare la domanda. Se qualcuno mi puo aiutare? -- Comment added by Users.ElvisBodeci on 22 Nov 2002 ---- il tuo pezzo di codice presume che siano passati 3 argomenti il che è vero solo in 1 caso -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Segmentation fault Forse il problema sta che lo switch amete valore intero e argv[] e di tipo char. Qualche aiuto?,Perche non sono tanto bravo da rispondermi da solo. -- Comment added by Users.ElvisBodeci on 22 Nov 2002 ---- ---+++ Bersaglio mobile ... Uno dei due bersagli almeno è rimasto fermo ... :-) A parte gli scherzi ... ora cerco di pensare se c'e' un modo per correggere la fibonacci efficiente indipendentemente dal modo in cui l'avete implementata (stamani in classe me ne è stato proposto un terzo) Finirà che me la devo implementare in tutti e 3 i modi ... :-( Per parafrasare un proverbio che non mi ricordo esattamente: "chi di esercizio colpisce di esercizio perisce" :-) -- Comment added by Users.AndreaSterbini on 22 Nov 2002 ---- ---+++ Segmentation fault Forse il problema sta che lo switch amete valore intero e argv[] e di tipo char. Qualche aiuto?,Perche non sono tanto bravo da rispondermi da solo. -- Comment added by Users.ElvisBodeci on 22 Nov 2002 ---- io ho provato il tuo codice, gli errori credo che possano essere 2: o quello che ti ho già detto oppure che poi non gestisci la conversione da char a int che fai in funk=f[1] -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Segmentation fault Forse il problema sta che lo switch amete valore intero e argv[] e di tipo char. Qualche aiuto?,Perche non sono tanto bravo da rispondermi da solo. -- Comment added by Users.ElvisBodeci on 22 Nov 2002 ---- tu alla switch gli passo int! -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Segmentation fault Forse il problema sta che lo switch amete valore intero e argv[] e di tipo char. Qualche aiuto?,Perche non sono tanto bravo da rispondermi da solo. -- Comment added by Users.ElvisBodeci on 22 Nov 2002 ---- ma che ti sei incantato?? -- Comment added by Users.LauraRavagli on 22 Nov 2002 ---- ---+++ Che cosa devo fare allora? Se meto in input -f 4 6 pes non torna niente e devo riinserire i dati. Ma non ce piu segmentation fault.E perche' sto programa manda sempre la vechia domanda? -- Comment added by Users.ElvisBodeci on 22 Nov 2002 Come ti ha detto diverse volte Laura, tu ti aspetti che esista ==argv[3]== che se non c'e' ti dà segmentation fault. -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ RE: bersaglio mobile.... che macchina ha? :) scherzi a prte... prima ci pensa e prima mi metto a finire st'esercizio e mi dedico al meritato riposo... e ho voglia di andare a casa -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---+++ che vuol dire????? ho inserito il parametro profondità nella funzione così: int fatt(int x, int profondità) poi ho implementato la funzione fatt ricorsiva e dopo aver compilato mi dà: too few arguments to function 'fatt' che vuol dire?????dove sta l'errore?????impazzisco con questa profondità!!!!!!!!!!!!!! -- Comment added by Users.FabioQuarta on 22 Nov 2002 Da qualche parte hai chiamato la funzione senza passare tutti e 3 gli argomenti. -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ f(0) Scusi prof ma quando nelle funzioni come fibonacci fattoriale o 42 mettiamo come valore il loro risultato deve essere a seconda dei casi 1, 1, o 42 e qui non ci piove ma l'output deve essere strettamente cosi': -f 0 1 o -f 0 * 0 1 altro es: -h 42 42 o -h 42 * 0 42 quale caso e' corretto? -- Comment added by Users.LeonardoParisi on 22 Nov 2002 Il secondo ... devi fare la traccia anche se l'argomento è 0. -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ che vuol dire????? > too few arguments to function 'fatt' hai verificato che prototipo di funzione e testa della funzione abbiano un numero di parametri uguali? e che quando nel main chiami la funzione i parametri che gli passi sono prioprio tanti quanti quelli del prototipo e della testa della funzione?? ciao ciao -- Comment added by Users.ElisabettaDAiutolo on 22 Nov 2002 ---- ---+++ R:che vuol dire????? ho controllato e sono gli stessi sia nel prototipo che nella chiamata(nel main)che nella dichirazione alla fine.... non so più come fare,forse l'errore è all'interno della funzione visto che se non uso il parametro profondità le mie funzioni funzionano bene. bho!!!!!!non mi viene più niente in mente per implementare la profondità... ciao -- Comment added by Users.FabioQuarta on 22 Nov 2002 ---- Io ho il tuo stesso problema!!! Mi da "too few arguments"!<br>Se scopri dov'è l'errore fammi sapere!<br>Grazie -- Comment added by Users.PaoloCoppi on 22 Nov 2002 ---- ---+++ ki mi risponde è bravo! qual è il numero massimo che si puo inserire con il fattoriale?io avendolo dichiarato int se inserisco 16 mi da un numero lungo 10 cifre, se inserisco 17 mi da un numero negativo! Qual è il tipo di variabile più grande in assoluto? long int??? rispondetemi è urgente! -- Comment added by Users.AndreaSantoro on 22 Nov 2002 ---- quello se nn sbaglio vuol dire ke gli passi poki parametri alla funzione! da qualke parte te ne dovresti essere scordato qualkuno! ricontrolla! -- Comment added by Users.AndreaSantoro on 22 Nov 2002 ---- ---+++ C'E' QULKUNO VIVO SU TWIKI KE PUO RISPONDERE?????????????? -- Comment added by Users.AndreaSantoro on 22 Nov 2002 No ---- ---+++ SIGMENTATION FAULT Qualcuno potrebbe gentilmente spiegarmi perchè quando mi stampa la riga con i dati personali mi dà errore: SIGMENTATION FAULT mentre tutte le altre parti del progr mi funzionano????Grazie -- Comment added by Users.LauraMagrini on 23 Nov 2002 Ti da questo errore, perchè, probabilmente, non hai inserito delle condizioni per cui quando inserisci -v, non deve fare nessuna assegnazone di argv[2] e argv[3]. Se è questo l'errore, lo risolvi facilmente mettendo una condizione if prima dello swicth. -- Users.AndreaBandino - 23 Nov 2002 ---- ---+++ Altre opzioni <i><font style="verdana" color="red">Salve ho notato solo oggi che sono state aggiunte altre opzioni(-A), volevo sapere se ne sono previste altre dato che la prima volta ero riuscito a finire l'esercizio in tempi ragionevoli e sono state aggiunte le opzioni -G e -E ora che avevo quasi finito mi ritrovo l'opzione -A, io sinceramente non so se riucirò a consegnare l'intero esercizio prof., comunque ci proverò lo stesso :-(</font></i> -- Comment added by Users.CristianoMarra on 23 Nov 2002 ---- ---+++ Il -A è opzionale Non è per difendere il prof. Sterbini, ma visto che, anche se voi non lo sapete, sono stato io a sollevare tutto questo macello, credo di dovervi delle spiegazioni. Ho mandato io un E-mail al professore, in quanto perla fibonacci efficiente, io avevo un output diverso da quello dell'esempio. Avevo anche notato che, mentre lui nell'esempio aveva usato il "doppio ritorno", io avevo usato la tecnica memoization, quindi gli ho chiesto se era una cosa normale il fatto che avessi un output diverso. Lui, a questo punto, ha semplicemente diviso la funzione in due parti, ma non ha agginto niente, infatti ci dice di implementare -E OPPURE -A. Tutto qui. Chiedo scusa a tutti se, mio malgrado,ho sollevato questo "polverone". -- Comment added by Users.FabianoFerrazza on 23 Nov 2002 Esatto -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Per il professore Scusi proff, nell caso della funzione m, lei dice che deve ancora implementarla. Dobbiamo aspetare ancora o pure è quello giusto l'output che ha scrito.Comunque a me non da un output cosi lungo. -- Comment added by Users.ElvisBodeci on 23 Nov 2002 L'ho implementata e l'output mi sembra giusto. -- Users.AndreaSterbini - 25 Nov 2002 ---- in realtà nemmeno a me dà tutto quell'output, anzi direi che è poco più della metà. -- Comment added by Users.LauraMagrini on 23 Nov 2002 Hai tracciato anche la funzione *g* ? -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ il numero + grande ke il vostro fattoriale riesce a calcolare quale è??? a me fino a 16 ok! poi da 17 in poi mi vengono fuori numeri negativi! è giusto cosi o no? la mia variabile è di tipo int! devo usare qualke altro tipo di variabile??? se si quale? è urgente! rispondetemi! ciao a tutti ed in bocca al lupo! -- Comment added by Users.AndreaSantoro on 23 Nov 2002 ---- ---+++ Riga di comando Come faccio a prendere per es. da (hw5 -f 25) come prendo il 25 per metterlo in una variabile int non mi dica di usare atoi per convertirlo non lo rieco ad usare! Se fosse possibile preferirei avere delle spiegazioni con un esempio in codice. -- Comment added by Users.DomenicoBoiano on 23 Nov 2002 i = atoi(argv[2]) -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Non volevo far polemica <font style="comic" color="#CC66CC">Vorrei scusarmi con il collega FabianoFerrazza e con il prof. andrea sterbini se ho dato l'idea di una critica, in verità la mia era solo una semplice domanda, dato che purtroppo non posso frequentare(lavoro), twiki per me è l'unica fonte di notizie che ho del corso, scusatemi ancora :-)</font> -- Comment added by Users.CristianoMarra on 23 Nov 2002 ---- ---+++ Re: riga comando int x; sscanf(argc[2],"%d",&x) ; -- Comment added by Users.LauraRavagli on 23 Nov 2002 ---- ---+++ FATTORIALE... Ma per il calcolo del fattoriale, bisogna usare un tipo double? -- Comment added by Users.DavideSammartino on 23 Nov 2002 ---- ---+++ Mutuamente Ricorsivo! Quale potrebbe essere il problema, che la funzione m(x) con x = 3, mi da 70, invece nell'esempio del prof. m(x) = 6?? in oltre la traccia della ricorsività è la stessa, cambia solo il risultato.... :( -- Comment added by Users.MarcoEsposito on 23 Nov 2002 ---- ---+++ AIUTOOOOO C'e' qualcuno così gentile che mi possa spiegare la funzione fibonacci efficiente... io non l'ho capita! Grazie! -- Comment added by Users.DavideSammartino on 23 Nov 2002 ---- ---+++ Come funziona la Fibonacci efficiente? La funzione di Fibonacci, risolta ricorsivamente con la formula f(n) = f(n-1)---+ f(n-2) per un intero n richiede circa 2 elevato a n-1 chiamate, e questo perche' la semplice applicazione della formula provoca una diramazione ad ogni chiamata. Ad esempio, dato che f(6) = f(5)---+ f(4) devo prima calcolare tutto il ramo f(5), e poi tutto il ramo f(4). Il punto dolente e' che, risultando f(5) = f(4)---+ f(3) anche per calcolare f(5) mi serve f(4), cosi' come mi serviva per calcolare f(6), e finisco quindi per calcolare la stessa funzione piu' volte. Il ragionamento applicato a questo esempio si ripete induttivamente per tutto il calcolo, e ci si trova quindi a calcolare molte, molte volte la stessa funzione, arrivando quindi a questo numero cosi' grande di chiamate, mentre una soluzione iterativa richiederebbe semplicemente n addizioni. L'idea e' quindi quella di evitare questa esplosione, continuando ad utilizzare comunque un metodo ricorsivo. * Una soluzione e' quella di evitare la biforcazione ad ogni passo che fa esplodere i calcoli, utilizzando qualcosa del genere (da intendere solo da un punto di vista concettuale): f(n) = f(n-1, n-2) dove non c'e' biforcazione, ma una sola chiamata ad un caso piu' semplice, in modo che il prossimo passo sia f(n-1, n-2) = f(n-2, n-3) fino ad arrivare al caso elementare, che sara' f(1, 0) Tra parentesi, per essere generale invece di f(n) = f(n-1, n-2) come ho scritto tre formule fa dovrei scrivere f(n, n-1) = f(n-1, n-2). Senza scendere nei dettagli implementativi, la realizzazione di questa soluzione e' legata al fatto che la funzione deve essere definita in modo da restituire due valori anziche' uno, e questo puo' essere ottenuto in C usando le strutture. Parlo per me, ma ho trovato una certa difficolta' ad applicare questo metodo, anche se alla fine ce l'ho fatta (spero). * Un altro metodo, piu' semplice, e' quello di utilizzare come prima delle "normali" funzioni che restituiscono un solo valore, permettendo la biforcazione, ma di "conservare" e riutilizzare i valori gia' calcolati. Quindi, ritornando all'esempio precedente, calcolo fino in fondo f(4) solo la prima volta, metto il risultato da parte (in un vettore), e ogni volta che mi serve, invece di ricalcolarlo, semplicemente lo vado a recuperare, e questo mi evita tutte le altre biforcazioni che invece ci sarebbero state. Parlo per me, ma ho trovato molto piu' semplice da applicare questo metodo rispetto al precedente. Anche se Sterbini si arrabbia, mi permetto di dare un suggerimento implementativo: trovo che sia molto meglio usare una variabile globale per l'array di memorizzazione, Mi scuso per la prolissita', ma ho cercato di essere il piu' chiaro possibile (sperando di esserci riuscito). -- Comment added by Users.ArcangeloTripi on 23 Nov 2002 Grazie Arcangelo! -- Users.AndreaSterbini - 25 Nov 2002 ---- Mi accorgo di avere usato una notazione non troppo felice per la spiegazione della soluzione con le strutture. Non devo scrivere f(n-1, n-2) = f(n-2, n-3) perche' questo farebbe pensare che il valore di una ricorsione e' uguale a quello della precedente, e questo chiaramente non e' vero. Quello che succede e' che f(n-2, n-3) mi restituisce *sia* il valore di f(n-2) che quello di f(n-3), e questo permette al passo successivo di conoscere *sia* f(n-2) (che conoscevo gia') che f(n-1) = f(n-2)---+f(n-3). Sarebbe stato meglio scrivere qualcosa del tipo f(n, n-1) <--- f(n-1, n-2) f(n-1, n-2) <--- f(n-2, n-3) Evidentemente la soluzione con le strutture e' abbastanza contorta... -- Comment added by Users.ArcangeloTripi on 24 Nov 2002 ---- ---+++ Il fattoriale piu' grande Nella nostra versione di linux il massimo intero INT_MAX risulta 2.147.483.647, ed usando una calcolatrice da tavolo si puo' controllare facilmente che <verbatim> 12! = 479.001.600 < INT_MAX 13! = 6.227.020.800 > INT_MAX </verbatim> ed infatti, da 13 in poi, anche se il programma da' dei risultati, non sono corretti. Arrivando a 16, poi si ha un risultato anche negativo, ma il risultato e' corretto fino a 12. -- Comment added by Users.ArcangeloTripi on 23 Nov 2002 ---- ---+++ Arcangelo tu mi dici ke il massimo numero ke il prof puo inserire è 12 nel fattoriale? usando qualsiasi tipo di variabile??? long, int, double, ecc???? risp grazie! -- Comment added by Users.AndreaSantoro on 23 Nov 2002 ---- ---+++ Limitazione fattoriale legata agli int La limitazione e' legata alla limitazione del tipo _int_, come ho spiegato sopra, quindi se si usassero dei tipi come _long_ oppure _long long_ le limitazioni potrebbero essere piu' alte. In effetti, nelle sue specifiche Sterbini dice che i parametri sono interi, non che sono di tipo _int_, ed anche i _long_ e i _long long_ sono interi. In questo momento non ho Linux sottomano, e non so se l'opzione -pedantic accetta i _long long_. Mi ricordo pero', come ho detto in un post per un esercizio precedente, che nel nostro caso gli _int_ e i _long_ hanno gli stessi limiti. In ogni caso, spero proprio che Sterbini non zotti nessuno perche' non ha usato _long long_... Non credo che in un caso come questo si dovrebbe fare uso di floating point per aumentare i limiti (almeno cosi' suppongo, tutto quello che dico va preso con beneficio d'inventario e non mi assumo responsabilita' sulle scelte finali fatte da nessuno). In ogni caso, giriamo la domanda a Sterbini. -- Comment added by Users.ArcangeloTripi on 24 Nov 2002 I long long non sono supportati dall' ANSI C e quindi nel caso del fattoriale, il numero massimo che si può calcolare con gli interi, è 12!. -- Users.AndreaBandino - 24 Nov 2002 Non _zotterò_ nessuno ... -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Re:Mutuamente ricorsive Anche a me la funzione m con x=3 restituisce 70 e non 6 come nell'esempio. L'esempio di output per la funzione m che c'è nel testo dell'esercizio è quello corretto o deve ancora essere modificato? Ho anche un altro problema, ho implementato correttamente la funzione gcd, ma una volta aggiunta al resto dell'esercizio non funzionano più gli altri casi(mi dice segmentation fault). Per la stampa dei dati personali vale lo stesso, cioè quando aggiungo anche uno solo degli altri casi, mettendo l'opzione -v mi dice segmentation fault. Qualcuno può aiutarmi a capire perché?! -- Comment added by Users.ClaudiaCantelli on 24 Nov 2002 Mi sa che cerchi di usare un argv[i] che non c'e' ... -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ RE: Mutuamente ricorsive Forse e' una cavolata, ma hai forse dimenticato i "break" nella switch!? -- Comment added by Users.TizianoMorgia on 24 Nov 2002 ---- ---+++ Purtroppo no I break nella switch ci sono e non riesco a capire perché in questi due casi mi dia problemi. Cmq grazie lo stesso, sai per caso quale deve essere l'output corretto per la funzione m? -- Comment added by Users.ClaudiaCantelli on 24 Nov 2002 Forse il tuo problema dipende dal fatto, che poichè alla funzione G bisogna dare anche la y, hai inserito una cosa simile, senza porre delle condizioni; y = atoi(argv[3]); Se è così, il problema dipende dal fatto, che il programma cerca di dare ad una variabile un valore che non esiste e lo puoi risolvere in questo modo; if (var[1] == 'G') y = atoi(argv[3]); Dove var[1], è il secondo carattere di argv[1], il G di -G per intenderci. Quindi se non hai usato una variabile d'appoggio ma hai usato direttamente argv, dovrebbe funzionare teoricamente anche inserendo al posto di var[1], argv[1][1] che corrisponde a G. -- Users.AndreaBandino - 24 Nov 2002 ---- ---+++ Ringraziamenti Ti volevo ringraziare Laura Ravagli grazie alla tua risposta ho quasi completato il programma. Grazie! -- Comment added by Users.DomenicoBoiano on 24 Nov 2002 ---- ---+++ Ormai e' tardi? Boh, ma sono 5 giorni che cerco di far funzionare la traccia delle funzioni ricorsive .\ NADA! .>> HAIUTO ma perke per una cosa sola mi devo bloccare? e' sempre cosi//. Cioe- non capisco il for dove va! io l' ho provcato e prima e dopo la funzione (all'interno della stessa) e niente. poi se metto i che va da 0 a profondita si looppa , che profondita all'inizio e' =0. Ah e poi non capisco la teoria che se profondita all'inizio e" uguale a zero, come fa ad esserci il 5 come primo della lista nell esempio ??? mi sento poco bene... ;( -- Comment added by Users.PierluigiCau on 24 Nov 2002 Il 5 è il parametro *x* della funzione ... -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Per Claudia Non so se c'entra col tuo caso, ma se cerchi di leggere un parametro che non hai passato penso che dovrebbe dare segmentation fault. Per conoscere il numero di parametri passati c'e' argc. Nella funzione _g_ c'e' una sottrazione mentre in _m_ c'e' un'addizione. Sei sicura di non aver messo un'addizione in _g_? -- Comment added by Users.ArcangeloTripi on 24 Nov 2002 ---- ---+++ Per Arcangelo I problemi che mi dava li avevo già risolti ma devo dire che erano esattamente del tipo che hai descritto(non some come fai, le tue osservazioni sono sempre giuste). Grazie per avermi risposto! -- Comment added by Users.ClaudiaCantelli on 24 Nov 2002 ---- ---+++ Per Pierluigi A quale for ti riferisci??? A quello che stampa gli asterischi? Per il fatto della profondita' uguale a zero e il 5 funziona cosi': 1 asterisco = profondita' 0; 2 asterischi = profondita' 1; etc... Il numero seguente e' quello che la funzione deve calcolare es: hw5 -f 5 stampa a profondita' zero "* 5" --> * = profondita' zero; 5 = valore da calcolare. A quel punto la funzione non puo' ritornare il risultato e chiama se stessa aumentando la profondita' di 1 e scendendo di un valore per avvicinarsi alla risposta conosciuta. Quindi secondo passaggio "** 4" --> ** profondita' 1; 4 = valore da calcolare...etc. Spero sia chiaro, spero...non sono un grande insegnante. -- Comment added by Users.TizianoMorgia on 24 Nov 2002 ---- ---+++ Mi manca solo una cosa!Aiuto!! Sono riuscito a fare il 90% del programma e va tutto a posto(compresi gli output degli asteriski e profondita);l'unica cosa ke non riesco a fare è la Funzione Fibonacci Efficiente che usa le struct.Ok,ho capito che tramite una struct una funzione puo ritornare due valori, MA COME??Sul deitel c'e' scritto che una struct non puo' essere passata per valore e quindi il prototipo della struct non capisco se dev'essere scritto nella main,prima o nella funzione ke fa i calcoli.Poi...una volta trovato il caso base(1,0)(magari ci fossi riuscito a scorrere la struct) che valori dovranno ritornare?(1,1)? SIGH..mi manca solo questo cmq anche Arcangelo aveva detto ke non era facile GRAZIE A CHIUNQUE PUO' AIUTARMI! -- Comment added by Users.FabioPoliti on 25 Nov 2002 Non può essere passata per valore? Mi sembrava che dicesse "viene passata sempre per valore" ... -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Per Claudia (2) Scusa il clamoroso ritardo, cmq io in questo momento sto consegnando l'esercizio e l'output della funzione m mi viene uguale all'esempio. Spero sia tutto giusto (ci ho messo mezza giornata per CAPIRE come funzionava la funzione -E!!). Mi dispiace di non poterti essere d'aiuto, onestamente mi rode anche abbastanza visto che mentre implementavo le diverse funzioni mi ricordo che tra i vari errori mi dava un 70!! Anche se non ricordo su quale funzione :-( Cmq gli errori che commetto---+ comunemente sono dovuti agli operatori di confronto, usualmente scrivo: <verbatim> if a = b then begin codice end </verbatim> che da come si puo' notare, anche se simile come struttura (naturalmente!), scrivere una cosa del genere in C: <verbatim> if ( a = b ) <-- Notare la forma sbagliata = e non == { codice } </verbatim> non e' proprio la stessa cosa! :-) Cmq se puoi essere---+ precisa sul tipo di errore, oltre il segmentation fault (e altro) a cui ti ha risposto Arcangelo, domani dall'ufficio spero di esserti + utile. (ho riletto ora il tuo ultimo msg e forse hai risolto tutti gli errori...!?). -- Comment added by Users.TizianoMorgia on 25 Nov 2002 Eh già ... = è un assegnamento e non un confronto! -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Fibonacci -E Segue la fibonacci -E come l'ho capita io, sperando che sia giusta! <verbatim> FE <-- Fibonacci -E FE( 5, 4 ) <-- non si conosce il ris e scende FE( 4, 3 ) <-- vedi sopra FE( 3, 2 ) <-- vedi sopra FE( 2, 1 ) <-- vedi sopra FE( 1, 0 ) <-- valore conosciuto: 1 ritorna 1 e 0 ritorna 1 </verbatim> a questo punto se prendiamo le ultime due chiamate notiamo che il primo valore della penultima FE( 2, 1 ), ovvero il 2, e' dato dalla somma dei due valori restituiti dall'ultima, FE( 1, 0 ). Ma noi sappiamo che l'ultima contiene anche il risultato del secondo valore della penultima, ovvero 1. A questo punto la procedura e' ricorsiva (ma guarda un po' :-) ) per i valori precedenti. PS: io alla fine ho rinunciato ad usare la struct ed ho usato un vettore di 2 elementi. La sanita' mentale prima di tutto! :-) -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- ---+++ Risposta giusta? x Sterbini Vorrei sapere, se possibile prima della scadenza della consegna, una conferma che il risultato di <verbatim> ./hw5 -A 5 </verbatim> deve essere <verbatim> * 5 ** 4 *** 3 **** 2 ***** 1 ***** 0 8 </verbatim> -- Comment added by Users.ArcangeloTripi on 25 Nov 2002 In realtà esistono due modi di usare un array per memorizzare i valori ... Io normalmente faccio così: 1 stampo la traccia 1 cerco il valore e se lo trovo lo ritorno 1 altrimenti faccio la chiamata ricorsiva 1 una volta avuto il valore lo memorizzo Mi viene una traccia con asterischi che aumentano e poi diminuiscomo ... (non ho sottomano l'implementazione) -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Per Tiziano Non preoccuparti sono riuscita a risolvere quegli errori, ma a questo punto volevo chiederti se hai messo un long come valore di ritorno per fibonacci e per il fattoriale (ma quanto ci mette per calcolare fibonacci(45)?). Grazie! -- Comment added by Users.ClaudiaCantelli on 25 Nov 2002 2^45 chiamate ... -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Fibonacci(45) normale Ho fatto una prova per verificare la fibonacci di 45. Ho fatto lo sbaglio di mandare l'output su file di testo...quando il file è arrivato ad 1,1Gb(!!!!!) mi e' "caduta" la mano su CTRL---+C! Cmq io ho usato dei long per tutte le funzioni (tranne che per la profondita'). -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- ---+++ E pensa che aveva appena iniziato Ho calcolato che la dimensione dell'output per fibonacci(45) e' dell'ordine di grandezza di 10^15 byte, ossia un milione di GB. Tocca procurarsi un disco rigido bello grosso.... -- Comment added by Users.ArcangeloTripi on 25 Nov 2002 ---- ---+++ -E Fibonacci efficente Sono riuscito ad ottenere ricorsivamente un'array con il valore corrente e il valore precedente(cioè -1 se ho capito bene!!!), ma non riesco proprio a capire quando e cosa far ritornare dalla funzione!!!! Se c'è qualcuno che mi può aiutare, Grazie... -- Comment added by Users.AndreaArtibani on 25 Nov 2002 ---- ---+++ Scomparsa parametro Per stampare la progressione ho aggiunto un parametro ad ogni funzione. Questo metodo funziona in tutte le funzioni tranne che nella GCD... In poche parole la prima volta che richiamo la funzione GCD il parametro progressione non viene letto...la conferma me la da la printf di controllo che ho inserito.. Ho provato anche ad invertire l'ordine dei parametri ma quello non viene passato! -- Comment added by Users.DarioLatini on 25 Nov 2002 G vuole due parametri, quindi nel tuo caso dovrebbero essere 3 -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Re: -E Fibonacci efficente Per quanto mi riguarda non devi far tornare nulla alla funzione se intendi qualcosa tipo: "int funzione(....)". L'array che sei riuscito ad ottenere e' gia' il ritorno che ti serve. Se rileggi il testo dell'HW ti dice che per far tornare due valori o usi una struct (cosa che io non ho fatto e quindi non espongo suggerimenti) o ti passi un array di due valori che la funzione <b>modifichera'</b> (notare il grassetto!). -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- ---+++ .... stiamo a lunedi alle 11,53 e stasera a mezzanotte c'e' il termine per la consegna... la fibonacci efficiente ancora non e' definitiva... mi astengo dall'aggiungere altro !! -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 Non è vero che ti astieni ... stai continuando ad aggiungere altro ... :-) -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Re:Re: -E Fibonacci efficente Ok ho capito il non "ritorno", ma allora cosa devo sommare?!? Grazie ancora... -- Comment added by Users.AndreaArtibani on 25 Nov 2002 Se hai i due valori F(n-1) ed F(n-2) e li sommi ottieni il nuovo F(n) ... quindi è immediato costruire la nuova coppia -- Users.AndreaSterbini - 25 Nov 2002 ---- ---+++ Parse error? nella parte della funzione m (mutuamente ricorsiva) ho inserito il prototipo di g: int m(int x, int p) { int a,b; int g(int ,int); if(x==0)... però mi dà l'errore: Parse Error, expecting `SEP' non capisco perchè!! Eppure la sintassi dovrebbe essere corretta -- Comment added by Users.AlessandroAvorio on 25 Nov 2002 Prova a spostare il prototipo fuori dalla funzione. -- Users.AndreaSterbini - 25 Nov 2002 Eli, la fibonacci efficiente è sempre stata definitiva, è variato (giustamente) solo il modo di chiamarla. -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- ---+++ Re: -E Fibonacci efficente pER TIziano il vettore lo riempi ricorsivamente all'interno della funzione dunque? o una sola volta nel main? -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ---+++ Memoization pure per M e per G? C'e' qualcuno che si è incuriosito abbastanza da usare la tecnica della *memoization* anche per la funzione *g* e/o per la *m*? A lezione vi faccio vedere che differenza fa! -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ domanda x sterbini è un bug di twiki che se uno sta editando e un altro aggiunge una domanda quest'ultima viene cancellata? perchè sono già 2 volte che i miei interventi vengono censurati da un certo Users.AndreaSterbini ... -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- E' un bug del plugin per i commenti ... Per favore riaggiungi il commento mancante (uno l'ho aggiunto io). -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ Non voglio polemizzare - x Sterbini Pero' polemizzo :) Se implemento la soluzione efficiente con il vettore in modo da arrivare in fondo al calcolo una sola volta per ogni caso completo, mentre richiamo il valore quando e' disponibile, mi devo aspettare di trovare n---+1 tracce per fibonacci(n). Una in piu' della soluzione con le strutture perche' in quella soluzione il caso elementare comprendeva sia f(1) che f(0). C'e' qualche errore in questo ragionamento? -- Comment added by Users.ArcangeloTripi on 25 Nov 2002 ---- ---+++ domanda x sterbini (aggiunta) * bella la domanda di Laura. Come funziona? Twiki adotta un sistema "ottimistico" per gestire la modifica da parte di due utenti contemporanei? C'e' differenza tra scrivere nel box e modificare direttamente la pagina (sono molto sicuro che c'e' mooolta differenza, ma una conferma non fa mai male)? Io di rado modifico direttamente la pagina, credo sia---+ immediato e meno pericosolo sotto questo punto di vista quello che fa il pulsante "Aggiungete la domanda", anche se poi mi ritrovo costretto a fare come un newsgroup "RE:...". * per la memoization per M e G non ci ho assolutamente pensato, mi e' bastata l'implementazione della -E! :-) * x Elisabetta: non ho il codice sottomano, cmq a quanto mi ricordo il vettore e' nella main, all'interno della funzione (questa parte non la ricordo benissimo xche' avevo in mente due o tre modi per farlo e alla fine ne ho scelto uno) dovrei essermi messo da parte i valori che mi venivano passati, per farmi i calcoli dopo la chiamata ricorsiva, altrimenti sbagliavano alla grande...lo so, mi dimentico sempre di spedirmi una copia degli HW in ufficio...e la vecchiaia comincia a farsi sentire... :-) -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- Penso/Credo: per quanto riguarda l'edit c'è il lock della pagina quando qualcuno la sta editando. se scrivi nel box fa in automatico quello che farebbe l'utente: va in edit, inserisce il testo e salva la pagina. probabilmente l'edit automatico del textbox non verifica il lock dell' edit -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- ---+++ forse parlo arabo... ma non riesco a farmi capire...di modi per implementare questo benedetto fibonacci efficiente ce ne sono piu' d'uno.. ma a me interessa capire quello che lo sterbini vuole... sono di coccio... ma se mi creo l'array di appoggio coi valori dei valori prececedenti della fibonacci efficiente, dentro alla funzione... non vedo efficienza... perche' il vettore viene ricalcolato ad ogni chiamata della funzione stessa...se lo metto fuori la ricorsivita' dell'esercizio dove sta?? la mia domanda e' semplice: -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ---+++ e' giusto questo output? es5 -A 0 * 0 1 OPPURE DOVREBBE ESSERE es5 -A 1 * 1 1 -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ---+++ Please Perfavore, qualcuno, o il prof stesso, potrebbe completare il testo dell'ese5 prima della scadenza di stasera, con la traccia ricorsiva della funzione Fibonacci Efficiente, che si ottiene tramite -A ? -- Comment added by Users.AndreaBandino on 25 Nov 2002 ---- Vista la definizione, mi sembrano entrambi corretti ( F(0)=F(1)=1 ) -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- Purtroppo non riesco a farlo prima di stasera -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- Twiki gestisce un lock sul file, ma il plugin dei commenti purtroppo no ... (almeno nella versione installata) Per quanto riguarda *-A* mi pareva di aver scritto: "si allochi un vettore di dimensioni adeguate che ricorda per ogni n il valore di F(n). Il valore F(n) viene inserito nel vettore la prima volta che viene calcolata F(n) e da quel momento in poi ogni chiamata successiva di F(n) prima controlla se il valore è stato calcolato ed in caso positivo lo ricava dal vettore." La descrizione è davvero così oscura? A me fa venire in mente lo schema descritto sopra: 1 stampo la traccia 2 cerco il valore e se lo trovo lo ritorno 3 altrimenti faccio la chiamata ricorsiva 4 una volta avuto il valore lo memorizzo A voi che schema fa venire in mente? (spero non un ciclo che riempie il vettore perchè questa non sarebbe una implementazione ricorsiva) -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ re:forse parlo arabo di modi ce ne sono 2. consideriamo quello con il vettore di 2 elementi per l'output di > es5 -E 5 : <verbatim> la f(5) richiama la f(4) la quale restituisce (attraverso il vett) la f(4) e la f(3) la f(4) richiama la f(3) la quale restituisce la f(3) e la f(2) ... la f(2) richiama la f(1) la quale restituisce 1 e 1 </verbatim> l'efficienza sta nel fatto che x esempio la f(5) non deve richiamare pure la f(3) perchè questa gli viene passata dalla f(4) oppure vedila a ritroso: <verbatim> la <br>f(1)</br> ritorna alla f(2) <br>f(1)</br> (=1) e f(0) (=0) la <br>f(2)</br> ritorna alla f(3) f(2) e <br>f(1)</br> <-- come vedi la f(2) non si deve ricalcolare niente perchè ha già i valori che gli servono da tornare alla f(3) </verbatim> (...un consiglio: spegni il pc, prendi carta e penna e fatti uno schema su chi chiama chi e i valori che ogni chiamata ritorna: vedrai che se arrivando all'ultima chiamata dello schema hai tutti i valori che ti servono) -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- ---+++ Peggio mi sento come il vettore ritorna la f4 e la f5... non stai facendo confusione con la prima opzione ossia quella dei due valori?? il vettore e' compostao da interi eh cioe' un elemento non e' una coppia ma un intero vero e proprio o no?!? -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ---+++ Output fibonacci efficiente.. es -A 5 vorrei l'output pliz.... -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- io ho provato a spiegarti come sono riuscita a implemetare la fibonacci efficiente per la -E (che è poi lo stesso ragionamento fatto da Tiziano) ragionando sulla spiegazione di sterbini ... Volendo calcolare F(n), se la chiamata ricorsiva a F(n-1), invece di tornare 1 valore ne tornasse 2 (cioè F(n-1) ed F(n-2)) allora sarebbe facile calcolare dai valori tornati i valori da tornare per F(n) ... Per il caso base basta tornare la coppia (1,1) se n=1. ... se vuoi usare il vettorone resetta tutto, e non prendere in considerazione il mio intervento -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- ---+++ altri esempi su l'opzione -m <font color="red" size=6>si possono avere altri esempi sull' opzione -m del tipo es5 -m 4 oppure es5 -m 6 ? grazie</font> -- Comment added by Users.CristianoMarra on 25 Nov 2002 ---- a me viene così: (se c'entra...) <verbatim> es -m 4 * 4 ** 3 *** 2 **** 1 ***** 0 ***** 1 ****** 0 ****** 0 **** 2 ***** 1 ****** 0 ****** 0 ***** 1 ****** 0 ****** 1 ******* 0 ******* 0 *** 3 **** 2 ***** 1 ****** 0 ****** 0 ***** 1 ****** 0 ****** 1 ******* 0 ******* 0 **** 2 ***** 1 ****** 0 ****** 1 ******* 0 ******* 0 ***** 2 ****** 1 ******* 0 ******* 0 ****** 1 ******* 0 ******* 1 ******** 0 ******** 0 ** 4 *** 3 **** 2 ***** 1 ****** 0 ****** 0 ***** 1 ****** 0 ****** 1 ******* 0 ******* 0 **** 2 ***** 1 ****** 0 ****** 1 ******* 0 ******* 0 ***** 2 ****** 1 ******* 0 ******* 0 ****** 1 ******* 0 ******* 1 ******** 0 ******** 0 *** 3 **** 2 ***** 1 ****** 0 ****** 1 ******* 0 ******* 0 ***** 2 ****** 1 ******* 0 ******* 0 ****** 1 ******* 0 ******* 1 ******** 0 ******** 0 **** 3 ***** 2 ****** 1 ******* 0 ******* 0 ****** 1 ******* 0 ******* 1 ******** 0 ******** 0 ***** 2 ****** 1 ******* 0 ******* 1 ******** 0 ******** 0 ****** 2 ******* 1 ******** 0 ******** 0 ******* 1 ******** 0 ******** 1 ********* 0 ********* 0 -8 </verbatim> -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- ---+++ x Elisabetta d'Arabia Forse allora, a giudicare dalle altre frasi che hai postato, tu stai implementando la -A e NON la -E!?!? Questo xche' sono due metodi completamente diversi, la -A usa "un vettore di dimensioni adeguate" e come ha scritto il Prof. Sterbini segue esattamente quei punti (si tratta di fare un po' di sincronia tra chiamate e nulla di---+), la -E invece <b>scende</b> fino alla F( 1, 0 ) xche' accetta due valori (nel caso dell'array di due valori) e come ho scritto da qualche parte <b>modifichera'</b> i valori passati fino a risalire... PS: al commento del Prof. Sterbini mancano solo le indentazioni per somigliare all'algoritmo che viene fuori nel caso -A! Vostro Tiziano detto <I>Lorenz</I>...che forse parla arabo! :-) :-) PPS: spero che si capisca che la faccenda Araba sia ironica e assolutamente NON offensiva! -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- ---+++ grazie Laura per la disponibiulita' ma cerco di sviluppare il caso col vettore... e' opzionale...ho il programma pronto da venerdi.... tanto questa fibonacci efficiente e' opzionale no?!?!?..pero' mi rode...!!ù non sai quanto... grr.. -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ... e pensare che la m-g-efficiente fa solo una manciata di chiamate ... :-) -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- Elisabetta, per favore calmati ... non c'e' bisogno di incavolarsi ... -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ Se non so cosa devo fare, come lo posso fare? Io la mia soluzione per l'opzione -A l'ho data, <verbatim> ./w5 -A 5 * 5 ** 4 *** 3 **** 2 ***** 1 ***** 0 8 </verbatim> e in un post successivo l'ho anche motivata. Pero' mi si dice che _forse_ la soluzione ritenuta corretta e' diversa. In questo caso, non avendola potuta controllare, non mi sembrerebbe giusto se mi venisse dato un errore in queste condizioni. Non che mi impiccherei al bidet per la disperazione :) , ma non mi sembrerebbe giusto. -- Comment added by Users.ArcangeloTripi on 25 Nov 2002 ---- ---+++ La fibonacci efficiente Scusi proffessore ci potrebbe dare al piu' presto la traccia del fibonacci efficiente che ricorda per ogni n il valore di F(n) perché non sapiamo con che confrontarlo...Grazie -- Comment added by Users.OltionDoda on 25 Nov 2002 ---- ---+++ RE: Se non so cosa devo fare, come lo posso fare? Mi associo ad Arcangelo, il fatto che al Prof. Sterbini venga una cosa del genere (anche io non ho il codice sottomano, vado a memoria): <verbatim> * 5 ** 4 *** 3 **** 2 ***** 1 ***** 0 ***** 1 **** 2 *** 3 ** 4 * 5 (qualcosa di simile) </verbatim> significa che il codice chiamante della ricorsivita e' scritto---+ o - cosi': <verbatim> {...} appoggio = FA( ... )---+ FA( ... ); vettore[ valore ] = appoggio; {...} </verbatim> questa era---+ o - la mia vecchia versione che ritornava un output come quello sopra descritto (nel testo l'ho remmato e consegnato). Poi ho modificato la funzione e mi e' diventata come quella di Arcangelo (spero/credo, forse per lo zero ho un asterisco in +) perche' visto che effettua la meta' delle ricorsioni penso che sia + <b>efficiente</b>! Efficiente o non Efficiente...questo il dilemma! :-) -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- ---+++ riassumendo... fibonacci efficiente dall'oriente con il vettore di appoggio.... alla funzione passo n e profondita mi stampo la traccia.... poi mi forzo a zero tutti gli elementi del vettore di appoggio poiesamino n se e' uguale a zero o a uno ritorno il risultato ch ee' uno... altrimenti verifico se il corrispondente valore del vettore e' zero.. (non e' mai stata calcolata per quel valore..) se e' zero chiamata ricorsiva come in fibonacci non efficiente.. altrimenti prendo il valore del vettore.... vado a afre i biglietti per l'arabia :) -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- Bene, vedo che ci sono almeno un centinaio di modi diversi per interpretare la mia specifica .... Mi fa piacere vedere che vi siete dati da fare! Mi date un sacco di soddisfazioni! (e non sto assolutamente prendendo per i fondelli). L'output che viene a me è quello _su e giù_ di Tiziano ... ma capisco che anche quello di Arcangelo sia possibile ... Cercherò di verificare l'esercizio in modo da riconoscere il merito a tutte le implementazioni ricorsive proposte ... -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ DAI ELI SEI TUTTI NOI!!! -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- Non faccio in tempo a creare l'output tanto agognato perchè sono fuori sede e rientro a casa stasera. -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ Tanto per aggiungere un po di confusione in piu! La mia implementazione della fibonacci efficiente con opzione -A da lo stesso identico output della -E, facendo lo stesso numero di passaggi. C' è qualcun' altro che ha riscontrato gli stessi risultati? O devo incominciare a preoccuparmi seriamente perche sono andato completamente fuori strada? -- Comment added by Users.SandroChecchi on 25 Nov 2002 ---- ---+++ vi aggiorno .. dato che state a fare il tifo per me :)) dunque ho sviluppato questa fibonacci efficiente(la sognero' temo) .. mi fa su e giu' (rido per l'espressione)come dice il professore... (che ci sta a fare in giro invece di fare l'output per noi?!?!?) mi sta succendedendo il massimo... ahah.. mi arriva a tre nel giu'... altro che arabia.. mi ci vuole la neuro... -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ---+++ Ho consegnato... anche se la fibonacci efficienti andava...sistemata... rischio il licenziamente altrimenti.... vi auguro buona serata! -- Comment added by Users.ElisabettaDAiutolo on 25 Nov 2002 ---- ---+++ x Elisabetta... se non sei gia' partita :-) io se fossi in te quel vettore lo resetterei una volta sola all'inizio (prima di chiamare la funzione la prima volta), altrimenti il valore lo calcoli sempre in ricorsione visto che ogni volta che entri dentro la funzione lo resetti! PS per il Prof. Sterbini: lei ha scritto "L'output che viene a me è quello su e giù di Tiziano"...non esprimo commenti sul fatto di aver cambiato l'output 20 minuti prima di consegnare l'esercizio visto che mi sembrava---+ corretta la forma a cui poi Arcangelo mi ha dato conferma. Apro una piccola nota: visto che la -A e la -E sono due algoritmi per implementare la <b>stessa</b> soluzione (far diventare la fibonacci lineare), penso (e con questo rispondo anche a Sandro) che dovrebbero ritornare due tracce identiche o almeno simili chiamando la -A e la -E......cerco di esprimermi meglio, se la -A mantiene un output "sali-scendi-numero-di-asterischi" mi viene da pensare che stia calcolando 2 volte un valore che gia' aveva nel vettore o che almeno stia scendendo di ricorsivita' non necessarie (sottolineo che non ricordo esattamente l'output che ho scritto qualche msg fa). Infatti i valori di ricorsivita' sono ripetuti. A questo punto, se il ragionamento precedente e' giusto, penso che l'output "sali-scendi..." non sia quello cercato. -- Comment added by Users.TizianoMorgia on 25 Nov 2002 ---- Ragazzi, io non sto continuamente cambiando le carte in tavola, bensì continuo a spiegare sempre la stessa cosa ad un gruppo di persone che l'hanno capita in modi diversi (o l'hanno implementata in modi diversi). In particolare, la chiamata "sali e scendi" corrisponde ad una implementazione che segue l'idea della *memoization*, e che: * la prima volta che calcola un valore lo memorizza * nelle chiamate successive lo ricava dal vettore E' chiaro che io *traccio* tutte le chiamate, anche la seconda chiamata in cui estraggo il valore dal vettore. Forse sarebbe meglio essere tutti meno suscettibili (mi ci metto pure io) -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ "Non faccio commenti..." Ora mi avete fatto girare le scatole ... ma non faccio commenti ;-) -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- ---+++ Ultimi dubbi... Il nostro programma stamperà le solite sei righe di output solo quando verrà scelta l'opzione -v??In qualunque altro caso deve stampare traccia della chiamata ricorsiva e risultato sbaglio??Fatemi sapere...grazie -- Comment added by Users.AlessandroCaruso on 25 Nov 2002 ---- proprio così -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- Esatto, si stampano le 6 righe solo per ==-v== -- Comment added by Users.AndreaSterbini on 25 Nov 2002 ---- grazie Laura e prof -- Comment added by Users.AlessandroCaruso on 25 Nov 2002 ---- ---- ---+++ Complimenti a Sterbini Ho fatto l' HomeWork5aa0203 anche avendo superato già l'esame di programmazione I, magari avessi avuto l'opportunità l'anno scorso di fare gli HomeWork. Sono una grande cosa... Così mi tengo in allenamento ... Grazie Sterbini sei un mito!! -- Comment added by Users.VitoDiMasi on 25 Nov 2002 ---- i figli più piccoli (piccoli in senso metaforico.. sigh) sono sempre i più fortunati :) -- Comment added by Users.LauraRavagli on 25 Nov 2002 ---- ---+++ CONSIGLIO X IL PROF! al prossimo esercizio se nn le dispiace potrebbe mettere piu esempi di output x verificare se è giusto o meno quello ke noi stiamo implementando? Xke delle volte succede ke il suo esempio con un valore piccolo funzione e poi magari con un valore grande il compilatore risponde a cavolo! cosi giusto x controllare meglio i nostri esercizi e x nn trovare tutti no quando andiamo a vedere i risultati dei test da lei effettuati! grazie x la collaborazione! in bocca al lupo tutto! -- Comment added by Users.AndreaSantoro on 25 Nov 2002 ---- ---+++ RICHIESTA X IL PROF! ok nn ce l'ho fatta succede no?alla fine quel diavolo di fibonacci efficente nn mi è proprio venuto fuori!potrei fare una rikiesta che magari è un po rompina alla prox esercitazione ci si potrebbe dare un'okkiata rapida sullo svolgimento dell'efficente? :(?? -- Comment added by Users.LucaContestabile on 26 Nov 2002 ---- Spero che tu abbia almeno consegnato le altre funzioni! Certo che vedremo le implementazioni in aula! -- Comment added by Users.AndreaSterbini on 26 Nov 2002 ---- ---+++ Che fesso.... ...che sono, nella GCD non ho ordinato i valori in entrata! :-( Come diceva il saggio: "La gatta presciolosa fa 'i gattini ciechi!"<br> (Antico detto romano)<br> Cmq mi sono divertito ad implementare questi algoritmi e tanto basta! -- Comment added by Users.TizianoMorgia on 27 Nov 2002 ---- ---+++ Problema homework 5 Spett.le prof.Sterbini,sono un suo alunno del canale E-0. Perdoni la mia ignoranza ma non ho capito qual'è il problema sul mio esercizio. La prego di inviarmi al più presto una delucidazione al riguardo. La ringrazio anticipatamente, -- Comment added by Users.ChristianGiugliano on 27 Nov 2002 Il tuo esercizio non legge i parametri dalla riga di comando ma da stdin, per cui si blocca in attesa dell'input che non arriverà mai e non passa nessun test (tranne la compilazione). -- Comment added by Users.AndreaSterbini on 27 Nov 2002 ---- ---+++ Commenti su soluzione Fibonacci efficente del Prof. Sterbini Salve Prof. Ho letto la sua soluzione x il calcolo del fibonacci efficente, con metodo memorization. Ho notato che lei prima stampa la traccia e poi verifica se il valore era gia' stato calcolato, verificandone la presenza nel vettore degli elementi cache (memo). Ok ma questo fa si che il trace generato sia diverso dal caso di chi invece prima verifica e poi stampa/calcola. Che a logica mi sempra piu' corretto, perche' se il valore l'avevo gia' calcolato, esco subito dalla ricorsiione. Qual'e'/era la soluzione giusta? Dato che non e' stato pubblicato un esempio di trace x tempo (lunedi 25) non dovrebbe essere piu' tollerante verso altri approcci??? -- Comment added by Users.AlessandroCamillo on 28 Nov 2002 ---- ---++++ Soluzione "più giusta"? Se vi rileggete il testo dell'esercizio, vi accorgerete che la traccia delle funzioni va stampata sempre, ogni qualvolta si entra in una di esse. ( HomeWork5aa0203#Traccia_della_chiamata_ricorsiva ) Quindi la traccia va stampata anche se la funzione che viene chiamata troverà il valore nel vettore. Questo è il motivo per cui ho implementato la funzione come avete visto. -- Comment added by Users.AndreaSterbini on 28 Nov 2002 ---- ---+++ Lei è sicuro prof??? Ho visto solo ora i risultati dell'homework 5, ho visto la soluzione e mi chiedo, ma se la funzione GCD l'ho fatta identica alla sua funzione, come mai nel mio test c'è un bel NO, seconda cosa: i test che ho effettuato sul fattoriale e sul fattoriale efficiente sono identici all' output d' esempio ed anche lì ho un bel NO. come mai? :-( La prego di soddisfare la mia curiosità grazie :-) -- Comment added by Users.CristianoMarra on 03 Dec 2002 ---- Ho controllato i test ed ho notato alcuni problemi per cui sto ricalcolando tutti i test. I problemi che ho trovato per l'esercizio 5 sono: * per il fattoriale ho usato *int* ed al massimo ci entra 12! ... mentre i test li ho fatti fino a 13! * alcuni programmi non stampano il carattere \n finale e così il controllo fallisce ... ora l'aggiungo direttamente io * la funzione GCD(x,y) deve essere chiamata con gli argomenti x≤y (leggete il testo) Appena terminati i conti pubblico le tabelle dei risultati aggiornate -- Comment added by Users.AndreaSterbini on 03 Dec 2002 ---- ---+++ Lei è sicuro prof??? (2) ho letto i test rifatti prima il fattoriale lei mi ha messo 'YES' ora con i test rifatti lei mi ha messo 'NO', come mai? -- Comment added by Users.CristianoMarra on 05 Dec 2002 ---- I test dell'esercizio 5 sono stati fatti estraendo 5 volte a caso dei valori per i parametri e controllando che il vostro output fosse uguale al mio. Ho rifatto tuttt i conti perche' sul fattoriale avevo sbagliato io ... e questa volta non sei stato cosi' fortunato nella scelta (ripeto casuale) dei parametri ai quali e' stato sottoposto il tuo programma. -- Comment added by Users.AndreaSterbini on 06 Dec 2002 ---- ---+++ Errore compilazione Professore ho provato a compilare la sua soluzione pubblicata dellhomework 5 ma mi da il seguente errore di compilazione <verbatim> homework5.c:1: parse error before `ricordo' homework5.c: In function `emme_memo': homework5.c:60: `memo' undeclared (first use in this function) homework5.c:60: (Each undeclared identifier is reported only once homework5.c:60: for each function it appears in.) homework5.c: In function `gi_memo_memo': homework5.c:79: `memo1' undeclared (first use in this function) homework5.c: In function `emme_memo_memo': homework5.c:97: `memo' undeclared (first use in this function) </verbatim> Eppure memo e memo1 sono dichiarate... La soluzione è stata compilata sotto Linux RedHat <verbatim> COME NON DETTO :) </verbatim> -- Comment added by Users.MarcoMarri on 16 Dec 2002 %COMMENT{button=" Aggiungete la domanda " mode="before" lines="5"}% <a name="form"> * usate il tag %RED%<verbatim>%FINE% per i pezzi di codice che includono accapi * 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
>
DomandeHomework5aa0203
Topic revision: r264 - 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