La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi.

Presentazioni simili


Presentazione sul tema: "Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi."— Transcript della presentazione:

1 Le funzioni in C++

2 Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi ad esempio a un programma di algebra  È plausibile pensare che ci sia la necessità di stampare a video le soluzioni di un’equazione di 2° grado  Il codice relativo è sempre lo stesso  È quindi utile definire una sola volta questo gruppo di istruzioni e dare un nome ad esso  Ogni volta che si vuole mostrare a video le soluzione di un’equazione di 2° grado sarà sufficiente indicare il nome assegnato

3 Le funzioni  Una funzione è:  un insieme di istruzioni dotato di nome  descritta (definita) una sola volta  attivabile (richiamabile o invocabile) all’interno del programma o di un’altra funzione  Alcune funzioni sono già definite  si pensi alla scanf e alla printf  dietro a questi nomi vi sono una serie di istruzioni in grado di, rispettivamente, intercettare la pressione dei tasti e di visualizzare un carattere sullo schermo  chi richiama queste funzioni non si preoccupa di com e sono fatte, basta sapere solo cosa fanno (visione black box)

4 Funzioni: utilizzo(1)  Astrazione e leggibilità:  enucleano parti di codice, nascondendo dettagli algoritmici e di codifica  il nome di programma si presenta come “un’operazione elementare”  Strutturazione e scomposizione funzionale del programma:  consentono una stesura del programma che riflette un’analisi funzionale del problema  Collaudo:  verifica di correttezza della soluzione facilitata dal poter verificare la correttezza prima dei singoli sottoprogrammi e poi dell’intero progra mma visto come insieme di chiamate che si scambiano informazioni

5 Funzioni: utilizzo(2)  Compattezza ed efficienza del codice:  si evita di ripetere sequenze di istruzioni in più parti del programma  Modificabilità:  una sola modifica vale per tutte le attivazioni del sottoprogramma  Riuso:  sottoprogrammi non troppo specifici possono essere raccolti in librerie utilizzabili da programmi diversi

6 Calcolare la somma dei fattoriali dei primi 100 numeri naturali: 0!+1!+2! … + 99!+100! #include Using namespace std; int fattoriale(int); main(){ int numero; // numero di cui voglio calcolare il fattoriale int fatt; // memorizzo il fattoriale di numero int somma; somma = 0; for(numero=0; numero<=100; numero++) { fatt = fattoriale(numero); somma = somma + fatt; } Cout<<«la somma dei fattoriali è »<<somma; }

7 Dichiarazione del prototipo  Il prototipo definisce:  il nome della funzione  il tipo dei parametri in ingresso e in uscita  Chi utilizzerà la funzione dovrà rispettare la sintassi definita nel prototipo  Prototipo funzione tipo_restituito nome_funzione (elenco dei parametri);  Funzione che non ritorna valori (void è una parola chiave del C che indica assenza di tipo) void nome_funzione (lista tipi dei parametri);

8 Definizione della funzione  La definizione di una funzione va messa dopo il main. Ha la stessa struttura del main (in realtà anche il main è una funzione):  Una parte dichiarativa  Una parte esecutiva tipo nome (tipo par_for1, tipo par_for2...) { parte dichiarativa locale parte esecutiva }  tipo nome (tipo par_for1, tipo par_for2...) è la testata della funzione  par_for1, par_for2 sono i nomi dei parametri formali della funzione, il cui tipo deve corrispondere in m

9 Definizione della funzione(2) int fattoriale(int n){ int risultato=1; int i; for (i = 1; i <= n; i++) risultato = risultato * i; return risultato; }  Parametri Formali:  Rappresentano un riferimento simbolico (identificatori) a oggetti utilizzati all’interno della funzione  Sono utilizzati dalla funzione come se fossero variabili dichiarate localmente  Il valore iniziale di parametri formali viene definito all’atto della chiamata della funzione tramite i parametri attuali (passaggio di parametri)

10 Invocazione o chiamata  Nel corpo del main o di un’altra funzione indica il punto in cui va eseguita la parte del codice presente nella definizione di funzione  Invocazione di funzione  come operando in una espressione  = ;  par_att1,… sono i parametri attuali che devono corrispondere per ordine e per tipo ai parametri formali  I parametri attuali possono essere variabili, costanti o espressioni definite nell’ambiente chiamante, i cui valori all’atto della chiamata vengono copiati nei parametri formali

11 Istruzione return  È l’ultima istruzione di una funzione e indica:  il punto in cui il controllo torna al chiamante  il valore restituito  In una funzione  deve esserci almeno un’istruzione di return  possono esserci più istruzioni di return ma in alternativa  la funzione può restituire un solo valore

12 Chiamata di una funzione  All’atto della chiamata, il controllo dell’esecuzione passa dal chiamante al chiamato  Il codice del chiamato viene eseguito  Al termine dell’esecuzione il controllo ritorna al chiamante, all’istruzione successiva a quella della Istruzione 1 Istruzione 2 Chiama funzione Istruzione 3 codice chiamante Inizio programma Passaggio del controllo Ritorno del controllo Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 4 return

13 Scambio di informazioni  Il chiamato deve poter ricevere dal chiamante i valori attuali sui quali eseguire le operazioni definite nella funzione  Il chiamato deve poter fornire al chiamante i risultati dell’elaborazione  Lo scambio di informazioni tra chiamante e chiamato può avvenire:  valore restituito da una funzione (dal chiamato al chiamante)  per fornire un valore al chiamante  passaggio dei parametri (dal chiamante al chiamato)  per fornire i valori in ingresso al chiamato  per fornire i risultati di operazioni al chiamante  variabili globali (in entrambe le direzioni)  fortemente sconsigliato

14 Passaggio dei parametri  Il passaggio dei parametri consiste nell’associare, all’atto delle chiamata di un sottoprogramma, ai parametri formali i parametri attuali  Se il prototipo di una funzione è float circonferenza (float raggio);  Invocare questa funzione significa eseguire l’istruzione c = circonferenza(5.0);  In questo modo la variabile raggio (il parametro formale) assumerà per quella particolare invocazione il valore 5 (il parametro attuale).  Lo scambio di informazioni con passaggio dei parametri tra chiamante e chiamato può avvenire in due modi:  Passaggio per valore  Passaggio per indirizzo

15 Passaggio per VALORE  All’atto della chiamata il valore del parametro attuale viene copiato nelle celle di memoria del corrispondente parametro formale.  Il parametro formale e il parametro attuale si riferiscono a due diverse celle di memoria  La funzione in esecuzione lavora nel suo ambiente e quindi sui parametri formali  I parametri attuali non vengono modificati

16 Esempio: passaggio per valore float circonferenza(float raggio) { float circ; circ = raggio * 3.14; raggio = 7; /*istruzione senza senso, voglio solo vedere cosa succede modificando il valore di un paramentro formale*/ return circ; } /* nel main */ float c,r=5; c=circonferenza(r); /*Attenzione! r vale sempre 5 */ Ambiente della funzione circonferenza raggio circ Ambiente della funzione main r c Quando invoca la funzione in raggio viene copiato il valore di r Quando la funzione termina il valore di circ in circonferenza viene copiato in c nel main

17 Passaggio per riferimento  All’atto della chiamata viene passato l’indirizzo del parametro attuale.  Il parametro formale e il parametro attuale si riferiscono alla stessa cella di memoria.  L’indirizzo viene passato mettendo & nella definizione dei parametri.  In questo caso qualunque cambiamento dei parametri formali all’interno della funzione determina un cambiamento dei parametri attuali  I parametri attuali possono venire modificati.

18 Esempio: passaggio per indirizzo  Ordinamento crescente di tre numeri #include using namespace std; //Ordina scambia i valori di x e y void ordina(int &x, int &y)) { int temp; if(x>y){ temp=x; x=y; y=temp; }

19 Esempio: passaggio per indirizzo(2) int main() { int a,b,c; cout<<"Trenumeri: "; cin>>a>>b>>c; ordina(a,b); ordina(a,c); ordina(b,c); cout<<"Numeri ordinati: "<<endl; system("PAUSE"); return EXIT_SUCCESS; } x y a b Ambiente della funzione main Ambiente della funzione ordina Indirizzo di a Indirizzo di b


Scaricare ppt "Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi."

Presentazioni simili


Annunci Google