140 likes | 273 Views
CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie. 1- Pourquoi les FONCTIONS peuvent échanger des données en S entre elles ?. 2- Comment écrire des FONCTIONS avec résultat en S ?. 3- Comment le CPU exécute des FONCTIONS avec résultat en S ?. CYCLE 6 : FONCTIONS
E N D
CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 1- Pourquoi les FONCTIONS peuvent échanger des données en S entre elles ? 2- Comment écrire des FONCTIONS avec résultat en S ? 3- Comment le CPU exécute des FONCTIONS avec résultat en S ?
CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 1- Pourquoi les FONCTIONS peuvent échanger des données en S entre elles ?
Fonction factoriel sans affichage du résultat voidCalculerFacto(void); int main() { // Calcul et affichage du factoriel CalculerFacto(); } ... /* Calcul et affichage du factoriel */ voidCalculerFacto(void) { int facto= 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 ) { facto= facto*i; } printf("\nFactoriel : %d",facto); } COMMENT FAIRE Si le factoriel est affiché dans le main() et pas dans la fonction ?
Données locales et échanges de données entre fonctions /* Calcul du factoriel */ voidCalculerFacto(int x) { int facto= 1, i; /* calcul de : 1 x 2 x 3 x ... x X*/ for ( i=2 ; i<=x ; i=i+1 ) { facto= facto*i; } } • Fonction : possède ses propres données locales privées. • Comment transmettre le factoriel, en retour, à la fonction main() ? • Les fonctions doivent donc s’échanger des données : • Un résultat en Sortie est renvoyé par la fonction à la fin de son exécution.
Fonction avec résultat en Sortie Un résultat en Sortie est une valeur transmise en retour par la fonction : facto…
DEFINITION de fonction APPEL de fonction PROTOTYPE : déclaration de fonction factoriel récupère le résultat de la Fonction CalculerFacto() /* Calcul du factoriel */ intCalculerFacto(void) { int facto= 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 ) { facto= facto*i; } return(facto); } intCalculerFacto(void); int main() { int factoriel; // Calcul et affichage du factoriel factoriel=CalculerFacto(); printf("\nFactoriel : %d",factoriel); } ...
Echanges de données entre fonctions int main() { ... factoriel= CalculerFacto(n); ... • Fonction : des échanges en Sortie • appels de fonctions : précisent ordre d’exécution des différentes fonctions. • échanges de données : communication d’informations entre fonctions : factoriel reçoit la valeur de facto. /* Calcule le factoriel du nombre x */ int CalculerFacto(int x) { int facto= 1, i; /* calcul de : 1 x 2 x 3 x ... x n*/ for ( i=2 ; i<=x ; i=i+1 ) { facto= facto*i; } return(facto); }
CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 2- Comment écrire des FONCTIONS avec résultat en S ?
Ecrire une fonction avec résultat en Sortie /* PROTOTYPE DE LA FONCTION : SA DECLARATION TYPESORTIE NomFonction(void); */ int CalculerFacto(void); int main() { ... /* APPEL DE LA FONCTION : NomVarSortie= NomFonction(); */ factoriel= CalculerFacto(); } /* DEFINITION DE LA FONCTION TYPESORTIE NomFonction(void) { }*/ int CalculerFacto(void) { // DECLARATIONS DONNEES LOCALES et INSTRUCTIONS de la FONCTION return(facto); } noms différents dans appel et dans fonction
@1 @3 @2 @4 Quel est le lien entre factoriel et facto ? int CalculerFacto(int x) { int facto= 1, i; for ( i=2 ; i<=x ; i=i+1 ) { facto= facto*i; } return(facto); } int main() { int n, factoriel; printf("Donner n : "); scanf("%d",&n); factoriel= CalculerFacto(n); printf("\nFactoriel : %d",factoriel); } x= n= 4 n: 410 x: 410 factoriel: --- factoriel: 24 facto: 24 factoriel= facto= 24
Passage par valeur d’un RESULTAT en SORTIE Un RESULTAT en SORTIE est une valeur renvoyée par l’instruction return(). Une seule valeur peut-être renvoyée par une fonction.
CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 3- Comment le CPU exécute des FONCTIONS avec résultat en S ?
Exécution CPU du passage de résultat en Sortie /* PROTOTYPE FONCTION*/ int CalculerFacto(int); int main() { int n, factoriel;... /* APPEL FONCTION */ factoriel= CalculerFacto(n); } /* DEFINITION DE LA FONCTION*/ int CalculerFacto(int x) { intfacto; ... return(facto); } • Appel fonction : CPU redirige l’exécution vers la fonction. • Il exécute les instructions de la fonction. • En fin de fonction : le CPU renvoie la valeur du résultat à la fonction appelante. • Au niveau de l’instruction d’appel, l’affectation est exécutée : • factoriel= facto.
Exemple complet avec le factoriel • Exécution de la fonction main() • Déclaration et saisie de n : n reçoit 4 du clavier • Appel fonction avec passage valeur 4 : CalculerFacto(4) • Exécution de la fonction appelée • Initialisation en E : x= 4 • Calcul factoriel et stockage dans la variable locale facto • Retour au main() avec renvoi de la valeur de facto : 24 • Suite et fin de l’exécution du main() • Récupération du résultat dans la variable locale factoriel : factoriel= 24 • Affichage du résultat. int main() { int n, factoriel; printf("Donner n : "); scanf("%d",&n); factoriel= CalculerFacto(n); printf("\nFactoriel : %d",factoriel); } int CalculerFacto(int x) { int facto= 1, i; for ( i=2 ; i<=x ; i=i+1 ) { facto= facto*i; } return(facto); }