g. amodeo, c. gaibisso programmazione di calcolatori lezione xii le funzioni programmazione di...
TRANSCRIPT
![Page 1: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/1.jpg)
G. Amodeo,C. Gaibisso Programmazione di Programmazione di
CalcolatoriCalcolatori
Lezione XIILe funzioni
Programmazione di Calcolatori: le funzioni 1
![Page 2: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/2.jpg)
G. Amodeo,C. Gaibisso Le funzioni della Le funzioni della
matematicamatematica
Programmazione di Calcolatori: le funzioni 2
• Definizione di una funzione:
Dominio Codominio
• In matematica:
Nome f : X Y
f(x) = y
una legge che assegna ad ogni
elemento di X uno ed un solo
elemento di Y
f : N x N Nf(x,y) = (x-y)2
![Page 3: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/3.jpg)
G. Amodeo,C. Gaibisso
Le funzioni del CLe funzioni del C
Programmazione di Calcolatori: le funzioni 3
• In C:
int f (int x, int y){int ris;ris = (x-y)*(x-y);
return(ris);}
• Ma non c’è proprio nessuna differenza?
DominioCodominio
Nome
una legge che assegna ad ogni
elemento del dominio uno ed un solo elemento del
codominio
![Page 4: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/4.jpg)
G. Amodeo,C. Gaibisso
La differenza …La differenza …
Programmazione di Calcolatori: le funzioni 4
3 1 2
1
f(x,y,z)
possono calcolare valori
ma possono anche modificare lo stato della memoria
x 2
2
x
x x
3
• Le funzioni del C:
![Page 5: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/5.jpg)
G. Amodeo,C. Gaibisso
Definizione di una funzioneDefinizione di una funzione
Programmazione di Calcolatori: gli operatori 5
• E’ necessario assegnare alla funzione:
a) un nome
b) il tipo del valore calcolato
c) il nome e il tipo delle variabili di ingresso (parametri formali)
d) le modalità secondo le quali (algoritmo) il valore della funzione è calcolato a partire dai parametri formali
![Page 6: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/6.jpg)
G. Amodeo,C. Gaibisso
Definizione di funzioneDefinizione di funzione
Programmazione di Calcolatori: gli operatori 6
• Funzioni che calcolano un valore:tipoF nomeF (tipo1 par1, …, tipok
park){…return(espressione);}
il valore di espressione è il valore restituito dalla funzione
• Funzioni che si limitano a modificare lo stato della memoria:
intestazione
corpo
![Page 7: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/7.jpg)
G. Amodeo,C. Gaibisso
Definizione di funzioneDefinizione di funzione
Programmazione di Calcolatori: le funzioni 7
• Esempio:// definizione della funzione che calcola la somma di 4 numeri interiint somma (int num1, int num2, int num3, int num4)
{// definizione della variabile per la sommaint totale;// calcola la somma dei 4 parametri formali
totale = num1 + num2 + num3 + num4;// restituisce il valore cosi’ calcolatoreturn(totale);};// definizione della funzione che calcola la somma di 4
numeri interiint somma (int num1, int num2, int num3, int num4)
{// restituisce la somma dei 4 parametri formalireturn(num1 + num2 + num3 + num4);};
![Page 8: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/8.jpg)
G. Amodeo,C. Gaibisso
Chiamata di funzioneChiamata di funzione
Programmazione di Calcolatori: gli operatori 8
• E’ necessario specificare:
a) il nome della funzione
b) una lista di espressioni, una per ognuno dei parametri formali (parametri attuali)
c) parametri formali e espressioni corrispondenti devono essere dello stesso tiponomeF (espr1, …,
esprk)
![Page 9: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/9.jpg)
G. Amodeo,C. Gaibisso
Chiamata di funzioneChiamata di funzione
Programmazione di Calcolatori: gli operatori 9
• Funzioni che calcolano un valore:
nome_variabile = nomeF (espr1, …, esprk);
con il tipo di nome_variabile coincidente conquello assegnato alla funzione nella sua definizione
può comparire ovunque può comparire un’espressione dello stesso tipo di quello assegnato alla funzione nella sua definizione
• Esempio:
![Page 10: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/10.jpg)
G. Amodeo,C. Gaibisso
Chiamata di funzioneChiamata di funzione
Programmazione di Calcolatori: le funzioni 10
// sorgente: Lezione_XII\DefChiamata.c
// definizione della funzione per la somma di 4 numeri interi
#include <stdio.h>
int somma (int num1, int num2, int num3, int num4) {
// restituisce la somma dei 4 parametri formali return(num1+num2+num3+num4); } ;
int main(){// definizione delle variabili e loro acquisizioneint n1, n2, n3, n4;
printf("\nFornire i 4 valori: "); scanf("%d %d %d %d", &n1, &n2, &n3, &n4);
// chiamata della funzione printf("\nLa somma e': %d", somma(n1,n2,n3,n4));
return(0); };
• Esempio
![Page 11: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/11.jpg)
G. Amodeo,C. Gaibisso
Chiamata di funzioneChiamata di funzione
Programmazione di Calcolatori: le funzioni 11
• Compilazione:
• Esecuzione:
![Page 12: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/12.jpg)
G. Amodeo,C. Gaibisso Modalità di passaggio dei Modalità di passaggio dei
parametriparametri
Programmazione di Calcolatori: le funzioni 12
• Modalità di passaggio dei parametri:modalità in accordo alle quali i parametri attuali sono “legati” ai parametri formali
• In modo informale (ma non troppo), per ognuno dei parametri formali:1. si alloca memoria per il parametro
formale
2. si valuta il corrispondente parametro attuale
3. il risultato di tale valutazione viene assegnato al corrispondente “parametro formale”
4. si esegue il corpo della funzione
5. si rilascia la memoria allocata per i “parametri formali”
![Page 13: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/13.jpg)
G. Amodeo,C. Gaibisso Modalità di passaggio dei Modalità di passaggio dei
parametriparametri
Programmazione di Calcolatori: le funzioni 13
• Corrispondenza tra parametri attuali e parametri formali:
stabilita sulla base dell’ordine con cui questi compaiono nella chiamata e nella intestazione della funzione, rispettivamente
![Page 14: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/14.jpg)
G. Amodeo,C. Gaibisso Modalità di passaggio dei Modalità di passaggio dei
parametriparametri
Programmazione di Calcolatori: le funzioni 14
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2855
x x
x
x x x
x
z
y1
23
1int max (int N, int M){if (N > M)
return(N);else
return(M);} ;
y = max (x+1, z%4);
x x N
x x M
2
3
3
• Esempio
![Page 15: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/15.jpg)
G. Amodeo,C. Gaibisso Modalità di passaggio dei Modalità di passaggio dei
parametriparametri
Programmazione di Calcolatori: le funzioni 15
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2855
x x
x1
void Add (int N){N = N+1;} ;
Add(x);x x N1
• Abbiamo un problema!!!
2
![Page 16: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/16.jpg)
G. Amodeo,C. Gaibisso
Abbiamo un problema …Abbiamo un problema …
Programmazione di Calcolatori: le funzioni 16
// sorgente: Lezione_XII\PassParNo.c// esempio che dimostra come non sia possibile// modificare il valore dei parametri attuali#include <stdio.h>// definizione della funzione che vorrebbe aggiungere1 ad una variabilevoid add (int n) {
n++; };// chiamanteint main() { // definizione e inizializzazione della variabile di prova int prova=1; printf("\nValore prima della chiamata: %d", prova); // chiamata della funzione che dovrebbe aumentarne il valore add(prova); printf("\nValore successivo alla chiamata: %d", prova); return(0); };
• Esempio
![Page 17: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/17.jpg)
G. Amodeo,C. Gaibisso
Abbiamo un problema …Abbiamo un problema …
Programmazione di Calcolatori: le funzioni 17
• Compilazione:
• Esecuzione:
![Page 18: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/18.jpg)
G. Amodeo,C. Gaibisso Modalità di passaggio dei Modalità di passaggio dei
parametriparametri
Programmazione di Calcolatori: le funzioni 18
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2855
x x
x1
void Add (int *N){*N = *N+1;} ;
Add(&x);x x N2839
• Ma abbiamo anche la soluzione!!!
2
![Page 19: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/19.jpg)
G. Amodeo,C. Gaibisso
E abbiamo la soluzione …E abbiamo la soluzione …
Programmazione di Calcolatori: le funzioni 19
// sorgente: Lezione_XII\PassParSi.c// modalita’ di modifica dello stato della memoria tramite una funzione#include <stdio.h>// definizione della funzione che aggiunge1 al valore di una variabilevoid add (int *n) {
// aggiunge 1 alla varibile puntata dal parametro formale *n=*n+1; };int main() { // definizione e inizializzazione della variabile di prova int prova=1; printf("\nValore prima della chiamata: %d", prova); // chiamata della funzione che ne aumenta il valore add(&prova); printf("\nValore successivo alla chiamata: %d", prova); return(0); };
• Esempio
![Page 20: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/20.jpg)
G. Amodeo,C. Gaibisso
E abbiamo la soluzione …E abbiamo la soluzione …
Programmazione di Calcolatori: le funzioni 20
• Compilazione:
• Esecuzione:
![Page 21: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/21.jpg)
G. Amodeo,C. Gaibisso Quando definisco l’intestazione di una Quando definisco l’intestazione di una
funzione …funzione …
Programmazione di Calcolatori: le funzioni 21
• Devo capire:1. se restituisce un valore, e in caso di
risposta positiva di che tipo è2. quanti e di che tipo sono i valori di ingresso3. se modifica lo stato della memoria, e in caso
di risposta positiva quali sono i riferimenti ai contenuti da modificare
// sorgente Lezione_XII\scambia.c #include <stdio.h>// funzione che scambia il contenuto di due variabili intere void scambia (int *var1, int *var2)
{int temp;temp = *var1;*var1 = *var2;*var2 = temp;};
• Esempio:
![Page 22: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/22.jpg)
G. Amodeo,C. Gaibisso
Quando definisco una funzione …Quando definisco una funzione …
Programmazione di Calcolatori: le funzioni 22
// chiamanteint main ()
{// definizione e acquisizione delle variabiliint A, B;
printf (“\nDammi il valore della I variabile: “);
scanf (“%d”, &A);
printf (“\nDammi il valore della II variabile: “);
scanf (“%d”, &B);
printf(“\nI variabile prima dello scambio: %d\n”, A);
printf(“II variabile prima dello scambio: %d\n”, B);
// chiama la funzione che scambia le variabili
scambia(&A, &B);
printf(“\nI variabile dopo lo scambio: %d\n”, A);
printf(“II variabile dopo lo scambio: %d\n”, B);
return(1);}
• Esempio:
![Page 23: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/23.jpg)
G. Amodeo,C. Gaibisso Quando definisco una Quando definisco una
funzione …funzione …
Programmazione di Calcolatori: le funzioni 23
• Compilazione:
• Esecuzione:
![Page 24: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/24.jpg)
G. Amodeo,C. Gaibisso
Quando definisco una funzione …Quando definisco una funzione …
Programmazione di Calcolatori: le funzioni 24
// sorgente: Lezione_XII\somma2in1.c
#include <stdio.h>
// funzione che somma il contenuto di due variabili// in una terza variabile
void somma_in (int s1, int s2, int *dest){
*dest = s1+s2;};
• Esempio:
![Page 25: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/25.jpg)
G. Amodeo,C. Gaibisso
Quando definisco una funzione …Quando definisco una funzione …
Programmazione di Calcolatori: le funzioni 25
// chiamanteint main ()
{// definizione e acquisizione delle variabiliint A, B, somma;
printf (“\nDammi il valore della I variabile: “);scanf (“%d”, &A);
printf (“\nDammi il valore della II variabile: “);scanf (“%d”, &B);
// chiamata della funzione che somma i due input
// in una terza variabile
somma_in(A, B, &somma);
printf(“\nSomma: %d”, somma);
return(1);};
• Esempio:
![Page 26: G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XII Le funzioni Programmazione di Calcolatori: le funzioni 1](https://reader036.vdocuments.pub/reader036/viewer/2022081518/5542eb65497959361e8d0f2f/html5/thumbnails/26.jpg)
G. Amodeo,C. Gaibisso Quando definisco una Quando definisco una
funzione …funzione …
Programmazione di Calcolatori: le funzioni 26
• Compilazione:
• Esecuzione: