1 / 14

CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

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

ting
Download Presentation

CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 ?

  2. CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 1- Pourquoi les FONCTIONS peuvent échanger des données en S entre elles ?

  3. 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 ?

  4. 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.

  5. Fonction avec résultat en Sortie Un résultat en Sortie est une valeur transmise en retour par la fonction : facto…

  6. 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); } ...

  7. 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); }

  8. CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 2- Comment écrire des FONCTIONS avec résultat en S ?

  9. 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

  10. @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

  11. 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.

  12. CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie 3- Comment le CPU exécute des FONCTIONS avec résultat en S ?

  13. 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.

  14. 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); }

More Related