Indice
Esercitazione funzioni
Esercizio 1: funzione fattoriale (iterativa e ricorsiva)
Scrivere una funzione C che calcola il fattoriale di un intero n
e ne restituisce il risultato. Implementare la funzione in modo iterativo e ricorsivo.
Quando il programma e` corretto e funzionante sperimentare succede su numeri grandi. Provare per
n = 10000 n = 100000 n = 1000000
Usare il comando time
per misurare il tempo impiegato per il calcolo dalle due versioni. Per evitare di misurare il tempo di attesa del valore da calcolare, assegnate direttamente il valore nel codice senza usare la lettura da standard input o le stampe a schermo, ad esempio:
int main (void) { int n=1000000; fattoriale(n); return 0; }
Che risultati ci sono ? Come ve li spiegate ?
Esercizio 2: Inversione di una stringa (iterativa e ricorsiva)
Riprendendo l'esempio visto a lezione, scrivete una funzione iterativa ed una ricorsiva di prototipo
void invert (void);
che legge una sequenza di caratteri (stringa) terminata da \n
da standard input e la stampa rovesciata su standard output.
Esercizio 3: Numeri di Catalan
I numeri di Catalan sono una sequenza di interi utilizzati diverse aree della fisica, l'esercizio richiede di realizzare una funzione
int catalan_n (int n)
che dato n
calcola (e restituisce) l'n-esimo numero delle sequenza in base alla definizione induttiva fornita qua.
Esercizio 4: Calcolo dell'integrale (versione con funzioni)
Realizzare una soluzione dell'esercizio sul calcolo dell'approssimazione dell'integrale in http://didawiki.di.unipi.it/doku.php/fisica/informatica/201516/primoanno/esercitazione3bis utilizzando le funzioni per organizzare il codice e fattorizzare parti replicate. In particolare si suggerisce di definire una funzione per il calcolo dell'area ed una funzione per la visualizzazione su standard output.
Esercizio 5: La torre di Hanoi
Implementare una funzione ricorsiva hanoi(n,A,C,B)
che stampa sullo standard output tutti gli spostamenti necessari per risolvere la Torre di Hanoi con n
dischi come visto a lezione. Sviluppare un main che chiede all'utente di inserire n
da standard input e stampa le mosse necessarie sullo standard output.
Esercizio 6: Verifica somme
Scrivere una funzione che ha un solo parametro intero n
. La funzione legge una sequenza di interi positivi (terminata da 0) da standard input $a_1 \ldots a_k$ di lunghezza $k$ dispari non nota a priori.
La funzione restituisce un intero (0 come FALSE e 1 come TRUE) dopo aver verificato la seguente proprietà
- al centro e solo al centro è presente il valore
n
, - la somma di tutte le coppie simmetriche sia pari a $n$, cioè $a_i + a_{k−(i−1)} = n $.
Ad esempio, se n
e’ 10
e la sequenza e’
2 6 5 10 5 4 8
la funzione deve restituire 1.
Esercizio 7: (avanzato) Operazioni bit a bit
Scrivere un programma C costituito da una funzione main e da tre funzioni ausiliarie
/** stampa la rappresentazione binaria di a */ void bit_stampa (int a); /** effettua la somma (un bit alla volta) di x ed y */ int bit_somma (int x, int y); /** complementa il valore di x invertendo il valore di tutti i bit */ int bit_compl (int x);
Nella implementazione delle tre funzioni:
- si considerano solo i primi 16 bit della rappresentazione interna di un intero,
- si utilizzano solo gli operatori bit a bit (&,|,^,~).
La funzione ''main()“ lavora su due variabili intere, a1 e b1, ed interagisce con l'utente per leggere nuovi valori per a1 e b1. Dopodichè, utilizza le funzioni ausiliarie per calcolare a1+b1, -a1 e per stampare il risultato.