Vous êtes sur la page 1sur 44

Introduction à l’informatique

Chap 4 : fonctions, documentation et tests

MOUOMEN E

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 1


Cours 4 : fonctions, documentation et tests

Plan du cours

Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 2


Cours 4 : fonctions, documentation et tests Rappels et introduction

Plan du cours

Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 3


Cours 4 : fonctions, documentation et tests Rappels et introduction

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)

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 4


Cours 4 : fonctions, documentation et tests Rappels et introduction

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

Qu’est-ce que qui ne va pas ?


Répétition du code
- Longueurs
- En cas d’erreur ou d’amélioration : modification `a plusieurs endroits !
Manque d’expressivité
- Difficile à lire
- Difficile à mémoriser

Trouvons un moyen de limiter les répétitions et de mieux structurer le code

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 8


Cours 4 : fonctions, documentation et tests Rappels et 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

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 9


Cours 4 : fonctions, documentation et tests Rappels et introduction

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

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 10


Cours 4 : fonctions, documentation et tests Rappels et introduction

Introduction

Exemple de recette : recette paramétrable


Recette de la tarte aux fruits (pommes, poires, ...)
Ingrédients : pâte brisée, fruits
Préparer une pate brisée Étaler
la pâte dans un moule
Peler les fruits, les couper en quartiers et les disposer sur la
pate
Faire cuire 30 minutes dans un four préchauffé à 210◦ C

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 11


Cours 4 : fonctions, documentation et tests Rappels et 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)

Éviter les répétitions


- Partager (factoriser) du code
- Code plus court
- Modification plus facile

Meilleure structuration du code


- Programmes plus concis et expressifs
- Bonne séparation des différentes parties : lecture / calcul / affichage

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 12


Cours 4 : fonctions, documentation et tests Les fonctions

Plan du cours

Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 13


Cours 4 : fonctions, documentation et tests Les fonctions

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

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 14


Cours 4 : fonctions, documentation et tests Les fonctions

Librairie
Documentation de la librairie cmath
http://www.cplusplus.com/reference/cmath/

Décrit les différentes fonctions et


ce qu’elles attendent en entrée
(paramètres) et renvoient en
sortie (résultats)
Exemple : on sait ce que fait cos
On ne sait pas comment elles le
fait
Et on n’a pas besoin de le savoir

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 15


Cours 4 : fonctions, documentation et tests Les fonctions

Librairie

Documentation de la librairie cmath


http://www.cplusplus.com/reference/cmath/
Description de la fonction cos :

On a ici la signature de la fonction :


Type du paramètre ?
Type de la valeur retourn´ee par la fonction ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 16


Cours 4 : fonctions, documentation et tests Les fonctions

Interaction avec le reste du programme

Fonctions
Programme principal
= sous-algorithmes

Paramètres en Entrée : { E }
Passage par valeur

Valeur de retour de la fonction { S }

Paramètres en Entrée/Sortie : { E S }
Passage par référence

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 17


Cours 4 : fonctions, documentation et tests Les fonctions

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
}

Attention : la variable r e s u l t a t doit etre du type type retourné

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 18


Cours 4 : fonctions, documentation et tests Les fonctions

Les fonctions

Syntaxe
type nomFonction ( type1 param1, type2 param2, . . . ) {
declaration_variables;
bl oc_i nst r uct i ons;
return expression;
}

param1, param2, ... sont les paramètres de la fonction


Le type des paramètres est fixé
A`la fin, la fonction renvoie la valeur de expression qui doit ˆetre du
type annoncé

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 19


Cours 4 : fonctions, documentation et tests Les fonctions

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

Que fait la fonction ?


Qu’affiche le programme principal ?
Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 20
Cours 4 : fonctions, documentation et tests Les fonctions

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

Que fait la fonction ?


Qu’affiche le programme principal ?
Peip1/PeipC Introduction à l’informatique Année 2022− 2023 21
Cours 4 : fonctions, documentation et tests Les fonctions

Exercice

La fonction factorielle

Ecrire la fonction qui rend la factorielle d’un nombre

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 22


Cours 4 : fonctions, documentation et tests Les fonctions

Passage par valeurs

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

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 23


Cours 4 : fonctions, documentation et tests Les fonctions

Passage par valeurs

Syntaxe

Si rien n’est précisé c’est un passage par valeur

type nomFonction ( type1 param1, type2 param2, . . . ) {


declaration_variables;
bl oc_i nst r uct i ons;
return expression;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 24


Cours 4 : fonctions, documentation et tests Les fonctions

Passage par valeurs


Exemple
Qu’affiche le programme ?
i n t incremente ( i n t n ) {
n = n + 1;
return n;
}

i n t main()
{
i n t a , b;

a = 1;
b = incremente(a);

cout << a << endl;


cout << b << endl;
return 0;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 25


Cours 4 : fonctions, documentation et tests Les fonctions

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érences :


Certains paramètres peuvent etre `ala fois des paramètres en Entrée et en
Sortie ES
⇒ toute modification du paramètre dans la fonction sera répercutée
`a la variable dans le programme principal
Ces paramètres peuvent etre utilisés comme paramètres en Sortie { S }
⇒ Le paramètre doit etre une variable, et non pas un simple valeur

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 26


Cours 4 : fonctions, documentation et tests Les fonctions

Passage par r é f é r e n c e s

Syntaxe
Utilisation de & devant le nom du paramètre

type nomFonction ( type1 param1, type2 &param2, type3 &param3 . . . ) {


declaration_variables;
bloc_instructions;
return expression;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 27


Cours 4 : fonctions, documentation et tests Les fonctions

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;

cout << divisionEuclidienne(a, b, c , d) << endl;


cout << c << endl;
cout << d << endl;
cout << divisionEuclidienne(a, 0 , c , d) << endl;
cout << c << endl;
cout << d << endl;
return 0;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 28


Cours 4 : fonctions, documentation et tests Les fonctions

Variables locales/globales
Portée des variables : exemple
i n t a , b; / / variables globales

int f( int b){ / / parametre de f (donc l o c a l a f )


int c; / / variable locale a f
return a + b + c ;
}

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

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 29


Cours 4 : fonctions, documentation et tests Les fonctions

Variables locales/globales

Portée des variables


Contexte lexical
- Une variable est visible depuis sa déclaration jusqu’ à la fin du bloc ou`
elle est déclarée
- Variable locale : définie dans un bloc d’instructions ou une fonction
- Variable globale : définie pour tout le programme

Remarque
Les paramètres sont locaux `a la fonction

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 30


Cours 4 : fonctions, documentation et tests Les fonctions

Variables locales/globales

Portée des variables


Attention aux problèmes lexicaux !
La priorité est donnée aux variables locales
Une variable locale masque une variable globale du meme nom (am-
bigu¨ıté)
⇒ Donner des noms différents aux variables pour é v i te r ce
problème

Les variables globales sont accessibles `al’ intérieur de toutes


les fonctions
On peut modifier la valeur d’une variable globale dans une fonction
(effet de bord )
⇒ On évitera cette pratique dans le cadre de ce cours

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 31


Cours 4 : fonctions, documentation et tests Les fonctions

Variables locales/globales

Portée des variables


Attention aux problèmes dynamiques !
Une variable locale `a une fonction n’existe que le temps de
l’exécution de la fonction
La valeur de cette variable est perdue lors du retour au
programme et ne peut pas etre récupérée lors de l’appel
suivant

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 32


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

Plan du cours

Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 33


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

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

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 34


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

Fonctions particulières

Fonction qui effectue un affichage /=


Fonction qui retourne une valeur

i n t carre ( i n t x ) { void afficheCarre ( i n t x ) {


return x * x ; cout << x * x << endl;
} }

Comment utiliser ces fonctions pour afficher le carré de 4 ?

Et pour affecter le carré de 4 `a la variable c ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 35


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

Fonctions particulières

Fonction qui effectue un affichage /=


Fonction qui retourne une valeur
Attention : erreurs`a éviter :

cout << afficheCarre(4) << endl;


i n t afficheCarre ( i n t x ) {
cout << x * x << endl; int c;
} c = afficheCarre(4);
cout << c << endl;

NON ! NON !

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 36


Cours 4 : fonctions, documentation et tests Fonctions particulières

Fonctions particulières

Fonctions sans paramètres


Une fonction n’est pas obligée d’avoir de paramètres : type f()
Exemple :

double valeurPi(){
double p i = 3.14159265;
return p i ;
}

void afficheBonjour(){
cout << "Bonjour ! " << endl;
}

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 37


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

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

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 38


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

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

Attention : Il faut bien faire attention`ala condition d’arret : Que se


passe-t-il si a <= 0 , b == 0 ou b < 0 ?

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 39


Cours 4 : fonctions, documentation et tests Fonctions particuli`eres

Exercice
Fonction factorielle récursive
Ecrire une fonction qui calcule la factorielle d’un nombre de maniére
récursive

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 40


Cours 4 : fonctions, documentation et tests Documentation et tests

Plan du cours

Rappels et introduction
Les fonctions
Fonctions particulières
Documentation et tests

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 41


Cours 4 : fonctions, documentation et tests 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!
**/

Une bonne documentation


) Concise et précise
) Donne les pré-conditions sur les paramètres
) Décrit le résultat
Astuce pour être efficace
Toujours commencer par écrire la documentation !

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 42


Cours 4 : fonctions, documentation et tests Documentation et tests

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

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 43


Cours 4 : fonctions, documentation et tests Documentation et tests

Tests

Astuce pour être efficace


Commencer par écrire les tests d’une fonction !
Tester les cas particuliers
Tant que l’on n’est pas suˆr que la fonction est correcte ;
) Faire des essais supplémentaires
) Capitaliser ces essais sous forme de tests
Si on trouve un bogue :
Ajouter un test caractérisant le bogue

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 44


Cours 4 : fonctions, documentation et tests Documentation et 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;
}

/** Les tests de l a fonction factorielle


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

i n t main() {
factorielleTest();
cout << factorielle(14) << endl;
return 0;
}

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 45


Cours 4 : fonctions, documentation et tests Documentation et tests

Tests

/** 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 = 1;
i f (n != 0 ) {
resultat = n * f a cto r i elle ( n - 1 ) ;
}
return resultat;
}
/** Les tests de l a fonction factorielle
**/
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) ) ;
}

i n t main() {
factorielleTest();
cout << factorielle(14) << endl;
return 0;
}

Peip1/PeipC Introduction à l’informatique Année 2022− 2023 46

Vous aimerez peut-être aussi