Domande (e risposte) sull' HomeWork5aa0203



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! frown

-- 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! frown

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

-- AndreaSterbini - 13 Nov 2002


BUona Fortuna

buona fortuna per l'homework 4...mi sembra piu' difficile degli altri!!! smile

-- 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 :)
  1. è lecito usare la math.h ?
  2. nel programma si deve solo lanciare un' opzione per volta oppure si può anche fare così: es4 -f 5 -v ?
  3. 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! smile

-- Comment added by CristianoMarra on 13 Nov 2002

  1. OK per math.h ... aggiungero' l'opzione -lm alla compilazione
  2. Le opzioni vanno usate in modo esclusivo (una sola per volta).
  3. 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!!! smile smile smile smile

-- 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! smile (ed alla vostra codina di paglia smile ) ... 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 smile

-- 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' smile

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 smile

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

-- AndreaBandino - 14 Nov 2002

Vedo frown ... 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 smile

-- 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à big grin 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) !!! hehe!

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

-- 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? smile

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 smile

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

  1. )la fibonacci di un numero > 40 ci mette 20 anni a calcolarsi, è normale?
  2. )usare swich è obbligatorio? mi funziona tutto con if e else, devo correggere?
  3. )il mio prog consente sia un argomento singolo (ad es -f) sia multipli (-fv), è una bella cosa o ho fatto un lavoraccio inutile? :-)
  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 :-)

-- Comment added by 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
  2. se usi switch lo impari, ma fai come vuoi
  3. beh, visto che non ho definito l'output da dare per parametri multipli ai fini della correzione hai fatto più lavoro del necessario
  4. 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! frown

(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 smile 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? smile

-- 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? smile

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

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

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

mad! Accidenti, lo so !!! implementate la funzione che ho definito ... la chiameremo fibonacci-di-Sterbini-che-non-si-ricorda-bene-qual-è-il-caso-base smile ... 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 ... ") big grin

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

-- 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 smile ):

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 frown

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

-- Comment added by LauraRavagli on 21 Nov 2002

Lo prenderò come un complimento cool! !

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

-- 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! smile

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

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

-- AndreaSterbini - 22 Nov 2002


Floating point exception (il ritorno)

nella funzione G ... perche'?!?!? uso SOLO interi frown

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

ed io x poco non mi dimeticavo d inviare l'esercizio frown

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

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

-- Comment added by 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 DanieleComandini on 22 Nov 2002

  1. non saprei ... mi dici troppo poco
  2. L'unica cosa importante è che siano definite (anche solo come prototipi) prima del loro uso
  3. 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 ... smile

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

Per parafrasare un proverbio che non mi ricordo esattamente: "chi di esercizio colpisce di esercizio perisce" smile

-- 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? smile 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.... frown

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

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! smile 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' smile ) 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! smile

-- 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ì:

  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

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

-- 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 smile 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! smile
  • 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... smile

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

  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 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! smile smile

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

-- 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 smile , 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! smile

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

-- 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 smile 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 wink

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

-- 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! frown

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? frown La prego di soddisfare la mia curiosità grazie smile

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

<tre spazi>---+++<spazio>Titolo della domanda
Testo della domanda
Edit | Attach | Watch | Print version | History: r264 < r263 < r262 < r261 < r260 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r264 - 2003-09-30 - AndreaSterbini






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