FONDAMENTI DI INFORMATICA
Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI
Facoltà di Ingegneria
Università degli Studi di Udine
Linguaggio C
Le funzioni
Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e Ing. Davide Pierattoni, Università degli Studi di Udine.
Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.
Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.
L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione).
In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.
In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.
Nota di Copyright
Le funzioni dal punto di vista della programmazione top-down
-Permettono di rendere trasparente al resto del programma i dettagli implementativi che non è necessario condividere ê MODULARITA’
-Se ben strutturate, permettono di riutilizzare del codice già scritto per altri programmi ê RIUTILIZZABILITA’ e COLLAUDABILITA’
-Lo standard ANSI ha introdotto importanti modifiche nella
sintassi per la dichiarazione delle funzioni, aspetto che
consente un maggior controllo degli errori ê CHIAREZZA e
LEGGIBILITA’ del codice
Esempio
• Coefficiente binomiale:
• Il fattoriale va calcolato tre volte: con le funzioni è possibile scrivere il codice
un’unica volta
)!
(
!
!
k n
k
n k
n
= −
main
int main() {
int n, k;
printf ("n = "); scanf ("%d", &n);
printf ("k = "); scanf ("%d", &k);
if ((n < k) || (k < 0))
printf ("dati non validi\n");
else
printf ("n su k = %lf\n",
coefficiente_binomiale (n, k));
return EXIT_SUCCESS;
}
chiamata della funzione
coefficiente_binomiale
coefficiente_binomiale
double coefficiente_binomiale (int n, int k) {
return fattoriale (n) /
(double) (fattoriale (k) * fattoriale (n-k));
}
lista di argomenti tipo di
ritorno
istruzione
di ritorno
fattoriale
int fattoriale (int n) {
int fatt = 1;
while (n > 1) fatt *= n--;
return fatt;
}
lista di argomenti tipo di
ritorno
istruzione di ritorno
variabili
locali
Il programma completo
#include <stdio.h>
#include <stdlib.h>
double coefficiente_binomiale (int n, int k);
int fattoriale (int n);
main() {
...
}
double coefficiente_binomiale (int n, int k) {
...
}
int fattoriale (int n) {
...
}
Definizione delle funzioni
• Ogni definizione di funzione ha la forma:
tipo_ritornato nome_funzione(dichiarazione_argomenti) {
dichiarazioni ed istruzioni }
• Alcune parti possono essere omesse
• Forma minima:
dummy () {}
Ritorno di valori
• Se il tipo ritornato è omesso, viene assunto int
• L'istruzione per ritornare il valore in uscita al chiamante è return:
return espressione;
• Se necessario, l'espressione viene convertita nel tipo di ritorno della funzione
• L'espressione può essere omessa, e in tal
caso il tipo della funzione (che non ritorna
alcun valore) dovrebbe essere void
Chiamata a una funzione
• Se la funzione ritorna un valore:
variabile = funz_1(argomenti);
In tale caso è anche possibile invocarla come argomento all’interno di un’altra funzione:
... funz_2(..., funz_1(argomenti), ...);
• Altrimenti:
nome (argomenti);
Chiamata a una funzione
• Ogni funzione definita dall’utente deve essere nota al compilatore
• Per poter utilizzare una funzione, sono necessari:
– la dichiarazione del prototipo
– il codice sorgente della funzione
#include <stdio.h>
int somma (int, int );
int main() {
… }
int somma (int a, int b) {
return (a + b);
}