Funzioni e Procedure

52
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Funzioni e Procedure Marco D. Santambrogio – [email protected] Ver. aggiornata al 21 Marzo 2014

description

Funzioni e Procedure. Marco D. Santambrogio – [email protected] Ver. aggiornata al 21 Marzo 2014. Info di servizio 1. Vi siete dimostrati volenterosi, quindi teniamo la divisione proposta da voi Questa mattina è arrivato l ’ ultimo gruppo per lo scambio!. Info di servizio 1. - PowerPoint PPT Presentation

Transcript of Funzioni e Procedure

Page 1: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Funzioni e ProcedureFunzioni e Procedure

Marco D. Santambrogio – [email protected]. aggiornata al 21 Marzo 2014

Page 2: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 1Info di servizio 1

• Vi siete dimostrati volenterosi, quindi teniamo la divisione proposta da voi Questa mattina è arrivato l’ultimo

gruppo per lo scambio!

2

Page 3: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 1Info di servizio 1

3

Page 4: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 2Info di servizio 2

• Il lab di lunedì 24 Marzo inizierà alle 3pm invece che alle 3.30pm

4

FALSO!

Rimane alle 3.30pm

Page 5: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 3Info di servizio 3

• Mercoledì 3 Aprile, avete lezione prima di IEIM (10.15am)

• Vorrei verificare la possibilità, solo per il 3 Aprile di iniziare alle 9.30am e finire alle 11am

5

Page 6: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 4Info di servizio 4

• Nuova pagina dei tool!

• Caricati dei video su Come installare la VM Come usare Code::Blocks Come scrivere il primo programma

http://home.deib.polimi.it/santambr/dida/ieim/2014/tools/video.htm

6

Page 7: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 5Info di servizio 5

• Progetti alternativi di Informatica Ven 7am – 9am Quando il Ven non fosse possibile

(ponti, scioperi, etc.): Gio 8.30am – 10am

• Calendario online sul sito del corso

7

Page 8: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Info di servizio 6Info di servizio 6

• Il NECST lab organizza visite ad altri centri di ricerca Avvicinarsi a/conoscere nuove realtà di

ricerca Networking

• Centro di Super-computing Svizzero http://www.cscs.ch Data candidata: 22 Aprile 2014 Se interessati, scrivere a me :)

8

Page 9: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Page 10: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ObiettiviObiettivi

• Funzioni

• Scope delle variabili

10

Page 11: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La calcolatrice?La calcolatrice?

11

Umh….Meglio!

Page 12: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La calcolatrice!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

12

Page 13: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Prima osservazione: i dati!Prima osservazione: i dati!

• Definizione dei dati su cui devo lavorare Quanti dati mi servono? Di che tipo devono essere? Come gestisco l’operazione?

13

Page 14: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Ragioniamo sul Ragioniamo sul fIussofIusso

• Inserire i dati (numeri e operazione)

• Verificare che l’inserimento dei dati sia corretto

• Sulla base dell’operazione selezionata, eseguire la funzione richiesta

• Mostrare il risultato

14

Questo NON e’ un algoritmo!!!!-Non e’ “non ambiguo”-I passi non sono atomici

Page 15: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Primo compito per casaPrimo compito per casa

Scrivere l’algoritmo che risolve il problema in esame!

15

Page 16: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Una prima soluzioneUna prima soluzione

16

Problema con i char

Page 17: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Una 1ma sol Una 1ma sol correttacorretta ;) ;)

17

E qui cosa succede?

Page 18: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

IF annidatiIF annidati

18

Page 19: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

OsservazioniOsservazioni

• Quando abbiamo ragionato sul flusso, abbiamo detto: Sulla base dell’operazione selezionata,

eseguire la funzione richiesta• Quali sono le funzioni che potremmo

definire? somma, sottrazione, divisione e

moltiplicazione

• In C, queste vengo chiamate anche sottoprogrammi

19

Page 20: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

SottoprogrammiSottoprogrammi

• 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)

20

Page 21: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Sottoprogrammi: Sottoprogrammi: motivazionimotivazioni• 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

21

Page 22: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Funzioni e procedureFunzioni 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*/

22

Page 23: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Funzioni e procedure in CFunzioni 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)

23

Page 24: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Dichiarazione del Dichiarazione del prototipoprototipo• 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<tipo_ris> <nome_funz> (<lista tipi dei parametri>);

• Prototipo procedura (void è una parola chiave del C che indica assenza di tipo)void <nome_funz> (<lista tipi dei parametri>);

24

Page 25: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Definizione del Definizione del sottoprogrammasottoprogramma• 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> <nome> (tipo par_for1, tipo par_for2 ...){

parte dichiarativa localeparte 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 modo ordinato ai tipi elencati nella dichiarazione del prototipo

25

Page 26: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Parametri formaliParametri 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)

26

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

Page 27: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Istruzione returnIstruzione return

• Parola chiave C utilizzata solo nelle funzioni• Sintassi

return <espressione>

• È 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

27

Page 28: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Chimante/ChiamatoChimante/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

28

Istruzione 1Istruzione 2Chiama funzioneIstruzione 3

codice chiamante

Istruzione 1Istruzione 2Istruzione 3Istruzione 4return

funzione chiamata

Inizioprogramma

Passaggiodel controllo Ritorno

del controllo

Page 29: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Invocazione o chiamataInvocazione 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

<espressione> = <… nomefunzione(par_att1 …)…>;

• 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

29

Page 30: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Passaggio dei parametriPassaggio 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

30

Page 31: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Passaggio per VALOREPassaggio 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

31

Page 32: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Pausa…Pausa…

32

Pausa per 10’

Page 33: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La calcolatrice con le funzioni - prototipiLa calcolatrice con le funzioni - prototipi

33

I prototipi

Le chiamate

Page 34: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La calcolatrice con le funzioni – La calcolatrice con le funzioni – le le funzionifunzioni

34

Page 35: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Esempio: passaggio per Esempio: passaggio per valorevalore

}

/* nel main */

float valore1, valore2;

float risultato;

risultato=somma(valore1,valore2);

35

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 evalore 2

Quando la funzionetermina il valore di risultato in smma viene copiato in risultato nel main

Page 36: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Scope delle variabiliScope delle variabili

36

Page 37: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

VisibilitàVisibilità

• 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

37

Page 38: Funzioni e Procedure

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 blocco

EsempiEsempi

int x;

f()

{

int y;

y=1;

}

int x;

g(int y, char z)

{

int k;

int l;

}

f(int x)

{

int x;

}

38

Page 39: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Mascheramento Mascheramento (shadowing)(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”

39

Page 40: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

VisibilitàVisibilità

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

40

Page 41: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Torniamo alla calcolatriceTorniamo alla calcolatrice

41

Verifichiamo gli ingressi?

Page 42: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Non possiamo fare di meglio?Non possiamo fare di meglio?

42

Page 43: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Selezione multiplaSelezione multipla

• Operazione e’ uguale in tutti i casi Non posso evitare di ripetere

operazione ==

43

Page 44: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lo switchLo switch

44

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

Page 45: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lo switchLo 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”

45

switch ( expression ){ case value1 : statement-list1 case value2 : statement-list2 case value3 : statement-list3 case ...

}

Page 46: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

La calcolatrice con lo La calcolatrice con lo switchswitch

46

Page 47: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

PiccoloPiccolo problema… problema…

47

Page 48: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Perche’???Perche’???

48

Flusso

Page 49: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lo switch ed il breakLo switch ed il break

49

Page 50: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

ZoomZoom

50

Flusso

Page 51: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lo switch: defaultLo switch: default

51

Page 52: Funzioni e Procedure

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fonti per lo studio + Fonti per lo studio + CreditsCredits• Fonti per lo studio

• Credits Gianluca Palermo