La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.

Presentazioni simili


Presentazione sul tema: "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016."— Transcript della presentazione:

1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 4 Aprile 2016

2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti 2

3 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti Visto il numero degli studenti 3

4 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti Visto il numero degli studenti Vista la difficoltà a trovare orari/spazi 4

5 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti Visto il numero degli studenti Vista la difficoltà a trovare orari/spazi Viste le critiche mosse rispetto ai topic possibili per i progetti e alle modalità di valutazione 5

6 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti Ho deciso di ELIMINARE questa opportunità 6

7 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti Ho deciso di ELIMINARE questa opportunità 7

8 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ho ragionato sui progetti Visto il numero degli studenti Vista la difficoltà a trovare orari/spazi Viste le critiche mosse rispetto ai topic possibili per i progetti e alle modalità di valutazione 8

9 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Valutazione esame: Info 9 Orale !Scritto

10 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Valutazione esame: Info 10 Solo orale Vale per tutti, in ogni appello!

11 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 11 BAZINGA

12 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 12 1mo Aprile

13 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Torniamo al 27 Marzo… 13 http://th06.deviantart.net/fs70/PRE/i/2012/025/2/c/time_turner_1_by_jamieg09-d4ne7ba.jpg

14 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il fattoriale Dato n, intero positivo, si definisce n fattoriale e si indica con n! il prodotto dei primi n numeri interi positivi minori o uguali di quel numero. In formule Nota:  0! = 1  1! = 1  2! = 2, 3! = 6,… 14

15 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Il fattoriale: codice 15

16 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Dal fattoriale… 16

17 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Dal fattoriale… 17 … al coefficiente binomiale

18 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Coefficiente binomiale Il numero di scelte di k oggetti fra quelli che costituiscono un insieme di n elementi Quindi il numero dei sottoinsiemi di k elementi di un dato insieme di n oggetti, è dato dal cosiddetto coefficiente binomiale: 18

19 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tornando ad oggi… 19

20 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEObiettivi Funzioni Scope delle variabili 20

21 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Coefficiente binomiale Il numero di scelte di k oggetti fra quelli che costituiscono un insieme di n elementi Quindi il numero dei sottoinsiemi di k elementi di un dato insieme di n oggetti, è dato dal cosiddetto coefficiente binomiale: 21

22 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Coefficiente binomiale: flusso 1.Inserire K e N 2.Verifico K e N 3.Se corretti A.Calcolare il fattoriale di N (FatN) B.Calcolare il fattoriale di K (FatK) C.Calcolare il fattoriale di N-K (FatNK) D.CoefBin = FatN/(FatK)*FatNK 4.Altrimenti torno a 1 22

23 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma quindi… Cosa è Calcolare il fattoriale di N? 23

24 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma quindi… Cosa è Calcolare il fattoriale di N? Cosa è Calcolare il fattoriale di K? 24

25 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma quindi… Cosa è Calcolare il fattoriale di N? Cosa è Calcolare il fattoriale di K? Cosa è Calcolare il fattoriale di N-K? 25

26 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Ma quindi… Cosa è Calcolare il fattoriale di N? Cosa è Calcolare il fattoriale di K? Cosa è Calcolare il fattoriale di N-K? Sono tutti SOTTOPROGRAMMI!! 26

27 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONESottoprogrammi Un sottoprogramma è:  un insieme di istruzioni dotato di nome  descritto (definito) una sola volta  attivabile (richiamabile o invocabile) all’interno 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) 27

28 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 “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 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 28

29 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Sottoprogrammi: funzioni e procedure I sottoprogrammi si differenziano per la logica di definizione per l’uso 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  l’invocazione 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  l’invocazione della procedura è associata all’esecuzione delle istruzioni del sottoprogramma che realizzano l’operazione specificata dal sottoprogramma Ad esempio: leggi(A,B);/* procedura*/ risultato = somma(A,B); /* funzione*/ 29

30 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: 1.Dichiarazione del prototipo della funzione (nella sezione dichiarativa) 2.Definizione della funzione 3.Invocazione o chiamata della funzione (nel codice che necessita della funzioni) 30

31 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 1. 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 ( ); 31

32 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 2. Definizione della funzione La definizione della funzione 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 32

33 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 3. 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 = ; Invocazione di procedura  come un’istruzione 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 nell’ambiente chiamante, i cui valori all’atto della chiamata vengono copiati nei parametri formali 33

34 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEChimante/Chiamato 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 chiamata 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 34

35 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Istruzione return Parola chiave C utilizzata solo nelle funzioni Sintassi 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 35

36 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Tornando al coefficiente binomiale 1.Inserire K e N 2.Verifico K e N 3.Se corretti A.Calcolare il fattoriale di N (FatN) B.Calcolare il fattoriale di K (FatK) C.Calcolare il fattoriale di N-K (FatNK) D.CoefBin = FatN/(FatK)*FatNK 4.Altrimenti torno a 1 36

37 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Coefficiente binomiale: codice 37

38 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Coefficiente binomiale: codice 38

39 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Coefficiente binomiale: codice 39

40 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Comunicazione tra chiamante e chiamato 40

41 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 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 è int fat (int valore);  Invocare questa funzione significa eseguire l’istruzione FatK = fat(K);  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 41

42 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Parametri formali 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) 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 42

43 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 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 Il sottoprogramma in esecuzione lavora nel suo ambiente e quindi sui parametri formali I parametri attuali non vengono modificati 43

44 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Esempio: passaggio per valore } /* nel main */ int K; int FatK; FatK=fat(K); Ambiente della funzione fat valore fattoriale Ambiente della funzione main K FatK Quando la funzione fat termina, il valore di fattoriale viene copiato in FatK nel main Quando invoco la funzione fat, il valore in K nel main viene copiato in valore 44

45 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONEVisibilità 45

46 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Scope/visibilità delle variabili 46

47 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 47

48 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Mascheramento (shadowing) Un nome ridefinito all’interno di un blocco nasconde il significato precedente di quel nome Tale significato è ripristinato all’uscita del blocco più interno In caso di omonimia di identificatori in ambienti diversi è visibile quello dell’ambiente più “vicino” 48

49 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Mascheramento (shadowing) Un nome ridefinito all’interno di un blocco nasconde il significato precedente di quel nome Tale significato è ripristinato all’uscita del blocco più interno In caso di omonimia di identificatori in ambienti diversi è visibile quello dell’ambiente più “vicino” 49

50 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 … } 50

51 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; } 51

52 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice! 52

53 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice? 53 Umh….

54 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice! 54 Umh…. Meglio!

55 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE La calcolatrice! Problema  Si scriva un programma in C che, dati due numeri, permette all’utente di calcolarne la somma, sottrazione, moltiplicazione, e la divisione tra essi L’utente, per ogni coppia di numeri inseriti, potrà eseguire una e una sola operazione 55

56 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Fonti per lo studio + Credits Fonti per lo studio Credits  Gianluca Palermo


Scaricare ppt "DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016."

Presentazioni simili


Annunci Google