Académique Documents
Professionnel Documents
Culture Documents
Cours4 Presentation
Cours4 Presentation
MOUOMEN E
Plan du cours
Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests
Plan du cours
Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests
Rappels
Écrire un programme
Instructions é lémentaires
Lecture / écriture, déclaration, affectation, etc.
Structures de controles
instructions conditionnelles ( i f ) et itératives (while, d o . . .wh ile ,
fo r)
Introduction
Exemple de recette
Recette de la tarte tatin
Ingrédients : 250g de farine, 125g de beurre, 1 œuf, 2cl d’eau,
une pincée de sel, 200g de sucre en poudre, 5 belles pommes
Mettre la farine dans un récipient puis faire un puits
Verser dans le puits 2cl d’eau
Mettre le beurre
Mettre 100g de sucre et le sel
Pétrir de façon à former une boule
Verser le sucre restant dans une casserole
Rajouter un peu d’eau pour l’humecter
Le faire caraméliser `a feu vif, sans remuer
Verser au fond du plat à tarte
Peler les pommes, les couper en quartiers
Faire revenir les pommes dans une poele avec du beurre
Disposer les pommes dans le plat et étaler la pâte dessus
Faire cuire 45 minutes et retourner dans une assiette
Peip1/PeipC Introduction à l’informatique Année 2022− 2023 7
Cours 4 : fonctions, documentation et tests Rappels et introduction
Introduction
Introduction
Exemple : découpage en sous recette ⇒ fonctions
Recette de la pâte brisée
Ingrédients : 250g de farine, 125g de beurre, 1 œuf, 2cl d’eau,
une pincée de sel, 100g de sucre en poudre
Mettre la farine dans un récipient puis faire un puits
Verser dans le puits 2cl d’eau
Mettre le beurre
Mettre le sucre et le sel
Pétrir de façon à former une boule
Recette du caramel
Ingrédients : 100g de sucre en poudre
Verser le sucre dans une casserole
Rajouter un peu d’eau pour l’humecter
Le faire caraméiser `a feu vif, sans remuer
Introduction
Exemple de recette
Recette de la tarte tatin
Ingrédients : 5 belles pommes, pate brisée, caramel
Préparer une pate brisée
Préparer un caramel et le verser au fond du plat `atarte
Peler les pommes, les couper en quartiers
Faire revenir les pommes dans une poele avec du beurre
Disposer les pommes dans le plat et étaler la pâte dessus
Faire cuire 45 minutes dans un four préchauffé`a210 ◦ C et
retourner dans une assiette
Introduction
Introduction
Objectifs des fonctions :
Modularité
- Décomposer un programme en sous-programmes plus simples
- Implantation plus facile
- Validation des sous-programmes (tests)
- Réutilisation
- Flexibilité (remplacement d’un sous-programme par un autre)
Plan du cours
Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests
Fonctions existantes
Appeler des fonctions existantes
Exemple : librairie de fonctions mathématiques cmath
#include <iostream> Ajouter la librairie :
#include <cmath> #include <cmath>
using namespace std;
Donner la valeur aux fonctions (...) :
i n t main() ⇒ paramétres de la fonction
{
double racine, expo, s inus , puissance4; Possibilité de passer plusieurs
paramètres
racine = sqrt(25);
expo = exp(4.5); L’ordre des paramètres est important
sinus = sin(3.14);
puissance4 = pow(5.0, 4.0);
Le type des paramètres est important
La fonction retourne une valeur en
cout << "Raci ne de 25 : " << r aci ne << endl ;
cout << " e ^ { 4 . 5}: " << expo << endl;
résultat
cout << "Sinus de P i : " << sinus << endl;
cout << "5^4 : " << pui ssance4 << endl ;
return 0;
}
Librairie
Documentation de la librairie cmath
http://www.cplusplus.com/reference/cmath/
Librairie
Fonctions
Programme principal
= sous-algorithmes
Paramètres en Entrée : { E }
Passage par valeur
Paramètres en Entrée/Sortie : { E S }
Passage par référence
Les fonctions
Formalisation
type retourné nom fo nction ( type1 param1,
type2 param2,
type3 param3, ...) {
Déclarations des v a r i a b l e s l o c a l e s `a l a fo nction
Bloc d ’ i n s t r u c t i o n s
Retour de l a v aleur d’une s o r t i e r e s u l t a t
}
Les fonctions
Syntaxe
type nomFonction ( type1 param1, type2 param2, . . . ) {
declaration_variables;
bl oc_i nst r uct i ons;
return expression;
}
Les fonctions
Premières fonctions : la fonction maximum
f l o a t maximum ( f l o a t a , f l o a t b)
{
f l o a t maxi ;
i f ( a >= b )
{
maxi = a;
}
else
{
maxi = b;
}
return maxi;
}
i n t main()
{
cout << maximum(1.0f, 3.0 f ) << endl;
cout << maximum(5.0f, 3.0 f ) << endl;
cout << maximum(2.0f, 2.0 f ) << endl;
return 0;
}
Les fonctions
Premières fonctions : la fonction estPlusGrand
bool estPlusGrand ( f l o a t a , f l o at b)
{
return ( a >= b ) ;
}
i n t main()
{
cout << estPlusGrand(1.0f, 3 .0 f) << endl;
cout << estPlusGrand(5.0f, 3 .0 f) << endl;
cout << estPlusGrand(2.0f, 2 .0 f) << endl;
return 0;
}
Exercice
La fonction factorielle
Formalisation
type retourné nom fo nction ( type1 param1 {E},
type2 param2 {E}, ...) {
...
}
type retourné v a r i a b l e = nom fo nction ( v a r 1 , v a r 2 , . . . ) ;
Passage par valeurs :
Les paramètres sont des paramètres en Entrée { E }
⇒ le paramètre est copié dans l’appel de la fonction
Le seul moyen de donner le résultat au programme principal est la
valeur de retour
Syntaxe
i n t main()
{
i n t a , b;
a = 1;
b = incremente(a);
Passage par r é f é r e n c e s
Formalisation
type retourné nom fon ction ( type1 param1 {E},
type2 param2 {ES}, ...)
type3 param3 {S}, ...) {
...
}
type retourné v a r i a b l e = nom fon ction ( v a r 1 , v a r 2 , v a r 3 , . . . ) ;
Passage par r é f é r e n c e s
Syntaxe
Utilisation de & devant le nom du paramètre
Passage par r é f é r e n c es
Exemple
Qu’affiche le programme ?
bool divisionEuclidienne ( i n t v1, i n t v2, i n t &q, i n t &r) {
bool ok = false;
i f (v2 != 0 ) {
ok = true;
q = v1 / v2;
r = v1 %v2;
} return ok;
}
i n t main()
{
i n t a , b, c , d;
a = 30;
b = 7;
Variables locales/globales
Portée des variables : exemple
i n t a , b; / / variables globales
i n t main()
{
int b, c; / / variables locales a main
a = b + c; / / b et c : locales a main, a : globale
{
long a , c ; / / variables locales au bloc
a = b + c;
}
a = b + c; / / b et c : locales a main, a : globale
c = f(b);
return 0;
}
Variables locales/globales
Remarque
Les paramètres sont locaux `a la fonction
Variables locales/globales
Variables locales/globales
Plan du cours
Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests
Fonctions particulières
Fonctions sans valeur de retour (void)
Une fonction n’est pas obligée d’avoir une valeur de retour
Dans ce cas, le type de retour est indiqué comme void
Exemple :
void afficheHeure ( i n t tempsSecondes){
i n t h, m, s ;
h = tempsSecondes / 3600;
m= ( t empsSecondes % 3600) / 60;
s = tempsSecondes %60;
cout << " I l est " << h << "h, " << m
<< " mins et " << s << "secs" << endl;
}
void incremente ( i n t &n){
n = n + 1;
}
Fonctions particulières
Fonctions particulières
NON ! NON !
Fonctions particulières
double valeurPi(){
double p i = 3.14159265;
return p i ;
}
void afficheBonjour(){
cout << "Bonjour ! " << endl;
}
Fonctions particulières
Fonction main
Exemple
#include <iostream>
using namespace s t d;
i n t main()
{
cout << "Hello world!" << endl;
return 0;
}
Le programme principal est une fonction comme les autres !
Cette fonction renvoie une valeur entière
Convention :
0 si l’exécution du programme s’est déroulée normalement
Un entier différent de 0 en cas d’erreur
⇒ Cet entier est supposé indiquer quel genre d’erreur s’est produite
Fonctions récursives
Fonction qui fait appel à elle-même
i n t divisionEnt ier e( int a , i n t b ) {
i n t r es ult at = 0;
i f (a > b){
r es ult at = divisionEntiere(a -b, b) + 1;
}
return r es ult at ;
}
i n t main()
{
cout << divisionEntiere(15,2) << endl;
return 0;
}
Exercice
Fonction factorielle récursive
Ecrire une fonction qui calcule la factorielle d’un nombre de maniére
récursive
Plan du cours
Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests
Documentation
Documentation d’une fonction (syntaxe javadoc)
Exemple
/** La fonction factorielle
* @param n un nombre entier p o s i t i f
* @return n!
**/
Tests
Test d’une fonction
Pas d’infrastructure standard en C++ pour écrire les tests
Dans ce cours, on utilisera une infrastructure minimale
Fonction ASSERT qui vous sera donnée en TP
Exemple
void factorielleTest() {
ASSERT( factorielle(0 ) == 1 ) ;
ASSERT( factorielle(1 ) == 1 ) ;
ASSERT( factorielle(2) == 2 ) ;
ASSERT( factorielle(3 ) == 6 ) ;
ASSERT( factorielle(4 ) == 24 ) ;
ASSERT( factorielle(7 ) == 5040 ) ;
ASSERT( factorielle(6 ) == 6 * factorielle(5) ) ;
}
Tests
Tests
Est-ce que cette fonction fonctionne dans tous les cas ?
/** La fonction factorielle
* @param n un nombre entier p o s i ti f
* @return n!
**/
i n t f a cto r i elle (int n) {
i n t resultat = 0;
i f (n != 0 ) {
resultat = n * f a cto r i elle ( n - 1 ) ;
}
return resultat;
}
i n t main() {
factorielleTest();
cout << factorielle(14) << endl;
return 0;
}
Tests
i n t main() {
factorielleTest();
cout << factorielle(14) << endl;
return 0;
}