dispense distribuite in classe

Transcript

dispense distribuite in classe
FUNZIONI IN C : UN ESEMPIO INTRODUTTIVO
programma “primafunzione.c”
main(){
!
intP,A=9 ;
int ProdottoInteri (int X,int Y);
Dichiarazione della funzione
(prototipo della funzione)
Chiamata della funzione
P= ProdottoInteri (A,2);
Parametri attuali
}
Nome della funzione
Parametri formali (Tipo e nome)
Tipo del risultato
int ProdottoInteri (int X,int Y){
int P=0,W=X;
Variabili locali della funzione
}
while(W!=0){
!
P=P+Y;
!
W=W-1;
}
return P;
Restituzione del risultato
Durante l’esecuzione
main
9
P= ProdottoInteri (A,2);
9
2
int ProdottoInteri (int X,int Y){
18
18
return P;
FONDAMENTI DI INFORMATICA: IL LINGUAGGIO C
1
FUNZIONI IN C : UN ALTRO ESEMPIO INTRODUTTIVO
#include <stdio.h>
#define EUROLIRE 1936.27
main() {
int Lire;
float Dollari;
float Cambio;
int Converti(float D, float C);
Definizione
Funzione
main
printf("Inserire il cambio Euro/Dollaro --> ");
scanf("%f",&Cambio);
printf("Inserire il valore in Dollari --> ");
scanf("%f",&Dollari);
Lire = Converti(Dollari,Cambio);
printf("%f Dollari = a %d Lire", Dollari, Lire);
}
int Converti(float D, float C){
int ValoreInLire;
ValoreInLire = (EUROLIRE/C)*D;
return ValoreInLire;
}
Definizione
Funzione
Converti
• La parte dichiarativa della funzione main contiene, oltre alle variabili locali
Lire,Dollari e Cambio, la dichiarazione della funzione Converti:
int Converti(float D,float C);
che introduce l’identificatore Converti come una funzione con due argomenti
(parametri formali D e C), di tipo float, e restituisce come risultato un tipo int.
• A questo punto la funzione Converti non è ancora definita, è solo dichiarata; la
sua definizione avviene dopo la funzione main tramite
int Converti(float D,float C){ … }
dove si specificano le azioni che la funzione deve compiere. Le regole e la sintassi
per definire Converti sono le stesse usate in main con in aggiunta
1) si possono usare oltre alle variabili locali (ValoreInLire) e alle costanti
definite con #define (EUROLIRE), anche i parametri formali (D e C)
2) c’è una istruzione return che specifica il risultato che la funzione deve
restituire
• Il main chiama la funzione Converti passandogli come argomenti (parametri
attuali) il valore della variabile Dollari che viene copiato nel parametro formale
D ed il valore della variabile Cambio che viene copiato nel parametro formale C.
• Tramite l’istruzione
Lire = Converti(Dollari,Cambio);
il valore calcolato da Converti viene assegnato alla variabile Lire.
FUNZIONI
2
FUNZIONI IN C : ESEMPIO CON VARIABILI GLOBALI
#include <stdio.h>
#define EUROLIRE 1936.27
float Cambio;
main() {
int Lire;
float Dollari;
int Converti(float D);
Parte
Dichiarativa
globale
Definizione
Funzione
main
printf("Inserire il cambio Euro/Dollaro --> ");
scanf("%f",&Cambio);
printf("Inserire il valore in Dollari --> ");
scanf("%f",&Dollari);
Lire = Converti(Dollari);
printf("%f Dollari = a %d Lire", Dollari, Lire);
}
int Converti(float D){
int ValoreInLire;
ValoreInLire = (EUROLIRE/Cambio)*D;
return ValoreInLire;
}
Definizione
Funzione
Converti
• Nella parte dichiarativa globale (fuori da ogni funzione) si dichiara la variabile
globale Cambio, identificatore usato sia nel main che nella funzione Converti.
In questo caso il valore del Cambio viene passato dalla funzione main alla
funzione Converti tramite la variabile globale Cambio e non come argomento
quindi la funzione Converti deve avere un solo argmento (parametro formale)
int Converti(float D);
• La funzione Converti può usare (in ValoreInLire =
(EUROLIRE/Cambio)*D;)
oltre alle variabili locali (ValoreInLire) e alle costanti definite con #define
(EUROLIRE), e ai parametri formali (D) anche la variabile globale Cambio.
FONDAMENTI DI INFORMATICA: IL LINGUAGGIO C
3
COMUNICAZIONE TRA CHIAMANTE E CHIAMATA:
PARAMETRI DELLE UNITÀ DI PROGRAMMA
Scambio informazioni tra l’unità che attiva un’altra unità (d'ora in poi chiamante) e
l'unità che viene attivata (d’ora in poi chiamata).
In fase di esecuzione esistono due meccanismi per effettuare questo scambio:
• tramite i parametri, dichiarati nell'intestazione dell'unità chiamata.
• tramite le variabili non locali cui l'unità chiamata si può riferire in lettura e in
scrittura
Per variabili non locali si intendono le variabili dichiarate all’esterno di un
blocco, ma visibili da quel blocco
• Il concetto di parametro fornisce invece una modalità di comunicazione molto
più potente, in quanto permette che ogni diversa attivazione dell’unità chiamata
operi su diverse variabili della chiamante.
• Nell'intestazione di una procedura vengono dichiarati i parametri formali che
sono visti dalla procedura stessa come variabili locali, ma, a differenza di queste
ultime, in fase di esecuzione, all'atto della attivazione della procedura da parte di
una chiamante si stabilisce un collegamento tra variabili/valori della chiamante
(detti parametri attuali o effettivi) e parametri formali.
TECNICHE DI LEGAME DEI PARAMETRI
• legame per valore,
• legame per riferimento (detto anche legame variabile o legame indirizzo ).
FUNZIONI
4