Strumenti Utente

Strumenti Sito


fisica:informatica:201516:primoanno:esercitazione5

Esercitazione funzioni

Esercizio 1: Funzione MCD

Sviluppare una funzione di prototipo

int mcd(int n, int m);

che calcola il Massimo comun divisore fra n ed m secondo il metodo di euclide (vedi http://didawiki.di.unipi.it/doku.php/fisica/informatica/201516/primoanno/esercitazione2bis)

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

  1. i considerano solo i primi 16 bit della rappresentazione interna di un intero,
  2. 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.

Esercizio 3: 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 rempo di attesa 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 4: 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 5: 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 6: 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 7: 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. Svuluppare un main che chiede all'utente di inserire n da standard input e stampa le mosse necessarie sullo standard output.

fisica/informatica/201516/primoanno/esercitazione5.txt · Ultima modifica: 14/04/2016 alle 13:41 (3 anni fa) da Susanna Pelagatti