Corso di Fondamenti di Informatica A
Esercitazione di laboratorio n. 4
In tutti gli esercizi che seguono, si richiede di dichiarare tutte le funzioni
all'inizio del programma.
Esercizio: Massimo
-
Codificare in C la funzione max(int x, int y) che restituisce
il massimo valore tra due interi.
-
Codificare in C la funzione max3(int x, int y, int z) che restituisce
il massimo valore fra tre interi, sfruttando la funzione max definita
precedentemente.
Soluzione
Esercizio: Calcolo della somma dei primi N numeri pari
-
Scrivere un programma C che, dato un numero N, calcola la somma
dei primi N numeri pari in maniera ricorsiva.
-
Visualizzare passo passo l'esecuzione del programma osservando come variano
i valori delle variabili ed lo stack di chiamate a funzione (in Rhide,
menu Debug -> Call Stack).
-
La funzione scritta è tail ricorsiva? Perche'? Se non lo è,
è possibile riscriverla in maniera tail-ricorsiva? Se si`, si riscriva
la funzione in versione tail-ricorsiva.
Soluzione
Esercizio: Potenza di un numero
-
Scrivere una funzione C che calcola, dati due numeri interi M ed
N,
la potenza MN. Si cerchi, in particolare, di minimizzare
il numero dei prodotti che vengono effettuati, sfruttando opportunamente
la seguente osservazione:
-
Se N è dispari, allora MN=(MN-1)*M
-
Se N è pari, allora MN=(MN/2)2
-
La funzione scritta è ricorsiva? È tail-ricorsiva? È
possibile scriverla in maniera tail-ricorsiva? È possibile scriverla
in maniera non ricorsiva?
-
Facoltativo: stimare approssimativamente quanti prodotti vengono
effettuati in funzione di N.
Soluzione