Traccia della chiamata ricorsiva
Ok sono stupido! Ma cosa vuol dire? Non ho capito!!
Cosa vuol dire.. Traccia della chiamata ricorsiva
-- Comment added by
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
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.
--
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
TizianoMorgia on 12 Nov 2002
Sono esclusivi.
--
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
MarcoEsposito on 12 Nov 2002
Accidenti, che svista, correggo subito!
--
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
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
LucaAngeletti1 on 12 Nov 2002
Fatto.
--
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
GermanoGuerrini on 12 Nov 2002
Lo spiego a lezione oggi. (e comunque nessuno vi impedisce di cercare da soli

)
--
AndreaSterbini - 13 Nov 2002
BUona Fortuna
buona fortuna per l'homework 4...mi sembra piu' difficile degli altri!!!
-- Comment added by
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
EnricoDiPaolantonio on 12 Nov 2002
Ottima idea, ora spengo twiki, tanto non ne avete bisogno.
--
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
return fibonacci(n-1)---+ fibonacci(n-2);
piuttosto che
return fibonacci(n-2)---+ fibonacci(n-1);
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
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
x = f()---+ g();
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.
--
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.
--
AndreaSterbini - 13 Nov 2002
ehm
esercizio4.c:9: switch quantity not an integer
esercizio4.c:10: case label does not reduce to an integer constant
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
ValerioTesei on 13 Nov 2002
Leggi il secondo carattere. (suggerimento di Valerio Tesei)
--
AndreaSterbini - 13 Nov 2002
Qualche domanda
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 :)
- è lecito usare la math.h ?
- nel programma si deve solo lanciare un' opzione per volta oppure si può anche fare così: es4 -f 5 -v ?
- 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!
-- Comment added by
CristianoMarra on 13 Nov 2002
- OK per math.h ... aggiungero' l'opzione
-lm
alla compilazione
- Le opzioni vanno usate in modo esclusivo (una sola per volta).
- fatto
--
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
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?
Andate a zappare!!!
--
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
fibonacci(x) = fibonacci(x-1)---+ fibonacci(x-2)
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
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.
--
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
CristianoMarra on 13 Nov 2002
La sequenza di Fibonacci (matematico di diversi secoli fa) è: 1 1 2 3 5 8 13 21 ...
--
AndreaSterbini - 14 Nov 2002
funzione 42
riguardo la funzione 42 se io inserisco 2 la funzione f(x) = f(x-1)---+ 2*x che numero mi deve restituire?
GRAZIE
-- Comment added by
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:
2
* 1
** 0
48
--
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
EnricoDiPaolantonio on 13 Nov 2002
A pagina?
--
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
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).
--
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
--
AndreaBandino - 14 Nov 2002
Vedo

... ma per favore implementatela come l'ho detta senno' mi tocca riscrivere tutto l'esercizio.
--
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
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).
--
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
AlessandroCamillo on 14 Nov 2002
Ho messo la trace di Fibonacci.
--
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
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
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à

Non ne esco... In esecuzione ho un loop fino a -174683 e poi un bel segmentation fault... sgrunt
-- Comment added by
ElisabettaDAiutolo on 14 Nov 2002
Io troverei piu' logico passare la stessa profondita' ai due addendi, e quindi scriverei (usando la tua notazione)
ultimo = fibonacci((n-1),p)---+ fibonacci((n-2),p)
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.
--
ArcangeloTripi - 15 Nov 2002
Ha ragione Arcangelo.
--
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
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
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
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
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.
--
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
MassimoCiappina on 15 Nov 2002
... a natale/inizio gennaio, come tutti i corsi del primo semestre.
--
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
AndreaSterbini on 18 Nov 2002
Varie
- )la fibonacci di un numero > 40 ci mette 20 anni a calcolarsi, è normale?
- )usare swich è obbligatorio? mi funziona tutto con if e else, devo correggere?
- )il mio prog consente sia un argomento singolo (ad es -f) sia multipli (-fv), è una bella cosa o ho fatto un lavoraccio inutile? :-)
- )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 :-)
-- Comment added by
AndreaZucchi on 18 Nov 2002
- 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
- se usi switch lo impari, ma fai come vuoi
- beh, visto che non ho definito l'output da dare per parametri multipli ai fini della correzione hai fatto più lavoro del necessario
- non importa che gestiate gli errori
--
AndreaSterbini - 18 Nov 2002
Fibonacci 2
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
o sbaglio?
-- Comment added by
LauraRavagli on 18 Nov 2002
Hai ragione, il testo dice così ... dovrò cambiare la mia implementazione!
(ma al lavoro che dicono di twiki?)
--
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
LauraRavagli on 18 Nov 2002
ancora fibonacci
m'era venuto sto dubbio e ho controllato... sul deitel fibonacci(0)=0
qua lessi---+ sopra che è 1.... insomma come stanno le cose?
-- Comment added by
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?
--
AndreaSterbini - 19 Nov 2002
L'urlo di fibonacci terrorizza anche l'occidente
scusate se continuo a rompere i maroni :-)
ho fatto una funzioncina fibonacci efficiente... va tutto alla grande fino al fibonacci(45)... il calcolo lo fa istantaneo e sono tutto felice
provo col 46 e zac esce un bel numero negativo
suppongo sia dovuto alle limitazioni del long...
a sto punto consiglierei di levare fibonacci dall'esercizio e rimettere fattoriale o una funzione ex novo
-- Comment added by
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 ...
--
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
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.
--
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
ElvisBodeci on 19 Nov 2002
Ho inserito l'output corretto sia per Fibonacci che per Fibonacci_efficiente, ora mi calcolo
m e la aggiungo.
--
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
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).
--
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
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
--
AndreaSterbini - 19 Nov 2002
Dove posso comprarla?
Davvero una bella macchina!

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
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
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
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...
-- Comment added by
ArcangeloTripi on 20 Nov 2002
Neanche io ... anche se un doppio AMD mi fa proprio gola ... quando lo compro vi dico come va
--
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
DanieleComandini on 20 Nov 2002
Che prompt? che vi faccio passare il primo argomento a fare? (-f -F -E -m -h -G)

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.
--
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*
4**
3***
2****
1*****
1*****
Rispondetemi perchè se deve cmq venire l'esempio proposto giuro che lo inserisco di printf("5*\n4**\n ... ")
--
MarcoMennillo - 24 Nov 2002
Prof se nn se la ricorda nn la facciamo che e' meglio!!!
-- Comment added by
AndreaSantoro on 20 Nov 2002
Fate come vi pare ... io testo la mia versione.
-- Comment added by
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
LauraRavagli on 20 Nov 2002
... adesso vediamo come finisci la rima
--
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
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
LauraRavagli on 21 Nov 2002
Immagino di sì
--
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
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
CristianoMarra on 21 Nov 2002
Vai dal (o scrivi al) tuo docente ... io che c'entro?
--
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
LauraRavagli on 21 Nov 2002
Lo prenderò come un complimento

!
Vai dal (o scrivi al) tuo docente ...
--
AndreaSterbini - 21 Nov 2002
ecco...
X qui frequenta ed è del III canale:
perchè non cercate di parlarne con i professori?
--
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
ValerioTesei on 21 Nov 2002
Basta bisticci

grazie.
--
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 :
m(0) = 0
g(0)= 1
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
PierluigiCau on 21 Nov 2002
Nell'esercizio c'e' scritto di calcolare m(x).
--
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
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:
2
* 1
** 0
48
in contraddizione con le specifiche dell hw5 che sono
h (quarantadue)
es5 -h 5 (che calcola la funzione 42 di 5)
* 5
** 4
*** 3
**** 2
***** 1
****** 0
72
Mi sono persa io qualche asterisco???????
-- Comment added by
ElisabettaDAiutolo on 21 Nov 2002
credo che l'output dovrebbe essere
* 2
** 1
*** 0
48
-- Comment added by
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 ...
--
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
PaoloCoppi on 21 Nov 2002
Non capisco ... vuoi dire che non riesci a scrivere
es5 -f 10
sulla riga di comando?
--
AndreaSterbini - 21 Nov 2002
Ancora output funzione 42
Concordo con Laura
* 2
** 1
*** 0
48
anche secondo me l'output dovrebbe essere quello....
-- Comment added by
ElisabettaDAiutolo on 21 Nov 2002
il commento del prof faceva riferimento ad un'implementazione non corretta.
-- Comment added by
LauraRavagli on 21 Nov 2002
Mi sono persa due asterischi
-- Comment added by
ElisabettaDAiutolo on 21 Nov 2002
Floating point exception
nella funzione G ...
perche'?!?!?
-- Comment added by
ElisabettaDAiutolo on 21 Nov 2002
Dipende da come l'hai implementata ... non usi solo interi?
--
AndreaSterbini - 21 Nov 2002
FUNZIONE G....
Dice il saggio: -G (GCD)
es5 -G 10 25 (calcola il Massimo Comun Divisore tra 10 e 25)
* 10 25
** 5 10
*** 0 5
5
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
ElisabettaDAiutolo on 21 Nov 2002
sta funzione G...
e le parentesi era gdc ((y%x),x,p)
mannaggia le parentesi eh
-- Comment added by
ElisabettaDAiutolo on 21 Nov 2002
Ma dovete proprio risolvere l'esercizio per gli altri? Volete togliere loro tutto il gusto di imparare? Egoisti!
--
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:
* 0
1
Mi pareva di averlo detto ... i test useranno solo numeri fino a 45.
Sì
--
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:
* 25 15
** 15 25
*** 10 15
**** 5 10
***** 0 5
è corretto, oppure devo controllare qual'è il maggiore prima di passarlo alla funzione?
-- Comment added by
AngeloFerrantini on 21 Nov 2002
Come detto nell'esercizio: "ricordatevi di disporre i due parametri in ordine crescente prima di chiamare la funzione"
--
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
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
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
FabioPoliti on 22 Nov 2002
Non so ... dovremmo guardare bene la definizione e ragionarci un po'
--
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
ValerioTesei on 22 Nov 2002
Povero piccolo ...
--
AndreaSterbini - 22 Nov 2002
Floating point exception (il ritorno)
nella funzione G ... perche'?!?!? uso SOLO interi
-- Comment added by
ElisabettaDAiutolo on 22 Nov 2002
ma il problema te lo da in esecuzione?
-- Comment added by
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
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
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
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
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
ElisabettaDAiutolo on 22 Nov 2002
Avrai mica fatto il resto della divisione per zero?
-- Comment added by
AndreaSterbini on 22 Nov 2002
RE: ecco..
scusa,
ma il calcolo della profondità è
* 10 25
** 5 10
*** 0 5
5
cmq, perchè non metti un pò di printf di debug oppoure usa il debugger.
la base di uscita è corretta?
-- Comment added by
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
ElisabettaDAiutolo on 22 Nov 2002
... madre teresa è già morta ...
-- Comment added by
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
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
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
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
ElisabettaDAiutolo on 22 Nov 2002
c'è sempre qualcosa sotto...
ed io x poco non mi dimeticavo d inviare l'esercizio
-- Comment added by
LauraRavagli on 22 Nov 2002
Scusatemi
basta risolvere... tutta colpa mia...
avevo lasciato nel mai long double.....
-- Comment added by
ElisabettaDAiutolo on 22 Nov 2002
povera madre teresa !
-- Comment added by
LauraRavagli on 22 Nov 2002
Domanda banale
Scusate come mai la stampa degli asterischi in fibonacci e nella funzione m non è piramidale come nella funzione fattoriale? cioè:
es5 -f 5
* 5
** 4
*** 3
**** 2
***** 1
****** 0
120
sull'esempio del fibonacci lei mette:
:
* 5
** 4
*** 3
**** 2
***** 1
***** 0
**** 1
*** 2
**** 1
**** 0
** 3
*** 2
**** 1
**** 0
*** 1
8
I numeri mi vengono ma la stampa degli asterischi è sempre piramidale
è sbagliato?
grazie
-- Comment added by
CristianoMarra on 22 Nov 2002
Perchè le due funzioni sono
doppiamente ricorsive
--
AndreaSterbini - 22 Nov 2002
scusate la stampa
scusate se ho stampato male l' esempio ho scordato gli accapo comunque spero di aver reso l'idea
-- Comment added by
CristianoMarra on 22 Nov 2002
Usate il tag <verbatim> !!!
--
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
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
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.
--
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....
* 5
** 1
** 0
** 2
** 1
** 3
*** 1
*** 0
** 2
134513841
sgrunt
-- Comment added by
ElisabettaDAiutolo on 22 Nov 2002
ATTENZIONE: ho separato 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
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
LauraRavagli on 22 Nov 2002
A vostro piacere!
--
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
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
ElisabettaDAiutolo on 22 Nov 2002
costruzione vettore di appoggio
ma se il vettore lo creo nella function dove sta l'efficienza?
-- Comment added by
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
EnricoDiPaolantonio on 22 Nov 2002
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
EnricoDiPaolantonio on 22 Nov 2002
Domanda per Sterbini
- Ş 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?
- Ş 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)
- Ş domanda] non è che avendo anche windows nello stesso hard-disk di linux, ciò mi crei problemi?
-- Comment added by
DanieleComandini on 22 Nov 2002
- non saprei ... mi dici troppo poco
- L'unica cosa importante è che siano definite (anche solo come prototipi) prima del loro uso
- non direi
--
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
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
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){
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
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
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
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
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
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
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
ElvisBodeci on 22 Nov 2002
tu alla switch gli passo int!
-- Comment added by
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
ElvisBodeci on 22 Nov 2002
ma che ti sei incantato??
-- Comment added by
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
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.
--
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
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
FabioQuarta on 22 Nov 2002
Da qualche parte hai chiamato la funzione senza passare tutti e 3 gli argomenti.
--
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
LeonardoParisi on 22 Nov 2002
Il secondo ... devi fare la traccia anche se l'argomento è 0.
--
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
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
FabioQuarta on 22 Nov 2002
Io ho il tuo stesso problema!!! Mi da "too few arguments"!
Se scopri dov'è l'errore fammi sapere!
Grazie
-- Comment added by
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
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
AndreaSantoro on 22 Nov 2002
C'E' QULKUNO VIVO SU TWIKI KE PUO RISPONDERE??????????????
-- Comment added by
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
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.
--
AndreaBandino - 23 Nov 2002
Altre opzioni
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 :-(
-- Comment added by
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
FabianoFerrazza on 23 Nov 2002
Esatto
--
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
ElvisBodeci on 23 Nov 2002
L'ho implementata e l'output mi sembra giusto.
--
AndreaSterbini - 25 Nov 2002
in realtà nemmeno a me dà tutto quell'output, anzi direi che è poco più della metà.
-- Comment added by
LauraMagrini on 23 Nov 2002
Hai tracciato anche la funzione
g ?
--
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
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
DomenicoBoiano on 23 Nov 2002
i = atoi(argv[2])
--
AndreaSterbini - 25 Nov 2002
Non volevo far polemica
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 :-)
-- Comment added by
CristianoMarra on 23 Nov 2002
Re: riga comando
int x;
sscanf(argc[2],"%d",&x) ;
-- Comment added by
LauraRavagli on 23 Nov 2002
FATTORIALE...
Ma per il calcolo del fattoriale, bisogna usare un tipo double?
-- Comment added by
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
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
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
ArcangeloTripi on 23 Nov 2002
Grazie Arcangelo!
--
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
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
12! = 479.001.600 < INT_MAX
13! = 6.227.020.800 > INT_MAX
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
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
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
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!.
--
AndreaBandino - 24 Nov 2002
Non
zotterò nessuno ...
--
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
ClaudiaCantelli on 24 Nov 2002
Mi sa che cerchi di usare un argv[i] che non c'e' ...
--
AndreaSterbini - 25 Nov 2002
RE: Mutuamente ricorsive
Forse e' una cavolata, ma hai forse dimenticato i "break" nella switch!?
-- Comment added by
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
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.
--
AndreaBandino - 24 Nov 2002
Ringraziamenti
Ti volevo ringraziare Laura Ravagli grazie alla tua risposta ho quasi completato il programma. Grazie!
-- Comment added by
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
PierluigiCau on 24 Nov 2002
Il 5 è il parametro
x della funzione ...
--
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
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
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
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
FabioPoliti on 25 Nov 2002
Non può essere passata per valore? Mi sembrava che dicesse "viene passata sempre per valore" ...
--
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:
if a = b then begin
codice
end
che da come si puo' notare, anche se simile come struttura (naturalmente!), scrivere una cosa del genere in C:
if ( a = b ) <-- Notare la forma sbagliata = e non ==
{
codice
}
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
TizianoMorgia on 25 Nov 2002
Eh già ... = è un assegnamento e non un confronto!
--
AndreaSterbini - 25 Nov 2002
Fibonacci -E
Segue la fibonacci -E come l'ho capita io, sperando che sia giusta!
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
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
TizianoMorgia on 25 Nov 2002
Risposta giusta? x Sterbini
Vorrei sapere, se possibile prima della scadenza della consegna, una conferma che il risultato di
./hw5 -A 5
deve essere
* 5
** 4
*** 3
**** 2
***** 1
***** 0
8
-- Comment added by
ArcangeloTripi on 25 Nov 2002
In realtà esistono due modi di usare un array per memorizzare i valori ...
Io normalmente faccio così:
- stampo la traccia
- cerco il valore e se lo trovo lo ritorno
- altrimenti faccio la chiamata ricorsiva
- una volta avuto il valore lo memorizzo
Mi viene una traccia con asterischi che aumentano e poi diminuiscomo ... (non ho sottomano l'implementazione)
--
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
ClaudiaCantelli on 25 Nov 2002
2^45 chiamate ...
--
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
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
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
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
DarioLatini on 25 Nov 2002
G vuole due parametri, quindi nel tuo caso dovrebbero essere 3
--
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
modifichera' (notare il grassetto!).
-- Comment added by
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
ElisabettaDAiutolo on 25 Nov 2002
Non è vero che ti astieni ... stai continuando ad aggiungere altro ...
--
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
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
--
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
AlessandroAvorio on 25 Nov 2002
Prova a spostare il prototipo fuori dalla funzione.
--
AndreaSterbini - 25 Nov 2002
Eli, la fibonacci efficiente è sempre stata definitiva, è variato (giustamente) solo il modo di chiamarla.
-- Comment added by
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
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
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
AndreaSterbini ...
-- Comment added by
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
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
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
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
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
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
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
AndreaBandino on 25 Nov 2002
Vista la definizione, mi sembrano entrambi corretti ( F(0)=F(1)=1 )
-- Comment added by
AndreaSterbini on 25 Nov 2002
Purtroppo non riesco a farlo prima di stasera
-- Comment added by
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:
- stampo la traccia
- cerco il valore e se lo trovo lo ritorno
- altrimenti faccio la chiamata ricorsiva
- 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
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 :
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
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:
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)
(...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
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
ElisabettaDAiutolo on 25 Nov 2002
Output fibonacci efficiente..
es -A 5
vorrei l'output pliz....
-- Comment added by
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
LauraRavagli on 25 Nov 2002
altri esempi su l'opzione -m
si possono avere altri esempi sull' opzione -m del tipo es5 -m 4 oppure es5 -m 6 ? grazie
-- Comment added by
CristianoMarra on 25 Nov 2002
a me viene così:
(se c'entra...)
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
-- Comment added by
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
scende fino alla F( 1, 0 ) xche' accetta due valori (nel caso dell'array di due valori) e come ho scritto da qualche parte
modifichera' 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
Lorenz...che forse parla arabo!
PPS: spero che si capisca che la faccenda Araba sia ironica e assolutamente NON offensiva!
-- Comment added by
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
ElisabettaDAiutolo on 25 Nov 2002
... e pensare che la m-g-efficiente fa solo una manciata di chiamate ...
-- Comment added by
AndreaSterbini on 25 Nov 2002
Elisabetta, per favore calmati ... non c'e' bisogno di incavolarsi ...
-- Comment added by
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,
./w5 -A 5
* 5
** 4
*** 3
**** 2
***** 1
***** 0
8
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
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
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):
* 5
** 4
*** 3
**** 2
***** 1
***** 0
***** 1
**** 2
*** 3
** 4
* 5
(qualcosa di simile)
significa che il codice chiamante della ricorsivita e' scritto---+ o - cosi':
{...}
appoggio = FA( ... )---+ FA( ... );
vettore[ valore ] = appoggio;
{...}
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 +
efficiente! Efficiente o non Efficiente...questo il dilemma!
-- Comment added by
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
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
AndreaSterbini on 25 Nov 2002
DAI ELI SEI TUTTI NOI
-- Comment added by
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
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
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
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
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
stessa 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
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
AndreaSterbini on 25 Nov 2002
"Non faccio commenti..."
Ora mi avete fatto girare le scatole ... ma non faccio commenti
-- Comment added by
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
AlessandroCaruso on 25 Nov 2002
proprio così
-- Comment added by
LauraRavagli on 25 Nov 2002
Esatto, si stampano le 6 righe solo per
-v
-- Comment added by
AndreaSterbini on 25 Nov 2002
grazie Laura e prof
-- Comment added by
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
VitoDiMasi on 25 Nov 2002
i figli più piccoli (piccoli in senso metaforico.. sigh) sono sempre i più fortunati
-- Comment added by
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
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
LucaContestabile on 26 Nov 2002
Spero che tu abbia almeno consegnato le altre funzioni!
Certo che vedremo le implementazioni in aula!
-- Comment added by
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!"
(Antico detto romano)
Cmq mi sono divertito ad implementare questi algoritmi e tanto basta!
-- Comment added by
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
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
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
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
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
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
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
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
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
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)
Eppure memo e memo1 sono dichiarate...
La soluzione è stata compilata sotto Linux
RedHat
COME NON DETTO :)
-- Comment added by
MarcoMarri on 16 Dec 2002
No such template def TMPL:DEF{PROMPT:before}
- usate il tag <verbatim> per i pezzi di codice che includono accapi
- Ricordatevi di dare un titolo alla vostra domanda come segue:
<tre spazi>---+++<spazio>Titolo della domanda
Testo della domanda