14
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

  • Upload
    ting

  • View
    26

  • Download
    3

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

CYCLE 6 : FONCTIONSFONCTIONS 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 ?

Page 2: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

CYCLE 6 : FONCTIONSFONCTIONS avec résultat en Sortie

1- Pourquoi les FONCTIONS peuvent échanger des données en S entre elles ?

Page 3: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

3

Fonction factoriel sans affichage du résultat

void CalculerFacto(void);

int main()

{ // Calcul et affichage du factoriel

CalculerFacto();

}

...

/* Calcul et affichage du factoriel */

void CalculerFacto(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 ?

Page 4: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

/* Calcul du factoriel */

void CalculerFacto(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;

}

}

4

Données locales et échanges de données entre fonctions

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.

Page 5: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

5

Fonction avec résultat en Sortie

Un résultat en Sortie

est une valeur transmise

en retour par la fonction :

facto…

Page 6: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

6

factoriel récupère le résultat de la Fonction CalculerFacto()

int CalculerFacto(void);

int main()

{ int factoriel;

// Calcul et affichage du factoriel

factoriel= CalculerFacto();

printf("\nFactoriel : %d",factoriel);

}

...

/* Calcul du factoriel */

int CalculerFacto(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);

}

Page 7: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

7

/* 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);

}

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.

int main()

{ ...

factoriel= CalculerFacto(n); ...

Echanges de données entre fonctions

Page 8: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

CYCLE 6 : FONCTIONSFONCTIONS avec résultat en Sortie

2- Comment écrire des FONCTIONS avec résultat en

S ?

Page 9: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

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

}

Page 10: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

10

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

}

@1 n: 410 @3 x: 410@2 factoriel: ---

@4 facto: 24factoriel: 24

Quel est le lien entre factoriel et facto ?

Page 11: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

11

Un RESULTAT en SORTIE est une valeur renvoyée par l’instruction return().

Une seule valeur peut-être renvoyée par une fonction.

Passage par valeur d’un RESULTAT en SORTIE

Page 12: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

CYCLE 6 : FONCTIONSFONCTIONS avec résultat en Sortie

3- Comment le CPU exécute des FONCTIONS avec résultat en S ?

Page 13: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

13

/* PROTOTYPE FONCTION */

int CalculerFacto(int);

int main()

{ int n, factoriel; ...

/* APPEL FONCTION */

factoriel= CalculerFacto(n);

}

/* DEFINITION DE LA FONCTION */

int CalculerFacto(int x)

{ int facto; ...

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.

Exécution CPU du passage de résultat en Sortie

Page 14: CYCLE 6 : FONCTIONS FONCTIONS avec résultat en Sortie

14

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

}

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 en E : x= 4b. Calcul factoriel et stockage dans

la variable locale facto

c. Retour au main() avec renvoi de la valeur de facto : 24

3. Suite et fin de l’exécution du main()a. Récupération du résultat dans la

variable locale factoriel : factoriel= 24

b. Affichage du résultat.

Exemple complet avec le factoriel