CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 1- Pourquoi les FONCTIONS peuvent échanger des données en E entre elles ? 2- Comment écrire des FONCTIONS avec paramètre en E ? 3- Comment le CPU exécute des FONCTIONS avec paramètre en E ?
CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 1- Pourquoi les FONCTIONS peuvent échanger des données en E entre elles ?
3 Fonction CalculerFacto() : où saisir ? void CalculerFacto(void); int main() { // Calcul et affichage du factoriel CalculerFacto(); }... /* Calcul et affichage du factoriel */ void CalculerFacto(void) { int factoriel= 1, i,n; // Saisie du nombre n au clavier printf("Donner n : "); scanf("%d",&n); /* calcul de : 1 x 2 x 3 x... x n*/ for ( i=2 ; i<=n ; i=i+1 ) {factoriel= factoriel*i; } printf("\nFactoriel : %d",factoriel); } COMMENT FAIRE Si n est saisi dans le main() et pas dans la fonction ?
/* Calcul du factoriel */ void CalculerFacto(void) { int factoriel= 1, i; /* calcul de : 1 x 2 x 3 x... x n*/ for ( i=2 ; i<=n ; i=i+1 ) {factoriel= factoriel*i; } } 4 Données locales et échanges de données entre fonctions Fonction : possède ses propres données locales privées. Comment transmettre n à lintérieur de la fonction ? Les fonctions doivent donc séchanger des données : Les paramètres en Entrée sont transmis à la fonction au moment de lappel de la fonction.
5 Fonction avec paramètre en Entrée
6 n est passé à la Fonction CalculerFacto() void CalculerFacto(int); int main() { int n; // Saisie du nombre n au clavier printf("Donner n : "); scanf("%d",&n); // Calcul et affichage du factoriel CalculerFacto(n); }... /* Calcul et affichage du factoriel */ void CalculerFacto(int x) { int factoriel= 1, i; /* calcul de : 1 x 2 x 3 x... x X*/ for ( i=2 ; i<=x ; i=i+1 ) {factoriel= factoriel*i; } printf("\nFactoriel : %d",factoriel); }
7 /* Calcule le factoriel du nombre x */ void CalculerFacto(int x) { int factoriel= 1, i; /* calcul de : 1 x 2 x 3 x... x n*/ for ( i=2 ; i<=x ; i=i+1 ) {factoriel= factoriel*i; } printf("\nFactoriel : %d",factoriel); } Fonction : des échanges en Entrée appels de fonctions : précisent ordre dexécution des différentes fonctions. échanges de données : communication dinformations entre fonctions: x reçoit la valeur de n. int main() {... CalculerFacto(n);... Echanges de données entre fonctions : Entrée
CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 2- Comment écrire des FONCTIONS avec paramètre en E ?
9 Ecrire une fonction avec paramètre en Entrée /* PROTOTYPE DE LA FONCTION : SA DECLARATION void NomFonction(TYPESPARAMETRESE); */ void CalculerFacto(int); int main() {... /* APPEL DE LA FONCTION : NomFonction(NomVariablesE); */ CalculerFacto(n); } /* DEFINITION DE LA FONCTION void NomFonction(TYPESPARAMETRESE NOMSPARAMETRES) { }*/ void CalculerFacto(int x) { // DECLARATIONS DONNEES LOCALES // INSTRUCTIONS de la FONCTION }
10 int main() { int n; printf("Donner n : "); scanf("%d",&n); CalculerFacto(n); } void CalculerFacto(int x) { int factoriel= 1, i; for ( i=2 ; i<=x ; i=i+1 ) {factoriel= factoriel*i; } printf("\nFactoriel : %d",factoriel); n: 4 x: 4 10 Quel est le lien entre n et x ?
11 Un PARAMETRE en ENTREE est passé par valeur. Il est en lecture seulement pour la fonction appelée, qui ne peut pas le modifier (ex. n). passage paramètre par valeur transmission valeur de la donnée Passage par VALEUR dun paramètre en ENTREE
CYCLE 6 : FONCTIONS FONCTIONS avec paramètres en Entrée 3- Comment le CPU exécute des FONCTIONS avec paramètre en E ?
13 /* PROTOTYPE FONCTION */ void CalculerFacto(int); int main() { int n;... /* APPEL FONCTION */ CalculerFacto(n); } /* DEFINITION DE LA FONCTION */ void CalculerFacto(int x) { } 1. Appel fonction : CPU redirige lexécution vers la fonction. 2. Le CPU initialise x avec la valeur de n : x= n. 3. Il exécute les instructions de la fonction. 4. En fin de fonction : le CPU revient exécuter linstruction juste après lappel. Exécution CPU du passage de paramètre en Entrée
14 int main() { int n; printf("Donner n : "); scanf("%d",&n); CalculerFacto(n); } void CalculerFacto(int x) { int factoriel= 1, i; for ( i=2 ; i<=x ; i=i+1 ) {factoriel= factoriel*i; } printf("\nFactoriel : %d",factoriel); } 1. Exécution de la fonction main() a. Déclaration et saisie de n : n reçoit 4 du clavier b. Appel fonction avec passage valeur 4 : CalculerFacto(4) 2. Exécution de la fonction appelée a. Initialisation paramètre en E : x= 4 b. Calcul du factoriel et affichage c. Retour à la fonction main() 3. Fin de lexécution du main() Exemple complet avec le factoriel