Fondamenti di Informatica Capitolo 3 Funzioni Federico Ceriani federico.ceriani@nulltech.it ITS Meccatronico di Legnago A.S. 2016-2017
Contenuti Concetto di funzione Sintassi Tipo di ritorno Argomenti Passaggio di variabili Passaggio per valore Passaggio per riferimento Variabili locali Esercizi
Concetto di funzione Quando si deve svolgere un operazione complessa, spesso ci sono dei sotto-problemi che si ripetono. Questi possono essere raggruppati in un blocco a sé stante che può essere richiamato quando necessario. Questa unità isolata di istruzioni viene chiamata funzione (o anche routine o procedura).
Sintassi Sintassi generica 1 <tipo di ritorno > <nome > ( argomenti formali ) { 2 <corpo della funzione > 3 } Un esempio 1 void foo () { 2 cout << " Hello World!" << endl ; 3 }
Tipi di ritorno? Come nelle funzioni matematiche, le funzioni in C++ possono dare un risultato. Il tipo di ritorno dunque è il tipo di dato del risultato della funzione.
void? Al contrario delle funzioni matematiche usuali, le funzioni in C++ possono non dare affatto un risultato. In questo caso si usa void come tipo di ritorno. Inoltre, le funzioni in C++ possono avere degli effetti collaterali. Funzioni che non danno risultato e non hanno argomenti vengono chiamati anche procedure.
Argomenti? Come nelle funzioni matematiche, le funzioni in C++ possono lavorare su dei valori di input. f (x) = x 2 1 float f( float x) { 2 return x* x; 3 } Dopo aver definito una funzione, la si può richiamare nel seguente modo: f (4) 1 f (4) ; Si possono avere più argomenti per una funzione: 1 int moltiplica ( int x, int y){ 2 return x* y; 3 }
Passaggio di variabili Passaggio per valore In C++ il passaggio di variabili avviene generalmente per valore: il valore del parametro attuale viene copiato nel parametro formale e reso disponibile al corpo della funzione. Esempio di passaggio per valore 1 int incrementa ( int n){ 2 return ++n; 3 } 4 5 int main () { 6 int x = 5; 7 cout << incrementa ( x) << endl ; 8 cout << x << endl ; 9 return 0; 10 } Questo esempio stampa prima 6, poi 5. La variabile x non viene modificata dalla funzione incrementa.
Passaggio di variabili Passaggio per riferimento A volte si può voler modificare le variabili passate alle funzioni. Questo si può fare utilizzando il passaggio per riferimento: Esempio di passaggio per riferimento 1 int incrementa ( int & n){ // notare la & 2 return ++n; 3 } 4 5 int main () { 6 int x = 5; 7 cout << raddoppia ( x) << endl ; 8 cout << x << endl ; 9 return 0; 10 } Questo esempio stampa due volte 6: la variabile x viene modificata dalla funzione incrementa.
Variabili locali Possiamo dichiarare variabili all interno di funzioni. Tuttavia, esse non saranno visibili al di fuori del blocco di codice in cui sono state create. Esempio di variabile locale 1 int dichiarax ( int n) { 2 int x = n; 3 } 4 5 int main (){ 6 dichiarax (5) ; 7 cout << x; // ERRORE! 8 return 0; 9 } In questo esempio, x è una variabile locale alla funzione dichiarax.
Esericzi abitanti.cpp Chiedere all utente di inserire: Numero abitanti di una città; Percentuale di crescita annua per due città diverse. Stampare poi tra quanti anni la città con la minor popolazione iniziale avrà sorpassato l altra.
Esericzi divisori.cpp Scrivere un programma che chiede all utente di inserire un numero e poi stampa sul terminale se si tratta di un numero primo e la lista dei suoi divisori.
Esericzi ordina3.cpp Scrivere un programma che chiede all utente di inserire 3 numeri e poi li ristampa in ordine crescente.
Esericzi bancomat.cpp Scrivere un programma che modelli l interazione con un bancomat: l utente deve poter effettuare versamenti, prelievi (attenzione: il conto non deve andare in rosso!) ed estratti conto. Inoltre, il conto deve maturare interessi (per semplicità, dovranno essere accreditati dopo ogni operazione). Il programma deve controllare che ogni input fornito dall utente sia lecito, in caso contrario deve stampare un messaggio di errore e richiedere l inserimento.
Esericzi distributore.cpp Scrivere un programma che modelli l interazione con un distributore automatico con a disposizione 4 prodotti di prezzo diverso. Il programma deve stampare la lista dei prodotti disponibili e il loro prezzo. L utente potrà scegliere di inserire monete da 10, 20, 50 cent o 1 o 2 euro, a volontà fino a che non inserirà 0. Successivamente dovrà scegliere un prodotto e il programma dovrà stampare un messaggio di avvenuta erogazione e il resto dovuto. Attenzione: il resto dovrà essere fornito in monete! Dunque a fronte di un resto ad esempio di 80 centesimi il programma dovrà stampare: 1 moneta da 50 centesimi, 1 moneta da 20 centesimi, 1 moneta da 10 centesimi.