Académique Documents
Professionnel Documents
Culture Documents
1 – Introduction
Nous savons que la construction d’un algorithme, pour résoudre un problème donnée, repose
sur l’écriture d’un certain nombre d’instructions dans un ordre séquentiel et logique.
2 – Notion de sous-algorithme
La notion de sous-algorithme représente toute la puissance du langage algorithmique. En fait,
c’est la possibilité de structurer encore davantage l’algorithme en créant de nouveaux ordres,
définis indépendamment de l’algorithme principal, utilisables dans le corps de l’algorithme.
Cela permet d’avoir un algorithme beaucoup plus petit et bien visible. On distingue deux types
de sous-algorithmes : les fonctions et les procédures.
3 – Notion de fonction
Une fonction est un sous-algorithme (sous-programme en langage de programmation) qui
fournit un résultat à partir des données qu’on lui apporte.
Pour créer une fonction, il faut déclarer l’existence de cette fonction, lui donner un nom
(identificateur), définir son type (c’est-à-dire le type du résultat qu’elle renvoie), décrire le
traitement qu’elle permet de réaliser et, enfin, retourner le résultat qu’elle produit.
Une fonction peut être définie n'importe où, à l'extérieur d'un algorithme. La définition de la
fonction se compose :
de son en-tête qui comprend :
o son identificateur
o la liste de ses paramètres formels et de leur type
1
Cours : Algorithme et Programmation Enseignant : Moutari Mahamane
Syntaxe :
Exemple :
Algorithme Maxquatre1
Variables
a, b, c, d : entier
mab, mcd, maxi : entier
Début
Ecrire("Entrez les 4 nombres :")
lire(a, b, c, d)
si a > b alors
mab ← a
sinon
mab ← b
finsi
si c > d alors
mab ← c
sinon
mab ← d
2
Cours : Algorithme et Programmation Enseignant : Moutari Mahamane
finsi
écrire(maxi)
Fin
Les trois instructions conditionnelles analogues sont remplacées par des appels à une même
fonction qui s'applique à des valeurs différentes. Ceci rend plus compréhensible ce que fait
l'algorithme en évitant de dupliquer des instructions identiques.
Au lieu de répéter le code qui recherche la plus grande entre 2 valeurs, il serait mieux d’écrire
une fonction (appelée maxdeux par exemple) qui prend 2 entiers en paramètres et qui renvoie
le plus grand. Ainsi cette fonction sera appelée à chaque fois qu’on cherche le plus grand entre
2 entiers.
Algorithme Maxquatre2
Variables
a, b, c, d : entier
mab, mcd, maxi : entier
Début
Ecrire("Entrez les 4 nombres :")
lire(a, b, c, d)
mab ← maxdeux(a, b)
mcd ← maxdeux(c, d)
3
Cours : Algorithme et Programmation Enseignant : Moutari Mahamane
mxy y ←
finsi
retourner(mxy)
Fin
La fonction est appelée depuis un algorithme principal, ou depuis une autre fonction (ou
procédure), dans l'instruction où le résultat qu'elle renvoie doit être utilisé.
Syntaxe :
<ident-variable> ←
<ident-fonction>(<ident/valeur-paramètre>, ...,
<ident/valeur-paramètre>)
Exemple :
mab ← maxdeux(a, b)
ecrire('la plus grande valeur est :', maxdeux(mab, mcd))
pg ← maxdeux(15, 11)
4
Cours : Algorithme et Programmation Enseignant : Moutari Mahamane
4 – Notion de procédure
Comme les fonctions, les procédures sont des blocs d'instructions référencés par un nom et
qui répondent à un traitement précis. Cependant elles ont des rôles différents :
Une fonction renvoie une valeur qu'elle a calculée à partir des valeurs reçues en
paramètres. L'appel d'une fonction se fait dans le même contexte qu'une expression au
sein d'une instruction.
Une procédure exécute des instructions qui utilisent des valeurs reçues en paramètres,
mais qui peuvent aussi modifier l'environnement mémoire de l'unité qui l'appelle.
L'appel d'une procédure se fait dans le même contexte qu'une instruction.
Fonction et procédures sont désignées par le nom générique de sous-programmes.
Une procédure peut être définie n'importe où, à l'extérieur d'un algorithme. La définition de
la procédure se compose de :
son en-tête qui comprend :
o son identificateur
o la liste de ses paramètres formels et de leur type et de leur statut
des déclarations locales (constantes ou variables)
les instructions qui réalisent son traitement
Syntaxe :
Exemple :
Supposons que l'on veuille afficher une suite de lignes comme le montre le schéma suivant :
Au lieu de programmer chaque ligne l'une après l’autre, on peut remarquer que chaque ligne
est définie de manière non ambiguë dès que l'on connaît le caractère qui la compose et le
nombre de caractères qu'elle comporte. En tenant compte de cette remarque, on peut définir
5
Cours : Algorithme et Programmation Enseignant : Moutari Mahamane
une procédure dont le travail est d'afficher une ligne connaissant le caractère à afficher, ainsi
que le nombre de caractères.
procédure ligne (nb : entier, car : caractère)
Algorithme dessin Variables locales
Début i : entier
ligne(1, ‘*’) Début
ligne(4, ‘+’) Pour i de 1 à nb faire
ligne(3, ‘#’) écrire(car)
ligne(7, ‘o’) Finpour
Fin écrire(CRLF) /* passage à la ligne */
Fin
Syntaxe :
<ident-procédure>(<ident/valeur-paramètre>, ..., <ident/valeur-
paramètre>)
Exemple :
ligne(1, ‘*’)
4.3. Paramètres
Il doit y avoir une correspondance biunivoque entre les paramètres effectifs et les paramètres
formels. La correspondance est assurée par l'ordre d'écriture dans les deux listes. Il y a 3 types
des paramètres : paramètres d’entrée, paramètres de sortie et paramètres d’entrée-sortie.
Exemple :
Pour classer par ordre croissant trois lettres rangées dans trois variables c1, c2, et c3, on
procède comme suit :
Variables : c1 c2 c3
Valeurs initiales : T Z A
on compare le contenu de c1 et de c2 : dans l'ordre T Z A
on compare et on échange le contenu de c2 et de c3 T A Z
on compare et on échange le contenu de c1 et de c2 A T Z
Les procédures classer et échanger sont susceptibles de modifier les valeurs des variables
passées en paramètres (paramètres d'entrée/sortie).
procédure classer(Entrée/Sortie
a, b : caractère)
Début
Algorithme tri_lettres si a > b alors
échanger(a, b)
Début finsi
Ecrire('Entrez les 3 lettres :') Fin
Fin x ← y
y ← aide
Fin