Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoTacito Parodi Modificato 11 anni fa
1
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 15 Marzo 2013
2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Funzioni Scope delle variabili 2
3
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice! Problema Si scriva un programma in C che, dati due numeri, permette allutente di calcolarne la somma, sottrazione, moltiplicazione, e la divisione tra essi Lutente, per ogni coppia di numeri inseriti, potrà eseguire una e una sola operazione La calcolatrice potrà essere utilizzata più volte e… ammettere loperazione di sommatoria per un numero variabile, deciso dallutente, di valori 3
4
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Prima osservazione: i dati! Definizione dei dati su cui devo lavorare Quanti dati mi servono? Di che tipo devono essere? Come gestisco loperazione? 4
5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ragioniamo sul fIusso Inserire i dati (numeri e operazione) Verificare che linserimento dei dati si corretto Sulla base delloperazione selezionata, eseguire la funzione richiesta Mostrare il risultato 5 Questo NON e un algoritmo!!!! -Non e non ambiguo -I passi non sono atomici
6
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Primo compito per casa Scrivere lalgoritmo che risolve il problema in esame! 6
7
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Una prima soluzione 7 Problema con i char
8
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Una 1ma sol corretta ;) 8 E qui cosa succede?
9
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE IF annidati 9
10
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEOsservazioni Quando abbiamo ragionato sul flusso, abbiamo detto: Sulla base delloperazione selezionata, eseguire la funzione richiesta Quali sono le funzioni che potremmo definire? somma, sottrazione, divisione e moltiplicazione In C, queste vengo chiamate anche sottoprogrammi 10
11
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONESottoprogrammi Un sottoprogramma è: un insieme di istruzioni dotato di nome descritto (definito) una sola volta attivabile (richiamabile o invocabile) allinterno del programma o di un altro sottoprogramma Alcuni sottoprogrammi sono già definiti 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 come sono fatte, basta sapere solo cosa fanno (visione black box) 11
12
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi: motivazioni Astrazione e leggibilità: enucleano parti di codice, nascondendo dettagli algoritmici e di codifica il nome di programma si presenta come unoperazione elementare Strutturazione e scomposizione funzionale del programma: consentono una stesura del programma che riflette unanalisi funzionale del problema Collaudo: verifica di correttezza della soluzione facilitata dal poter verificare la correttezza prima dei singoli sottoprogrammi e poi dellintero programma visto come insieme di chiamate che si scambiano informazioni 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 12
13
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e procedure I sottoprogrammi si differenziano per la logica di definizione per luso e per la modalità di chiamata e possono essere di tipo funzionale di tipo procedurale Sottoprogrammi di tipo funzionale (funzioni) possono essere considerati una astrazione di valore linvocazione della funzione associa al nome della funzione il valore del risultato calcolato dal sottoprogramma Sottoprogrammi di tipo procedurale (procedure) possono essere considerati una astrazione di operazioni linvocazione della procedura è associata allesecuzione delle istruzioni del sottoprogramma che realizzano loperazione specificata dal sottoprogramma Ad esempio: leggi(A,B);/* procedura*/ risultato = somma(A,B); /* funzione*/ 13
14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e procedure in C In C esistono solo le funzioni Le procedure sono particolari funzioni che non restituiscono nulla (VOID) Quindi parleremo solo di funzioni intendendo sia le funzioni che le procedure Definire una funzione secondo il linguaggio C implica: dichiarazione del prototipo della funzione (nella sezione dichiarativa) definizione della funzione invocazione o chiamata della funzione (nel codice che necessita della funzioni) 14
15
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Dichiarazione del prototipo Il prototipo definisce: il nome della funzione il tipo (funzione, procedura) il tipo dei parametri in ingresso e in uscita Chi utilizzerà la funzione dovrà rispettare la sintassi definita nel prototipo Prototipo funzione ( ); Prototipo procedura (void è una parola chiave del C che indica assenza di tipo) void ( ); 15
16
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Definizione del sottoprogramma La definizione del sottoprogramma va messa dopo il main. Ha la stessa struttura del main (anche il main, come sappiamo è una funzione): Una parte dichiarativa Una parte esecutiva (tipo par_for1, tipo par_for2...) { parte dichiarativa locale parte esecutiva } (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 modo ordinato ai tipi elencati nella dichiarazione del prototipo 16
17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Definizione della funzione fattoriale e i parametri formali Parametri Formali: Rappresentano un riferimento simbolico (identificatori) a oggetti utilizzati allinterno della funzione Sono utilizzati dalla funzione come se fossero variabili dichiarate localmente Il valore iniziale di parametri formali viene definito allatto della chiamata della funzione tramite i parametri attuali (passaggio di parametri) 17 Le funzioni in C sono funzioni in senso matematico, il tipo del valore di ritorno definisce il Codominio mentre i valori possibili dei parametri in ingresso corrispondono al Dominio
18
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Istruzione return Parola chiave C utilizzata solo nelle funzioni Sintassi return È lultima istruzione di una funzione e indica: il punto in cui il controllo torna al chiamante il valore restituito In una funzione deve esserci almeno unistruzione di return possono esserci più istruzioni di return ma in alternativa la funzione può restituire un solo valore 18
19
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEChimante/Chiamato Allatto della chiamata, il controllo dellesecuzione passa dal chiamante al chiamato Il codice del chiamato viene eseguito Al termine dellesecuzione il controllo ritorna al chiamante, allistruzione successiva a quella della chiamata 19 Istruzione 1 Istruzione 2 Chiama funzione Istruzione 3 codice chiamante Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 4 return funzione chiamata Inizio programma Passaggio del controllo Ritorno del controllo
20
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Invocazione o chiamata Nel corpo del main o di unaltra 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 = ; Invocazione di procedura come unistruzione nomeprocedura(par_att1, …); In entrambi i casi: 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 nellambiente chiamante, i cui valori allatto della chiamata vengono copiati nei parametri formali 20
21
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Passaggio dei parametri Il passaggio dei parametri consiste nellassociare, allatto 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 listruzione 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 21
22
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Passaggio per VALORE Allatto 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 Il sottoprogramma in esecuzione lavora nel suo ambiente e quindi sui parametri formali I parametri attuali non vengono modificati 22
23
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice con le funzioni - prototipi 23 I prototipi Le chiamate
24
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice con le funzioni – le funzioni 24
25
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio: passaggio per valore } /* nel main */ float valore1, valore2; float risultato; risultato=somma(valore1,valore2); 25 Ambiente della funzione somma d1, d2 risultato Ambiente della funzione main valore1, valore2 risultato Quando invoco la funzione in d1 e d2 vengono copiati i valori di valore1 e valore 2 Quando la funzione termina il valore di risultato in smma viene copiato in risultato nel main
26
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Scope delle variabili 26
27
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEVisibilità Visibilità di un identificatore: indicazione della parte del programma in cui tale identificatore può essere usato Ambiente globale del programma insieme di identificatori (tipi, costanti, variabili) definiti nella parte dichiarativa globale regole di visibilità: visibili a tutte le funzioni del programma Ambiente locale di una funzione insieme di identificatori definiti nella parte dichiarativa locale e degli identificatori definiti nella testata (parametri formali) Regole di visibilità: visibili alla funzione e ai blocchi in essa contenuti Ambiente di blocco insieme di identificatori definiti nella parte dichiarativa locale del blocco regole di visibilità: visibili al blocco e ai blocchi in esso contenuti 27
28
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La visibilità di y si estende dal punto di dichiarazione fino alla fine del blocco di appartenenza y e z locali alla funzione g, con visibilità nel blocco racchiuso da parentesi graffe k e l hanno la stessa visibilità Errata! Si tenta di definire due volte la variabile locale x nello stesso bloccoEsempi int x; f() { int y; y=1; } int x; g(int y, char z) { int k; int l; … } f(int x) { int x; } 28
29
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Mascheramento (shadowing) Un nome ridefinito allinterno di un blocco nasconde il significato precedente di quel nome Tale significato è ripristinato alluscita del blocco più interno In caso di omonimia di identificatori in ambienti diversi è visibile quello dellambiente più vicino 29
30
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEVisibilità Livello globale main f1 g1,g2,g3 a,b a,c a,d d blocco1 blocco2 blocco3 char g1, g2, g3; main() { int a, b; … {/*blcco1*/ double a,c; } … } void f1(){ … {/*blocco2*/ char a,d; } … {/*blocco3*/ float d … } 30
31
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Torniamo alla calcolatrice 31 Verifichiamo gli ingressi?
32
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Non possiamo fare di meglio? 32 Pausa per 10
33
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Selezione multipla Operazione e uguale in tutti i casi Non posso evitare di ripetere operazione == 33
34
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lo switch 34 switch ( expression ){ case value1 : statement-list1 case value2 : statement-list2 case value3 : statement-list3 case... } Lo switch ci permette una alternativa al come selezionare la prossima istruzione da eseguire Lo switch valuta una espressione, quindi cerca di confrontare un valore con diversi possibili cases
35
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lo switch Ciascun case contiene un valore (value) e una lista di istruzioni (statement) Il flusso di controllo si traferisce attraverso tutte le istruzioni, partendo dal primo case che corrisponde 35 switch ( expression ){ case value1 : statement-list1 case value2 : statement-list2 case value3 : statement-list3 case... }
36
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice con lo switch 36
37
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Piccolo problema… 37
38
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Perche??? 38 Flusso
39
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lo switch ed il break 39
40
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEZoom 40 Flusso
41
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lo switch: default 41
42
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio Credits Gianluca Palermo
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.