La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Informatica 7 Sottoprogrammi: funzioni e procedure.

Presentazioni simili


Presentazione sul tema: "Informatica 7 Sottoprogrammi: funzioni e procedure."— Transcript della presentazione:

1 Informatica 7 Sottoprogrammi: funzioni e procedure

2 Definizione di sottoprogramma Sappiamo che un programma è un algoritmo scritto in un linguaggio comprensibile al calcolatore Un algoritmo è una sequenza finita e deterministica di istruzioni per risolvere un problema Un problema può essere talvolta scomposto in parti, chiamate sottoproblemi, che possono essere risolte in maniera indipendente per ottenere una soluzione al problema di partenza Se un programma è suddiviso in diverse parti, ognuna delle quali risolve un sottoproblema, allora ciascuna parte è chiamata sottoprogramma se esplicitamente separata dalle altre

3 Esempio: calcolo della media Problema: chiedere allutente 3 interi, calcolarne la media aritmetica, e stamparla su schermo Il problema può essere scomposto nei seguenti sottoproblemi: – richiesta numeri – calcolo media – stampa del risultato

4 Funzioni e procedure Un sottoprogramma è un algoritmo per la soluzione di un sottoproblema scritto in un linguaggio di programmazione Sottoprogrammi che restituiscono un risultato parziale tramite listruzione return prendono il nome di funzioni Sottoprogrammi che prevedono solo lesecuzione di un blocco di istruzioni senza lesplicita restituzione di un risultato si chiamano procedure

5 Funzioni e procedure per il calcolo della media Modelliamo come funzione il sottoprogramma per: – calcolo media Risolviamo il seguente sottoproblema per mezzo di una procedura: – stampa del risultato La scrittura di questi sottoprogrammi in riferimento allo stesso programma principale (main) riflette il fatto che essi sono parte della soluzione a un unico problema

6 Funzione: esempio float media (int a, int b, int c){ int somma = a + b + c; float risultato = somma/3; return risultato; } tipo del risultato restituito nome della funzione lista dei tipi e dei nomi dei parametri formali inizio del blocco di istruzioni della funzione fine del blocco di istruzioni della funzione istruzione return con cui si conclude lesecuzione della funzione e si restituisce il risultato

7 Procedura: esempio void stampa(int m){ cout << La media è: << m << \n; } non cè alcun risultato restituito dal sottoprogramma, quindi il tipo del risultato è void (vuoto) non cè alcun risultato da restituire, e infatti il blocco di istruzioni non include una istruzione return

8 Uso della funzione e della procedura nel programma finale … float media (int a, int b, int c){ int somma = a + b + c; float risultato = somma/3; return risultato; } void stampa(int m){ cout << La media è: << m << \n; } int main(){ int x,y,z; float r; cout << inserisci 3 numeri:\n; cin >> x >> y >> z; r = media(x,y,z); stampa(r); … } il risultato restituito dalla funzione va salvato in una variabile lesecuzione di una procedura, invece, non prevede alcun risultato se non leffetto delle istruzioni che la compongono

9 Passaggio dei parametri Nellesempio precedente, a, b, e c sono i parametri formali della funzione media, a cui, al momento della chiamata della funzione nel main, vengono associati i valori dei parametri attuali x, y, e z Tale corrispondenza è posizionale: ad a viene associato il valore di x perché sono entrambi i primi della lista, e così via

10 Passaggio di parametri per valore Il passaggio del valore di x ad a consiste, di fatto, nella creazione di una variabile temporanea con lo stesso valore di x che viene usata nelle istruzioni della funzione al posto di a Per tutta lesecuzione della funzione, la variabile x, quindi, non viene minimamente modificata: al termine della funzione sarà rimasta come prima

11 Possibile problema A volte, il fatto che un parametro attuale non subisca modifiche da parte della funzione può non essere ciò che desideriamo Ad es: void azzera (int n){ n = 0; } int main(){ … azzera(x); /* x rimane uguale e non viene azzerato*/ …

12 Passaggio di parametri per indirizzo Si ha questo tipo di passaggio quando alla funzione non è fornita una copia del valore del parametro attuale (come nel passaggio per valore) bensì lindirizzo della cella di memoria contenente il parametro attuale In questo modo, la funzione non esegue le sue istruzioni su una copia, ma direttamente sul parametro attuale, cosicché ogni modifica del suo valore ha effetto

13 Esempio void azzera (int& n){ n = 0; } int main(){ … azzera(x); cout << x; … il simbolo & indica che il passaggio del parametro è per indirizzo questa volta la variabile x è veramente azzerata e su schermo compare 0

14 Passaggio di parametri strutturati Attenzione: nel linguaggio C++, se un parametro è un dato strutturato, viene sempre passato per indirizzo, per risparmiare la memoria che verrebbe occupata da una copia del parametro attuale Data questa regola, nella scrittura della lista dei parametri formali di un sottoprogramma si omette il simbolo &

15 Array come parametri In particolare, quando un array viene passato come parametro, linformazione che il sottoprogramma riceve è solo lindirizzo della prima cella dellarray Sarà cura del programmatore aggiungere un altro parametro che indichi la dimensione dellarray in modo che il sottoprogramma possa eseguire le istruzioni sullarray in maniera corretta

16 Esempio int somma_valori (int v[], int dim){ int i; int somma = 0; for (i = 0; i < dim; i++) somma = somma + v[i]; return somma; } int main(){ int vettore[10]; int s; … s = somma_valori(vettore, 10); cout << la somma dei valori dellarray e: << s << \n; … } viene segnalato che il parametro è un array, ma la sua dimensione è un parametro separato nel parametro attuale, solo il nome dellarray viene specificato


Scaricare ppt "Informatica 7 Sottoprogrammi: funzioni e procedure."

Presentazioni simili


Annunci Google