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