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
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 ?
CYCLE 6 : FONCTIONSFONCTIONS 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
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 ?
/* 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.
5
Fonction avec résultat en Sortie
Un résultat en Sortie
est une valeur transmise
en retour par la fonction :
facto…
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);
}
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
CYCLE 6 : FONCTIONSFONCTIONS 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);
}
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 ?
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
CYCLE 6 : FONCTIONSFONCTIONS avec résultat en Sortie
3- Comment le CPU exécute des FONCTIONS avec résultat en S ?
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
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