DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Funzioni e Procedure
Marco D. Santambrogio – [email protected]
Ver. aggiornata al 3 Aprile 2015
Regole esame
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Compitini di INFO:
 24 Aprile 2015
• 4.15pm @ C.G.1 (Ed. 9)
 21 Maggio 2015
• 10.30am @ S.0.2 (Ed. 3)
 17 Giugno 2015
• 1.30pm @ I.0.1 (Ed. 4)
2
Regole esame
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Compitini di INFO:
 24 Aprile 2015
• 4.15pm @ C.G.1 (Ed. 9)
 21 Maggio 2015
• 10.30am @ S.0.2 (Ed. 3)
 17 Giugno 2015
• 1.30pm @ I.0.1 (Ed. 4)
• Si passa con 50% (11.5) o 60% (13.8)?
3
Regole esame
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Compitini di INFO:
 24 Aprile 2015
• 4.15pm @ C.G.1 (Ed. 9)
 21 Maggio 2015
• 10.30am @ S.0.2 (Ed. 3)
 17 Giugno 2015
• 1.30pm @ I.0.1 (Ed. 4)
• Si passa con 50% (11.5) o 60% (13.8)?
Nel dubbio… con 60%
&& orale obbligatorio!
4
Regole esame
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
5
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1 Aprile
6
Regole esame
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Compitini di INFO:
 24 Aprile 2015
• 4.15pm @ C.G.1 (Ed. 9)
 21 Maggio 2015
• 10.30am @ S.0.2 (Ed. 3)
 17 Giugno 2015
• 1.30pm @ I.0.1 (Ed. 4)
• Si passa con 50% (11.5) o 60% (13.8)?
Nel dubbio… con 55%
7
Torniamo al 27 Marzo…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
http://th06.deviantart.net/fs70/PRE/i/2012/025/2/c/time_turner_1_by_jamieg09-d4ne7ba.jpg
8
Il fattoriale
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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,…
9
Il fattoriale: codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
10
Dal fattoriale…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
11
Dal fattoriale…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
… al coefficiente binomiale
12
Coefficiente binomiale
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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:
13
Tornando ad oggi…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
14
Obiettivi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Funzioni
• Scope delle variabili
15
Coefficiente binomiale
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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:
16
Coefficiente binomiale: flusso
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1. Inserire K e N
2. Verifico K e N
3. Se corretti
A.
B.
C.
D.
Calcolare il fattoriale di N (FatN)
Calcolare il fattoriale di K (FatK)
Calcolare il fattoriale di N-K (FatNK)
CoefBin = FatN/(FatK)*FatNK
4. Altrimenti torno a 1
17
Ma quindi…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Cosa è Calcolare il fattoriale di N?
18
Ma quindi…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Cosa è Calcolare il fattoriale di N?
Cosa è Calcolare il fattoriale di K?
19
Ma quindi…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Cosa è Calcolare il fattoriale di N?
Cosa è Calcolare il fattoriale di K?
Cosa è Calcolare il fattoriale di N-K?
20
Ma quindi…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Cosa è Calcolare il fattoriale di N?
Cosa è Calcolare il fattoriale di K?
Cosa è Calcolare il fattoriale di N-K?
Sono tutti SOTTOPROGRAMMI!!
21
Sottoprogrammi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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)
22
Sottoprogrammi: motivazioni
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
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
23
Sottoprogrammi: funzioni e procedure
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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*/
24
Funzioni e procedure in C
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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)
25
1. Dichiarazione del prototipo
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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>);
26
2. Definizione della funzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
•
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> <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 modo ordinato ai tipi
elencati nella dichiarazione del prototipo
27
3. Invocazione o chiamata
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
28
Chimante/Chiamato
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
•
•
•
All’atto della chiamata, il
controllo dell’esecuzione
passa dal chiamante al
chiamato
Il codice del chiamato
viene eseguito
codice chiamante
Inizio
programma
Istruzione 1
Istruzione 2
Chiama funzione
Istruzione 3
Passaggio
del controllo
Al termine
dell’esecuzione il
controllo ritorna al
chiamante, all’istruzione
successiva a quella della
chiamata
funzione chiamata
Ritorno
del
controllo
Istruzione 1
Istruzione 2
Istruzione 3
Istruzione 4
return
29
Istruzione return
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
30
Tornando al coefficiente binomiale
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
1. Inserire K e N
2. Verifico K e N
3. Se corretti
A.
B.
C.
D.
Calcolare il fattoriale di N (FatN)
Calcolare il fattoriale di K (FatK)
Calcolare il fattoriale di N-K (FatNK)
CoefBin = FatN/(FatK)*FatNK
4. Altrimenti torno a 1
31
Coefficiente binomiale: codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
32
Coefficiente binomiale: codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
33
Coefficiente binomiale: codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
34
Coefficiente binomiale: codice
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
35
Comunicazione tra chiamante e chiamato
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
36
Passaggio dei parametri
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
37
Parametri formali
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
• 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)
38
Passaggio per VALORE
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
39
Esempio: passaggio per valore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Ambiente della funzione fat
valore
}
/* nel main */
int K;
int FatK;
FatK=fat(K);
Quando invoco la funzione
fat, il valore in K nel main
viene copiato in valore
K
fattoriale
Quando la funzione fat
termina, il valore di fattoriale
viene copiato in FatK nel main
FatK
Ambiente della funzione main
40
Visibilità
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
41
Scope/visibilità delle variabili
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
42
Visibilità
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
43
Mascheramento (shadowing)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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”
44
Mascheramento (shadowing)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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”
45
Visibilità
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
char g1, g2, g3;
main()
{
int a, b;
…
{/*blcco1*/
double a,c;
}
…
}
void f1(){
…
{/*blocco2*/
char a,d;
}
…
{/*blocco3*/
float d
…
}
}
g1,g2,g3
a,b
Livello globale
main
a,c
blocco1
f1
a,d
blocco2
d
blocco3
46
Esempi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
int x;
f()
{
int y;
y=1;
}
int x;
g(int y, char z)
{
int k;
int l;
…
}
f(int x)
{
int x;
}
• 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
47
La calcolatrice!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
48
La calcolatrice?
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Umh….
49
La calcolatrice!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Umh….
Meglio!
50
La calcolatrice!
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
51
Fonti per lo studio + Credits
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Fonti per lo studio
• Credits
 Gianluca Palermo
Scarica

PPT - V5