Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione
Spesso quando si realizza un programma ci si rende
conto che alcune sequenze di istruzioni o operazioni
vengono eseguite più volte.
Possono essere ripetute istruzioni identiche o con
qualche piccola variazione come per esempio nei valori
costanti che vengono utilizzati al loro interno.
La ridondanza di queste sequenze di codice
appesantisce e rende poco leggibile il nostro
programma, inoltre favorisce il propagarsi degli errori
e la loro difficile correzione.
Caso 1
Dato il seguente listato :
Possiamo individuare i blocchi che si ripetono:
Immaginiamo di realizzare una black box delle
istruzioni contenute all’interno delle aree evidenziate
individuando lo scopo del pezzo di codice, eventuali
parametri su cui lavora e il risultato in uscita.
Per iniziare diamo un nome alla black box che
permetta di ricordare il suo contenuto. Questo pezzo
di codice legge un numero compreso fra 0 e 10 e quindi
potremmo chiamarla “acquisici”.
La scatola non ha bisogno di ricevere nessun valore su
cui lavorare mentre produce un uscita un risultato che
è un numero intero.
Posso rappresentare la black box così:
int
acquisisci
Idealmente è come se la black box contenesse il codice
che prima abbiamo messo nel rettangolo rosso:
int
Il nostro codice sostituendo la parte di codice con la
chiamata alla black box diventerebbe:
In questo caso
gli estremi
cambiano in
ogni porzione
di codice anche
se le istruzioni
rimangono
uguali.
Usando delle variabili correttamente valorizzate invece
delle costanti il codice diventa così:
Dove ritroviamo gli
stessi blocchi.
L’unica differenza è
il valore che
assumono le
variabili min e max.
Possiamo pensare che la black box che contiene questo
codice riceva in ingresso i valori da dare a min e max
che possono così cambiare all’occorrenza:
int
int
int acquisisci2
Il nostro codice diventa quindi così:
int
int
int acquisisci2
Analizzando la seconda parte ci accorgiamo che il
codice non fa altro che calcolare la potenza di un
numero dati base ed esponente:
int
int
int potenza
Il codice si trasforma così:
Funzioni
In C queste black box sono le funzioni, cioè porzioni di
codice che lavorando su dati di ingresso producono un
risultato in uscita. Le funzioni possono essere
richiamate più volte nel nostro programma ogni volta
con valori diversi in ingresso.
I valori in ingresso ad una funzione si chiamano
parametri.
Generalmente la funzione ha un tipo che indica il tipo
di valore che la funzione restituisce dopo
l’elaborazione dei dati.
Il tipo di una funzione può essere un qualsiasi tipo del
C, sia predefinito che creato da noi. Una funzione che
non ha nessun tipo è dichiarata void e quindi non
produrrà un valore di uscita (almeno non nel modo
classico)
Prototipo
Prima di poter essere usata una funzione deve essere
dichiarata.
La dichiarazione della funzione si fa sopra il main e si
chiama prototipo.
Il prototipo descrive il tipo della funzione, il suo nome
e il tipo e numeri dei parametri in ingresso alla
funzione.
In sostanza è la trascrizione della black box
Prototipo
int
int
int acquisisci2
int acquisisci2(int,int);
int
int
int potenza
int potenza(int,int);
Definizione
La definizione della funzione si fa dopo il main e
prevede la scrittura vera e propria del codice della
funzione.
E’ costituita dall’intestazione che non è altro che il
prototipo della funzione in cui però esplicitiamo i
nomi dei parametri in ingresso (oltre al tipo che è già
presente nel prototipo) e da una corpo della funzione
che contiene tutto il codice della funzione, comprese le
dichiarazioni di eventuali variabili utili alla funzione.
Definizione
L’ultima istruzione che deve essere eseguita è
l’istruzione di return con cui la funzione restituisce il
valore che ha elaborato.
Se una funzione è di tipo void il return non è
necessario.
Esempi
int
acquisisci
Prototipo
Corpo della
funzione
int
int
int acquisisci2
int
int
int potenza
Continua …