Vous êtes sur la page 1sur 96

IN T R O D U C T I O N

À
L 'A L G O R I T H M I Q U E

© F NOUVEAU MEGANCK pour IFCP


INTRODUCTION À L'ALGORITHMIQUE
I- NOTIONS DE BASE
1 - PROGRAMMER, C’EST QUOI ?
L’écriture d’un programme informatique est une tâche exigeante par sa rigueur. Les ordinateurs exigent
perfection et précision dans les instructions qui leurs sont données car ils ne font que ce qu’on leur
demande de faire.
Il ne viendrait à l’idée de personne de rédiger une dissertation sans au préalable construire un plan ; des
idées mêmes bonnes ne suffisent à faire une bonne rédaction, une structure est nécessaire à leur cohésion.
Il en est de même en informatique, faute de méthode nombre de programmes ne fonctionnent jamais ou le
font très mal.
Apprendre à programmer consiste plus à acquérir une démarche d’esprit, une méthodologie, qu’à
connaître les tours et détours d’un langage de programmation.
Connaître un langage de programmation n’est pas savoir programmer, de même qu’apprendre par cœur le
dictionnaire ne signifie pas savoir rédiger un roman.
Programmer, c’est définir précisément le problème à résoudre, décrire peu à peu une solution et après
seulement l’exprimer dans un langage de programmation.
Dans cette démarche, l’activité la plus créative n’est pas le codage, mais l’analyse du problème.
L’algorithme doit être perçue comme un outil favorisant la réflexion, l’analyse d’un problème, tout en
gommant les difficultés inhérentes au langage de programmation.

2 - DÉFINITIONS
A - ALGORITHMIQUE
Science des algorithmes utilisés notamment en informatique. (Petit Larousse). Concrètement cela consiste
en la conception et la rédaction d’algorithmes.
B - ALGORITHME
Le mot vient du nom du mathématicien arabe du 9ème siècle MUHAMMED IBN ALKHAREZIN.
IL en existe beaucoup de définition :
- C’est une succession de calculs numériques (Larousse)
- C’est un ensemble de règles opératoires propres à un calcul (Petit Robert)
- C’est une suite finie d’opérations élémentaires constituant un schéma de calcul ou de résolution
d’un problème (Petit Larousse).
- C’est un procédé spécial de résolution d’un certain type de problèmes (Dictionnaire
mathématique).

Suite d’actions que devra effectuer un automate (ordinateur) pour arriver, en un temps fini, à un résultat
déterminé, que nous définirons par une post-condition, à partir d’une situation donnée, que nous
définirons par une pré-condition. La suite finie d’opérations sera composée d’actions élémentaires, ou
instructions.

Dans les actions de la vie quotidienne, notre cerveau déroule à longueur de journée des algorithmes, qu’il
s’agisse de faire la cuisine ou de changer une roue de voiture.
Les actions ou instructions sont décrites à l’aide de mots respectant des règles syntaxiques et de
présentation qui en facilitent la compréhension. Toutes ses règles définissent la notation algorithmique.

© F NOUVEAU MEGANCK 2
Algorithmique

Exemple
Algorithme relatif au changement d’une roue exprimé en langage naturel.
Début
1 ouvrir le coffre
2 prendre la roue de secours
3 Si la roue de secours est crevée alors
4 Appeler un garagiste
5 Sinon
6 Sortir le cric et la clé à boulons du coffre
7 dévisser légèrement les boulons avec la clé
8 Répéter
9 tourner la manivelle du cric
10 Jusqu’à ce que la roue crevée ne touche plus le sol
11 Dévisser complètement les boulons
12 retirer complètement la roue endommagée
13 Répéter
14 tourner la manivelle du cric
15 jusqu’à ce que la roue de secours puisse être placée
16 monter la roue de secours
17 visser les boulons
18 abaisser le véhicule avec le cric
19 Visser fortement les boulons
20 Ranger le cric, la clé et la roue crevée.
21 fin si
22 Fermer le coffre
Fin
Cet exemple nous permet de constater :
- Que l’ordre des opérations est important, il n’est guère possible d’intervertir les actions 6 et 7.
- Qu’une ou plusieurs opérations peuvent être dépendantes de conditions (Si…alors) ou bien
répétées (répéter … jusqu’à)
Les structures de bases d’un algorithme sont :
- La structure séquentielle (ensemble d’opérations à la suite les unes des autres)
- La structure conditionnelle (ensemble d’opérations soumises à une condition)
- La structure répétitive (ensemble d’opérations répétées un nombre fini de fois).
Ces trois structures constituent les briques de base de tout algorithme et permettent de résoudre n’importe
quel problème, qu’il s’agisse de la simple addition de 2 nombres ou de pilotage d’un module lunaire.
Elles permettent de décrire de façon statique le comportement dynamique d’un flot d’actions qui se
déroulent.
C - PROGRAMMATION
La programmation consiste à coder dans un langage de programmation un algorithme en respectant
scrupuleusement la syntaxe du langage choisi. Le programme ainsi obtenu est constitué ‘un ensemble
d’instructions capables d’êtres exécutées par le processeur central de l’ordinateur.
D - INSTRUCTION
L’instruction, nommée aussi primitive, est un mot reconnu et interprété par un ordinateur capable
d’effectuer une action élémentaire.

3 © FNM
Algorithmique

E - ORDINATEUR
Dans une communication qui fera date, publiée en 1945, le mathématicien hongrois John Von Neumann,
décrit les 5 composant clefs de ce qui allait devenir "l’architecture de Neumann" de l’ordinateur moderne.
Pour être efficace et polyvalent, écrit-il, un calculateur doit posséder une unité arithmétique et logique
(U.A.L.), une unité centrale de commande pour orchestrer les traitements, une mémoire, une unité
d’entrée et une unité de sortie. Il fait également remarquer qu’un tel système doit avoir recours à la
numération binaire, fonctionner électriquement et accomplir les tâches une à une.

Organes
d’entrées Mémoire centrale
Programme Données
Lire A
Lire B
CÅA+B Organes
Ecrire C de sortie

Unité de
U.A.L.
commande

Devenus des évidences aujourd’hui parce qu’ils ont été largement appliqués depuis Neumann, ces
principes guideront la conception des premiers ordinateurs et restent d’actualité.

Principe de fonctionnement
La mémoire est le lieu de stockage des instructions et des données.
Les organes de commandes, tel le chef d’orchestre, déroulent la partition que constitue le programme. En
fonction des instructions, il commande les différents membres de l’orchestre que sont l’U.A.L., la
mémoire centrale, les organes d’entrée ou de sortie.
F - LANGAGE DE PROGRAMMATION
Un langage de programmation est un langage compréhensible par l’ordinateur. L’ordinateur ne
comprenant que le binaire, il existe un programme de traduction compilateur ou interpréteur, qui code
en langage machine (code binaire) ce que le programmeur a écrit.

Il existe des centaines de langages de programmation. On peut distinguer les langages proches du
processeur (assembleur…) et les langages de haut niveau (L3G et L4G)
On a l’habitude de diviser ces derniers en 3 grandes classes :
- langage de gestion (COBOL, GAP…)
- langage scientifiques (FORTRAN, ALGOL,…)
- langages génaux (PASCAL, APL, BASIC, C,…)
Mais il se développe aussi, et de plus en plus, des langages spécifiques dans des domaines très divers :
- intelligence artificielle et systèmes experts (GPS, SIMULA…)
- applications graphiques (EUCLID, GRAPH,…)
- interrogation de nases de données (Langage SQL, SOCRATE,…)

3 - PROGRAMMATION MODULAIRE
La rédaction d’un programme suit une démarche progressive, que l’on résume aux phases suivantes :
- Phase de spécification : description exacte du problème à résoudre
- Phase de conception : analyse structurée du problème et recherche d’une solution

© FNM 4
Algorithmique

- Phase de codage : écriture du programme dans un langage de programmation


- Phase de correction : test et mise au point du programme
- Phase de maintenance : mise à jour du programme.
A - PHASE DE SPÉCIFICATION
La définition exacte des tâches à résoudre est en général une étape tellement évidente que bien des
programmeurs la négligent ; cela a pour effet de prendre en compte des hypothèses implicites qui sont
celles de l’informaticien et non celles de l’utilisateur. Pour éviter ces hypothèses implicites il est
important de préciser les spécifications suivantes :

Spécifications de sorties Quels résultats doit-on obtenir ? Selon quel format ? etc.
Spécifications d’entrée Quelles valeurs doivent être introduites ? Comment ?
Avec quelles contraintes (type, valeur, etc.) ? Quelle réaction faut-il
prévoir en cas d’erreur ? Etc.
Spécifications de traitement Quel traitement faut-il effectuer ? Quelles sont les règles de gestion à
respecter ? existe t il des cas particuliers ? Comment doivent-il être
traité ? etc.

Définir exactement le rôle d’un programme est certes une étape nécessaire mais non suffisante. Une phase
permettant l’analyse du problème et la recherche de la meilleure solution est indispensable avant le
codage à l’aide d’un langage de programmation.
B - PHASE DE CONCEPTION
S’il est très facile de rédiger un programme de résolution d’équation du premier degré, il s’avère bien plus
délicat de concevoir un logiciel de gestion de production, la différence se situant sur le plan de la
complexité. Le premier est tellement simple qu’il peut être écrit directement, tandis que le second ne peut
être appréhendé dans sont entier par quiconque.
Descartes dans son « discours de la méthode » propose de décomposer tout problème en plusieurs
problèmes plus petits. Ceux-ci peuvent à leur tour être décomposé jusqu’à aboutir à un ensemble ordonné
de problème élémentaires pour lesquels la solution est connue.
On schématise ce principe par des rectangles imbriqués.
P
P1 P2

P2.1 P2.2
P1.1 P1.2 P1.3
P2.2.1 P2.2.2 P2.2.3

Ou par une arborescence (arbre de programmation)


P

P1 P2

P1.1 P1.2 P1.3 P2.1 P2.2

P2.2.1 P2.2.2 P2.2.3

5 © FNM
Algorithmique

Les propos de Descartes illustrent parfaitement le concept de programmation structurée ou modulaire, qui
s’appuie sur une analyse descendante ou "top down" du problème à traiter.

La programmation structurée énonce un ensemble de règles destinées à faciliter le développement de


toutes application informatique :

ÆLe développement d’un algorithme doit être effectué indépendamment de tout langage de
programmation.
Le programmeur utilisera la notation algorithmique qu’il juge la plus adaptée au type de problème à
résoudre ou qui fait l’objet d’un consensus dans l’organisation à laquelle il participe, même si certains
éléments de la notation n’existent pas dans le langage de programmation retenu. Cette notation
algorithmique utilise un pseudo code appelé LDA (Langage de développement algorithmique) ou LCS
(Langage de conception structuré).

ÆLe programme doit être construit par niveaux successifs


L’analyse est effectuée par niveaux successifs. Le développement va du général au particulier, du plus
global au plus élémentaire. Chaque étape détaille un peu plus l’analyse réalisée au niveau précédent. Les
détails sont renvoyés aux niveaux inférieurs. Parallèlement à ce principe de décomposition, il est utile
d’essayer de reconnaître dans un problème des éléments permettant de ramener à un problème connu, en
faisant pour cela abstraction des détails pour s’en tenir à l’essentiel.
C - PHASE DE CODAGE
Le codage doit généralement être une simple transcription de l’algorithme en un langage de
programmation. La principale difficulté réside dans les aptitudes inégales des langages de programmation
à intégrer tous les concepts de base de la programmation structurée. Certaines structures de base
inexistante donnent lieu à des adaptations toujours délicates. Il faut donc déterminer dans chaque langage
étudié comment représenter les différentes structures de contrôles.
D - PHASE DE CORRECTION
La recherche des erreurs est une tâche prenant, souvent ingrate, car un programme fonctionne rarement
dès sa première exécution. Elle peut représenter une part très importante du temps de développement
d’une application.
On distingue trois grandes catégories d’erreurs :
- les erreurs de syntaxe dues à une mauvaise connaissance du langage utilisé ou plus simplement à
des fautes d’inattention. Elles sont détectées lors de la phase traduction (compilation ou
interprétation) et sont faciles à corriger.
- Les erreurs d’exécution entraînent un comportement anormal du programme dans certains cas
particuliers. Elles proviennent généralement d’un défaut de conception. Leur détection nécessite
l’emploi d’un jeu d’essai exhaustif.
- Les erreurs de logique ont pour origine une mauvaise transcription du programme ou plus
généralement un mauvais algorithme. La programmation structurée vise à éliminer ce type
d’erreur et permet ainsi un gain de temps non négligeable.
E - PHASE DE MAINTENANCE
Maintenir un programme consiste à le mettre à jour lors de l’apparition de nouveaux besoins. On estime
que les services informatiques peuvent consacrer jusqu’à 10% de leurs temps à la maintenance des
applications existantes.
La programmation modulaire favorise une maintenance aisée : pour modifier une partie d’un programme,
il suffit de transformer le module concerné, sans avoir à changer le structure de l’algorithme.

© FNM 6
Algorithmique

L’ensemble de ces phases, spécification, conception, codage, correction et maintenance, ne sont pas aussi
successives qu’il y paraît et interagissent entre elles. Leur mise au point peut amener à l’élaboration d’une
nouvelle solution qui devra être analysée et codée (méthode de conception en spirale).

II - REPRÉSENTATION EN LANGAGE STRUCTURÉ


Le Contenue de la représentation en langage structuré sera développer dans la suite. Nous ne donnons ici
qu’un exemple de représentation par rapport a l’exemple ci-dessus.

ALGO Calcul
Pré conditions : {}
Post conditions : {affiche la somme de deux chiffres et boucle}
VAR :
A, B, Res : Entier
Rep : booléen
Début
Rep Å vrai
Tant que Rep
Saisir("Saisir le premier chiffre", A)
Saisir("Saisir le deuxième chiffre", B)
Res Å A + B
Afficher (Res)
Saisir ("Encore un calcul ?", Rep)
Fin tant que
FIN

III - LES COMPOSANTS ÉLÉMENTAIRES DES


ALGORITHMES
1 - STRUCTURE D’UN ALGORITHME ELEMENTAIRE
Algo Nom de l’algo
Pré conditions :{}
Post conditions :{}
Const :
Liste des constantes
Var :
Liste des variables
Début
Instructions
Fin

Pré condition : contient l’ensemble des conditions de départ pour que l’algorithme se déroule
normalement

Post condition : conditions final de l’exécution de l’algorithme.

Const : Liste des constantes

Var : Liste des variables utilisées dans l’algorithme

7 © FNM
Algorithmique

2 - LA NOTION DE VARIABLE
Dans un problème d’adition de deux nombres, 4 objets apparaissent :
A, B, res et rep.
Chacun de ses objets est une variable. Le rôle de chacune de ces variables consiste à retenir une valeur
particulière, significative de l’état du problème dont l’algorithme décrit le comportement.
La valeur retenue par un objet n’est pas forcement la même à tout moment : c’est la seule justification du
vocable employé pour désigner ces objets, le mot variable.
La valeur relative à une variable est stockée en mémoire centrale dans un ou plusieurs mots (ensemble
d’octets). Chaque variable se trouve donc à une adresse particulière de la mémoire.
A - CARACTÉRISTIQUES D’UNE VARIABLE
Une variable se caractérise par :
- un rôle. C’est la signification qu’on a attribuée à la variable.
- Un identificateur : il permet d’accéder directement à son contenu sans avoir à utiliser la notion
d’adresse. Il doit être le plus explicite possible.
- Un type : c’est la définition du domaine dans le quel une variable peut puiser sa valeur. Le type de
variable détermine les opérations que l’on peut lui appliquer.
- Une valeur : c’est le « contenu » de la variable à un moment donné. Une variable ne possède
qu’une valeur à un moment donné. Une variable dont la valeur n’évolue jamais est appelée
constante
B - LES TYPES ÉLÉMENTAIRES DE VARIABLES
a) ENTIER
Un objet de ce type peut prendre une valeur entière comprise généralement entre -32 768 et
32 767
b) REEL
Un objet de ce type peut prendre une valeur décimale dont la valeur absolue est dans l’intervalle
[5.3976e-79, 7.2370e+75]
c) CARACTERE
Il y a 128 caractères (voir code ASCII)
Attention : le symbole 1 correspond à la valeur entière "un", alors que ‘1’ correspond au
caractère 1. Certains caractères (de 0 à 19) ne peuvent être imprimés.
d) CHAINE
Tout objet pouvant prendre comme valeur une suite ou une chaîne de caractères est de ce type.
La suite peut être vide ("")
e) BOOLEEN
Un objet de type BOOLEEN prend sa valeur dans l'ensemble {VRAI, FAUX}
C - DÉCLARATIONS DE VARIABLES
La plupart des langages de programmation obligent à déclarer au début tous les objets qui seront utilisés
par la suite, en indiquant leur type. Nous adoptons cette règle lors de l écriture des algorithmes.
- Tous les objets sont décrits en tête de l’algorithme
- En même temps que l’objet on déclare son type, ce qui évite toute ambiguïté sur son utilisation.
Celles-ci servent à indiquer à l'ordinateur les identificateurs de variables utilisés dans la procédure, ainsi
que leur type

© FNM 8
Algorithmique

La déclaration de variable est faite au début de l'algorithme après le mot réservé Var.
Nom variable : type

Le nom de variable doit commencer par une lettre et ne contenir que des lettre des chiffre et le symbole _

)Remarque importante
Toute variable utilisée dans un algorithme doit être déclarée au début de l'algorithme, une fois et une
seule.

3 - LA NOTION DE CONSTANTE
La constante permet de paramétrer le programme.
Exemple
Un taux de TVA, un coef.

La déclaration de constante est faite au début de l'algorithme après le mot réservé Const
Nom variable Åvaleur

4 - OPÉRATEURS ET EXPRESSIONS
A - OPÉRATEURS DE CONCATÉNATION
Il relie des caractères ou des chaînes de caractères pour constituer une nouvelle chaîne de caractère. On
utilise essentiellement le caractère "&".
Exemple :
"A" & "B" donne "AB"
B - OPÉRATEURS ET EXPRESSIONS ARITHMÉTIQUES
Opération Opérateur Priorité Exemple
Addition + 1 A+b
Soustraction - 1 a-b
Multiplication * 2 A*b
Division / 2 a/b
Division entière Div 1 A Div b
Reste de la division entière (Modulo) Mod 1 A Mod b
Les opérateurs arithmétiques associés aux variables de type entier ou réel, permettent la construction
d'expressions arithmétiques.
La priorité d'un opérateur conditionne l'ordre d'interprétation de celui-ci dans l'expression arithmétique.
Plus la priorité est élevée, plu tôt l'opérateur sera interprété.
Exemple
11+2*8 sera égale à 27
Les parenthèses peuvent être utilisées pour pré déterminer l'ordre d'interprétation des opérateurs.
Exemple
(11+2)* 8 sera égale à 104

9 © FNM
Algorithmique

C - OPÉRATEURS RELATIONNELS
Opérateurs Signification
= Egal
<> ou != Différent de
< Inférieur
> Supérieur
>= Inférieur ou égal
<= Supérieur ou égal
Les opérateurs relationnels s'appliquent essentiellement aux objets de type entier, réel, caractère. Ainsi il
est possible des données de même type entre elles pour savoir si elle sont égales, plus grandes ou plus
petite.
D - OPÉRATEURS ET EXPRESSIONS LOGIQUES
Ils relient des expressions logiques ou des identificateurs. On en utilise essentiellement quatre, qui sont
par ordre de priorité croissante :
La première opération que nous pouvons introduire sur ces variables est la négation :
a) NÉGATION (NON)
A Non A
Vrai Faux
Faux vrai

Notons que (A = faux) est toujours équivalent à non A, donc


(A = faux) = (non A)
Et de même
(A = vrai)=A.
Remarquons aussi que (non non A) = A
b) INTERSECTION (ET)
ET VRAI FAUX
VRAI VRAI FAUX
FAUX FAUX FAUX
c) UNION (OU)
OU VRAI FAUX
VRAI VRAI VRAI
FAUX VRAI FAUX

IV - LES INSTRUCTIONS DE BASE


1 - L'AFFECTATION
Cette instruction élémentaire permet de valoriser une variable.
Nom variable Å Valeur

Après exécution la variable contient la valeur.

© FNM 10
Algorithmique

L'affectation d'une constante L'affectation de la valeur d'une variable


AÅ11 CÅB

Avant ? Avant 8 11
A C B
Après 11 (11) Après 11 11
C B

L'affectation De la valeur d'une expression


AÅA+ 2 CÅB + 2

Avant 8 Avant 10 9
A C B
Après 11 +2 Après 11 +2 9
C B

L'affectation De la valeur d'une expression


BoolÅA>B

Avant ? 11 8
Bool A
B
Après Vrai 11 8
>
Bool A B

Remarques
- l'affectation remplace la valeur précédente de la variable par la nouvelle
- La valeur de l'objet à droite du signe Å n'est pas touchée par l'affectation
- Le signe Å symbolise l'affectation. (certains auteurs et langages utilisent :=)
- Ne pas confondre le symbole d'affectation avec le symbole mathématique = utilisé pour la
comparaison.

Exemples d'algorithmes complets :


Algo Quadrilatère
Pré conditions {}
Post condition : {calcul le périmètre et la surface d'un quadrilatère}
VAR
Long, larg, perim, surf : reels
Début
Long Å 28
Larg Å 24
Surf Å long * larg
Perim Å (long +larg) *2
Fin

Algorithme permettant de permuter deux nombres. Une variable intermédiaire est nécessaire car
l'instruction aÅb détruit le contenu de la variable a

11 © FNM
Algorithmique

Algo Permut
Pré conditions {}
Post condition : {les deux variables ont permuté leurs valeurs}
VAR
A, B, Perm : entier
Début
AÅ 8
BÅ11
PermÅA
AÅB
BÅPerm
Fin

2 - INSTRUCTIONS D'ENTRÉE SORTIE


Leurs rôles est d'assurer la prise e compte d'informations et la restitution d'information. Ces instructions
mettent en œuvre les organes d'entrée-sortie de l'ordinateur (clavier, écran imprimantes,…).
A - LA LECTURE DES DONNÉES
Cette action permet la saisie des objets à partir du clavier. Ainsi l'utilisateur communique à l'ordinateur
les valeurs des objets.
Saisir ("Texte d'invite", Variable)
Exemple :
Saisir ("saisir votre nom", nom)
Lorsque l'ordinateur, après traduction de l'algorithme en un langage de programmation quelconque,
rencontre cette instruction, il s'arrête et attend que l'utilisateur donne une valeur à nom dans notre
exemple.
Algorithme de base du fonctionnement de l'instruction saisir :
- A la rencontre d'une instruction "saisir, le programme est interrompu.
- La chaîne de caractère est éventuellement affichée, pour guider l'utilisateur
- Un curseur est affiché immédiatement après la chaîne (point clignotant)
- L'utilisateur entre au clavier la donnée
- La saisie est terminée par la touche Envoi (Entrée)
- La valeur saisie est affectée à l'objet
- Le déroulement du programme continue à l'instruction suivante.
Conseil : affichez toujours un message permettant de guider l'utilisateur testez la qualité de l'information
saisie immédiatement après la saisie.
ALGORITHMES COMPLETS :
Algo Quadrilatère
Pré conditions {}
Post condition : {calcul le périmètre et la surface d'un quadrilatère}
VAR
Long, larg, perim, surf : reels
Début
Saisir ("Veuillez indiquer la longueur", Long)
Saisir ("Veuillez indiquer la Largeur", Largeur)
Surf Å long * larg
Perim Å (long +larg) *2
Fin

© FNM 12
Algorithmique

Algo Permut
Pré conditions {}
Post condition : {les deux variables ont permuté leurs valeurs}
VAR
A, B, Perm : entier
Début
Saisir ("Veuillez indiquer le premier nombre ", A)
Saisir ("Veuillez indiquer le deuxième nombre ", B)
PermÅA
AÅB
BÅPerm
Fin
B - LA SORTIE DE DONNÉES
En l'absence d'instructions de sortie dans un algorithme, les résultats ne sont pas fournis à l'utilisateur.
a) L'AFFICHAGE DES DONNÉES
Cette action permet l'affichage d'information à l'écran.
Afficher ("expression" | variable)
Cette instruction est le symétrique de Saisir. Elle affiche à l'écran les données.
Algorithmes complets :

Algo Quadrilatère
Pré conditions {}
Post condition : {calcul le périmètre et la surface d'un quadrilatère}
VAR
Long, larg, perim, surf : reels
Début
Saisir ("Veuillez indiquer la longueur", Long)
Saisir ("Veuillez indiquer la Largeur", Largeur)
Surf Å long * larg
Perim Å (long +larg) *2
Afficher ("Le périmètre du quadrilatère est :", Perim, "sa surface est de " Surf)
Fin

Algo Permut
Pré conditions {}
Post condition : {les deux variables ont permuté leurs valeurs}
VAR
A, B, Perm : entier
Début
Saisir ("Veuillez indiquer le premier nombre ", A)
Saisir ("Veuillez indiquer le deuxième nombre ", B)
PermÅA
AÅB
BÅPerm
Afficher ("la valeur de A :", A, "la valeur de B", B)
Fin
b) L'IMPRESSION DES DONNÉES
Cette action permet d'imprimer des informations en utilisant une imprimante.

13 © FNM
Algorithmique

Imprimer (" message" | variable)

Cette instruction est le symétrique de Saisir. Elle met en œuvre l'imprimante pour produire les résultats.
ALGORITHMES COMPLETS :
Algo Quadrilatère
Pré conditions {}
Post condition : {calcul le périmètre et la surface d'un quadrilatère}
VAR
Long, larg, perim, surf : reels
Début
Saisir ("Veuillez indiquer la longueur", Long)
Saisir ("Veuillez indiquer la Largeur", Largeur)
Surf Å long * larg
Perim Å (long +larg) *2
Imprimer ("Le périmètre du quadrilatère est :", Perim, "sa surface est de " Surf)
Fin
Algo Permut
Pré conditions {}
Post condition : {les deux variables ont permuté leurs valeurs}
VAR
A, B, Perm : entier
Début
Saisir ("Veuillez indiquer le premier nombre ", A)
Saisir ("Veuillez indiquer le deuxième nombre ", B)
PermÅA
AÅB
BÅPerm
Imprimer ("la valeur de A :", A, "la valeur de B", B)
Fin

3 - LA STRUCTURE CONDITIONNELLE
A - LA STRUCTURE ALTERNATIVE
La structure alternative permet d'exécuter, à un instant donné une action, ou une autre action,
exclusivement l'une ou l'autre. Il s'agit donc de deux actions conditionnées par des prédicats
complémentaires.
SI expression logique ALORS
Action si test VRAI
SINON
Action si test FAUX
FIN SI
Remarque : la clause sinon qui introduit le deuxième terme de l'alternative sert de délimiteur au premier
terme. Cette action permet d'effectuer un traitement de façon conditionnelle.
On a donc une deuxième structures possible : Structure alternative appauvrie :
SI expression logique ALORS
Action si test VRAI
FIN SI

Exemples
Afficher le plus grand des deux nombres :

© FNM 14
Algorithmique

Algo PlusGrand
Pré conditions {}
Post condition : {Affiche le plus grand de deux nombres}
VAR
A, B : entier
Début
Saisir ("Veuillez indiquer le premier nombre ", A)
Saisir ("Veuillez indiquer le deuxième nombre ", B)
SI A>=b ALORS
Afficher (a)
SINON
Afficher (b)
FIN SI
Fin

Remarque : que se passe-t-il lorsque A=b ? Dans ce cas seul la variable "a" est affichée. Ce cas n'a pas été
explicitement prévu dans l'algorithme.
Pour traiter ce cas on a :
Algo PlusGrand
Pré conditions {}
Post condition : {Affiche le plus grand de deux nombres}
VAR
A, B : entier
Début
Saisir ("Veuillez indiquer le premier nombre ", A)
Saisir ("Veuillez indiquer le deuxième nombre ", B)
SI A>=b ALORS
Afficher (a)
SINON
SI a= b ALORS
Afficher ("Les nombres ", a, " et ", b, "sont égaux")
SINON
Afficher (b)
FIN SI
FIN SI
Fin
Ceci est une alternative imbriquée! On peut imbriquer autant d'alternatives que l'on souhaite.
Remarque : Pour une meilleure compréhension de l'algorithme on implémente à chaque alternative.

Exemple :
Attribution de la mention à un élève en fonction de sa moyenne générale :
Algo Mention
Pré conditions {}
Post condition : {Affiche la mention}
VAR
Nomelve, mention : chaîne
Moyenne : réel
Début
Saisir ("Veuillez indiquer le nom de élève :", Nomelve)
Saisir ("Veuillez indiquer la moyenne de l'élève :", Moyenne)

15 © FNM
Algorithmique

SI Moyenne<0 ALORS
Afficher ("La moyenne n'est pas comprise entre 0 et 20 ")
SINON
SI Moyenne<= 8 ALORS
Mention Å"Passable"
SINON
SI Moyenne<=12 ALORS
Mention Å"Assez bien"
SINON
SI Moyenne <=15 ALORS
Mention Å"Bien"
SINON
Mention Å "Très bien"
FIN SI
FIN SI
FIN SI
Afficher ("L'élève ", Nomelve, "obtient la mention : ", Mention)
FIN SI
Fin

Pour une meilleur lecture des algorithme on peut considérer dans le cas de D'alternatives imbriquées qu'il
existe une structure plus simple :
SI expression logique ALORS
Action si expression logique VRAI
SINONSI expression logique1ALORS
Action si expression logique FAUX et expression logique 1 VRAI
SINON
Action si expression logique FAUX et expression logique1 FAUX
FIN SI
Exemple :
Algo Mention
Pré conditions {}
Post condition : {Affiche la mention}
VAR
Nomelve, mention : chaîne
Moyenne : réel
Début
Saisir ("Veuillez indiquer le nom de élève :", Nomelve)
Saisir ("Veuillez indiquer la moyenne de l'élève :", Moyenne)
SI Moyenne<0 ALORS
Afficher ("La moyenne n'est pas comprise entre 0 et 20 ")
SINON
SI Moyenne<= 8 ALORS
Mention Å"Passable"
SINONSI Moyenne<=12 ALORS
Mention Å"Assez bien"
SINONSI Moyenne <=15 ALORS
Mention Å"Bien"
SINON
Mention Å "Très bien"

© FNM 16
Algorithmique

FIN SI
Afficher ("L'élève ", Nomelve, "obtient la mention : ", Mention)
FIN SI
Fin
B - LA STRUCTURE DE CHOIX
La sélection ou choix multiple permet de présenter une solution à des problèmes où un nombre important
de cas, mutuellement exclusifs, sont à envisager en fonction des valeurs prises par une seule variable ou
expression. Puisque chaque action est exclusive des autres, la structure correspond à une imbrication
d'alternatives.

Selon expression
Cas expression1 : instructions
Cas expression2 : instructions

Cas expressionN : instructions
Cas sinon : instructions
Fin selon

Exemple :
Algo Mention
Pré conditions {}
Post condition : {Affiche la mention}
VAR
Nomelve, mention : chaîne
Moyenne : réel
Début
Saisir ("Veuillez indiquer le nom de élève :", Nomelve)
Saisir ("Veuillez indiquer la moyenne de l'élève :", Moyenne)
SELON Moyenne
CAS >=0 et <= 8 : Mention Å"Passable"
CAS >8 et <=12 : Mention Å"Assez bien"
CAS >12 et <=15 : Mention Å"Bien"
CAS >15 et <=20: Mention Å "Très bien"
CAS SINON
Afficher ("La moyenne générale n'est pas comprise en 0 et 20 ")
FIN SELON
Afficher ("L'élève ", Nomelve, "obtient la mention : ", Mention)
Fin

L'algorithme ainsi obtenu est bien plus lisible et plus compact quant au nombre de lignes nécessaires.
Remarque : Beaucoup de langages de programmation n'admettent pas que les cas comportes des
expressions avec opérateurs de comparaisons et opérateurs logiques. Il est préférable de ne pas les utiliser
dans vos algorithmes.

4 - LA STRUCTURE RÉPÉTITIVE
Cette action permet de répéter un ensemble d'instructions jusqu'à ce qu'une condition soit réalisée. Il
existe plusieurs formes de structures répétitives.

17 © FNM
Algorithmique

A - LA STRUCTURE RÉPÉTITIVE TANT QUE … FIN TANT QUE


Tant que Expression logique faire
Instructions
Fin tant que

On teste d'abord si l'expression logique est vraie. Dans ce cas on exécute les instructions puis on boucle
de nouveau sur le test de expression logique.
Par contre si expression logique est fausse la boucle se termine et le programme poursuit son exécution
après "fin tant que".
Remarques:
- Le test est effectué avant l'exécution du bloc, il est donc possible de n'avoir aucune exécution du
bloc d'instructions.
- Comme il est conseillé de ne pas boucler indéfiniment, une instruction au moins du bloc
d'instructions doit agir sur l'expression logique pour la rendre fausse.
- Le bloc d'instructions peut contenir des structures alternatives et des structures répétitives
imbriquées.

Exemple
Multiplication de 2 entiers positifs en n'utilisant que l'addition.
ProdÅ A * B Ù Prod Å A+A+A+…+A

L'addition est effectuée B fois.

La valeur de la variable B est stockée dans une variable décrémentée à chaque boucle. Boucle dans
laquelle on additionne la valeur de A à la valeur précédente de produit (produit est initialisé à 0).

Exemple :
Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
Prod, A, B, Cpt : entier
Début
Prod Å 0
Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
CptÅB
TANT QUE Cpt<>0 FAIRE
Prod Å Prod + A
Cpt Å Cpt – 1
FIN TANT QUE
Afficher (A, "*", B, "=", Prod)
Fin
La valeur de B est conservée car on a besoin pour l'affichage.
Que se passe-t-il si malgré le message, l'utilisateur introduit un ou deux nombres négatifs ?
Tester l'algorithme pour :
- A<0 et B<0 :
- A>0 et B<0
- A<0 et B>0

© FNM 18
Algorithmique

Vous constatez que dans le cas où B<0 on ne sport plus de la boucle ! On dit alors que l'algorithme
BOUCLE !

Il faut donc "protéger l'utilisateur en bouclant sur les instructions de saisie des données tant qu'elles ne
sont pas positives :

Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
Prod, A, B, Cpt : entier
Début
Prod Å 0
Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
TANT QUE (A<0) FAIRE
Saisir ("Veuillez indiquer le premier nombre :", A)
FIN TANT QUE
Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
TANT QUE (B<0) FAIRE
Saisir ("Veuillez indiquer le deuxième nombre :", B)
FIN TANT QUE
CptÅB
TANT QUE Cpt<>0 FAIRE
Prod Å Prod + A
Cpt Å Cpt – 1
FIN TANT QUE e
Afficher (A, "*", B, "=", Prod)
Fin

Cet exemple très simple montre bien les 3 points à vérifier lors de l'utilisation d'une structure répétitive :
- L'initialisation des variables qui interviennent dans l'expression logique.
- L'établissement d'une expression logique correcte, c'est-à-dire provoquant à un moment donné un
arrêt du traitement.
- Les précautions à prendre en cas d'intervention sur les variables utilisées dans l'expression
logique.
B - LA STRUCTURE RÉPÉTITIVE RÉPÉTER… JUSQU'À
Répéter
Instructions
Jusqu'à (expression logique)

Le déroulement est le suivant :


- Le bloc instructions est exécuté
- L'expression logique est testée
- Dans le cas où elle est égale à VRAI, le programme poursuit son exécution après l'instruction
jusqu'à.
Dans le cas où elle est égale à FAUX, on recommence au premier point.
Remarque
- Avec cette forme de structure répétitive, le bloc d'instructions est exécuté au moins une fois! Cela
peut être source d'erreurs dans certains cas.

19 © FNM
Algorithmique

- La condition exprimée par l'expression logique est l'expression contraire de celle exprimée dans
la structure répétitive de type "tant que".
Exemple :
Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
Prod, A, B, Cpt : entier
Début
Prod Å 0
Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
CptÅB
REPETER
Prod Å Prod + A
Cpt Å Cpt – 1
JUSQU'A (cpt =0)
Afficher (A, "*", B, "=", Prod)
Fin
Mais sans le cas ou B <=0 l'algorithme boucle car les instructions comprises dans la boucle sont exécutée
au moins une fois ! D'où la nécessité de forcer l'utilisateur à introduire deux valeurs strictement positives !
La structure Répéter … jusqu'à permet d'ailleurs de gérer plus facilement le contrôle sur les données à
saisir puisqu'un seul message suffit.
Elle est utilisée très souvent pour contrôler des données saisies.
Exemple :
Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
Prod, A, B, Cpt : entier
Début
Prod Å 0
Répéter
Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
Jusqu'à (A>0)
REPETER
Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
Jusqu'à (B>0)
CptÅB
Répéter
Prod Å Prod + A
Cpt Å Cpt – 1
JUSQU'A (CPT =0)
Afficher (A, "*", B, "=", Prod)
Fin

© FNM 20
Algorithmique

C - LA STRUCTURE RÉPÉTITIVE POUR … FIN POUR


Cette structure permet de répéter l'exécution d'une ou plusieurs instructions un nombre de fois déterminé.
Le nombre des répétitions est connu ou déterminable avant la première exécution de l'action concernée.
L'exécution est conditionnée par l'observation d'un variable de test, appelée indice de boucle ou
compteur, qui est initialisée puis incrémentée ou décrémentée de façon implicite, après chaque passage
dans la boucle. La condition porte uniquement sur le nombre de répétition.

Pour indice de expression_début à expression_fin pas de expression_pas


Instructions
Fin pour

Indice est une variable de type entier


Expression_début, expression_fin, expression_pas sont des expressions numériques de type entier.

La sémantique est la suivante :


- indice est une variable assimilée à un compteur qui est automatiquement augmenté ou diminué en
fonction de expression_pas.
- Au début indice prend la valeur de expression_début
- Le bloc d'instruction est exécuté.
- Puis on revient à l'expression du pour, l'indice est incrémenté ou décrémenté en fonction du pas
dont la valeur par défaut est 1.
- La valeur de indice est testée : si elle est égale à expression_fin les instructions du bloc seront
exécuté pour la dernière fois.
Exemple :
Affichage de la table de multiplication de 10
Algo table_Multiplication_10
Pré conditions {}
Post condition : {Affiche la table de multiplication de 10}
VAR
i : entier
Début
Afficher ("Table de multiplication de 10")
POUR i DE 1 A 10
Afficher ("10 * ", i,"=", 10*i)
FIN POUR
Fin
Le pas est implicitement de 1
Cet algorithme peut aussi s'écrire avec une boucle tant que :
Affichage de la table de multiplication de 10
Algo table_Multiplication_10
Pré conditions {}
Post condition : {Affiche la table de multiplication de 10}
VAR
I : entier
Début
Afficher ("Table de multiplication de 10")
IÅ1
Tant que i<= 10 faire
Afficher ("10 * ", I,"=", 10*I)

21 © FNM
Algorithmique

IÅI+1
Fin tant que
Fin
Cet algorithme peut aussi s'écrire avec une boucle répéter jusqu'à :
Affichage de la table de multiplication de 10
Algo table_Multiplication_10
Pré conditions {}
Post condition : {Affiche la table de multiplication de 10}
VAR
I : entier
Début
Afficher ("Table de multiplication de 10")
IÅ1
Répéter
Afficher ("10 * ", I,"=", 10*I)
IÅI+1
Jusqu'à (I>10)
Fin

Affichage des nombres pais allant de 2 à 100


Avec une structure Pour :
Affichage de la table de multiplication de 10
Algo table_Multiplication_10
Pré conditions {}
Post condition : {Affiche des nombres pais allant de 2 à 100}
VAR
I : entier
Début
Afficher ("Liste des nombres pais allant de 2 à 100")
Pour I de 2 à 100 pas de 2
Afficher (I)
Fin pour
Fin

Avec une structure tant que :


Affichage de la table de multiplication de 10
Algo table_Multiplication_10
Pré conditions {}
Post condition : {Affiche des nombres pais allant de 2 à 100}
VAR
I : entier
Début
Afficher ("Liste des nombres pais allant de 2 à 100")
IÅ 2
Tant que I<=100 faire
Afficher (I)
IÅ I+1
Fin tant que
Fin
Avec une structure Répéter :

© FNM 22
Algorithmique

Affichage de la table de multiplication de 10


Algo table_Multiplication_10
Pré conditions {}
Post condition : {Affiche des nombres pais allant de 2 à 100}
VAR
I : entier
Début
Afficher ("Liste des nombres pais allant de 2 à 100")
IÅ 2
Répéter
Afficher (I)
IÅ I+1
Jusqu'à (I>100)
Fin

V- LA VALIDATION DES ALGORITHMES


Parfois, la maîtrise d'un algorithme nécessite de le "dérouler" à la main, autrement dit de se convertir en
ordinateur, et d'exécuter mentalement ou sur une feuille de papier les instructions constituant l'algorithme.
Pour "dérouler" un algorithme, nous vous conseillons la méthode suivante

1 - MÉTHODOLOGIE
A - ELABORATION DU TABLEAU D'ÉXÉCUTION
- Tracer un tableau avec autant de colonnes que de variables utilisées par votre algorithme. Ajouter
à ce tableau :
o une colonne comportant le n° de l'instruction en cours
o une colonne permettant de visualiser les résultats obtenus
o une colonne indiquant le n° de l'instruction suivante
- Numéroter séquentiellement les instructions de votre algorithme. Les instructions Début, Alors,
Sinon et Fin ne sont pas numérotées.
- Dérouler pas à pas votre algorithme en remplissant les colonnes du tableau.
- Arrivé à la dernière instruction, la colonne "résultat" de votre tableau doit indiquer les résultats
obtenus.
B - RÈGLES DE MISE À JOUR DU TABLEAU
- Une instruction d'affectation ou une instruction d'entrée de données impliquent la mise à jour des
colonnes relatives aux données citées dans l'instruction.
- Une instruction de sortie implique la mise à jour de la colonne "résultat".
- Une expression logique ou conditionnelle n'agit que sur la mise à jour de la colonne "instruction
suivante".
- Les instructions Répéter et Fin Si se poursuivent à l'instruction suivante
- L'instruction Fin Tant que se poursuit à l'instruction Tant que auquel elle appartient.

2 - EXEMPLE
A - ALGORITHME DE RECHERCHE DU PLUS PETIT PARMI DEUX NOMBRES
Algo Plus Petit
Pré conditions {}
Post condition : {Affiche le plus petit de deux nombres}
VAR
1 A, B : entier

23 © FNM
Algorithmique

Début
2 Saisir ("Veuillez indiquer le premier nombre ", A)
3 Saisir ("Veuillez indiquer le deuxième nombre ", B)
4 Afficher ("Le plus petit des deux est :")
5 SI A<=B alors
6 Afficher (a)
Sinon
7 Afficher (B)
8 Fin si
Fin
N°instruction A B Résultat Instruction Suivante
1 ? ? 2
2 11 ? 3
3 11 8 4
4 11 8 Le plus petit des deux est
5 11 8 7
7 11 8 8 8
8 11 8 Arrêt

B - ALGORITHME DE MULTIPLICATION DES DEUX ENTIERS (TANT QUE)


Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
1 Prod, A, B, Cpt : entier
Début
2 Prod Å 0
3 Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
4 Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
5 CptÅB
6 Tant que Cpt <> 0 faire
7 Prod Å Prod + A
8 Cpt Å Cpt – 1
9 Fin tant que
10 Afficher (A, "*", B, "=", Prod)
Fin
N° Instruction
Prod A B Cpt Résultat
instruction Suivante
1 ? ? ? ? 2
2 0 ? ? ? 3
3 0 8 ? ? 4
4 0 8 2 ? 5
5 0 8 2 2 6
6 0 8 2 2 7
7 8 8 2 2 8
8 8 8 2 1 9
9 8 8 2 1 6
6 8 8 2 1 7
7 16 8 2 1 8
8 16 8 2 0 9
9 16 8 2 0 6
6 16 8 2 0 10
10 16 8 2 0 8 * 2 = 16 Arrêt

© FNM 24
Algorithmique

C - ALGORITHME DE MULTIPLICATION DES DEUX ENTIERS (RÉPÉTER)


Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
1 Prod, A, B, Cpt : entier
Début
2 Prod Å 0
3 Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
4 Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
5 CptÅB
6 Répéter
7 Prod Å Prod + A
8 Cpt Å Cpt – 1
9 Jusqu'à (Cpt =0)
10 Afficher (A, "*", B, "=", Prod)
Fin
N° Instruction
Prod A B Cpt Résultat
instruction Suivante
1 ? ? ? ? 2
2 0 ? ? ? 3
3 0 8 ? ? 4
4 0 8 2 ? 5
5 0 8 2 2 6
6 0 8 2 2 7
7 8 8 2 2 8
8 8 8 2 1 9
9 8 8 2 1 6
6 8 8 2 1 7
7 16 8 2 1 8
8 16 8 2 0 9
9 16 8 2 0 10
10 16 8 2 0 8*2=16 Arrêt

D - ALGORITHME DE MULTIPLICATION DES DEUX ENTIERS (POUR)


Algo Multiplication
Pré conditions {}
Post condition : {Affiche le produit de deux nombre}
VAR
1 Prod, A, B, Cpt : entier
Début
2 Prod Å 0
3 Saisir ("Veuillez indiquer le premier nombre entier positif :", A)
4 Saisir ("Veuillez indiquer le deuxième nombre entier positif :", B)
5 Pour Cpt de B à 0 pas de -1
6 Prod Å Prod + A
7 Fin pour
8 Afficher (A, "*", B, "=", Prod)
Fin

25 © FNM
Algorithmique

N° Instruction
Prod A B Cpt Résultat
instruction Suivante
1 ? ? ? ? 2
2 0 ? ? ? 3
3 0 8 ? ? 4
4 0 8 2 ? 5
5 0 8 2 2 6
6 8 8 2 2 7
7 8 8 2 2 5
5 8 8 2 1 6
6 16 8 2 1 7
7 16 8 2 1 5
5 16 8 2 0 8
8 16 8 2 0 8*2=16 Arrêt

© FNM 26
Algorithmique

PROCÉDURES ET DE FONCTIONS
I- UTILISATION DES PROCÉDURES
1 - NOTION D'ACTION NOMMÉE OU PROCÉDURE
Il est assez désagréable d'avoir à lire un algorithme écrit sur plusieurs pages. Or peu de problèmes
peuvent être résolus en moins d'une page d'algorithme. Pour des raisons de lisibilité, l'on est donc amené à
découper un algorithme en plusieurs parties: une partie principale indiquant la logique générale de
l'algorithme et plusieurs sous parties éventuellement décomposées en autant de sous parties que
nécessaire. Toutes ces sous-parties portent le nom d'actions nommées ou de procédures.

Exemple:
Dans l'algorithme de tri de trois nombres, nous pouvons utiliser la notion d'action nommée chaque fois
que l'on effectue des permutations. Nous décomposons alors l'algorithme en quatre modules.

ALGO OrdonneTroisnombres
Pré-conditions : {}
Post-conditions :{affiche les 3 nombres triés}

Var globales
VI, V2, V3, Permut : réels

DEBUT
Saisir ("Entrer le nombre VI :", VI)
Saisir ("Entrer le nombre V2 :", V2)
Saisir "Entrer le nombre V3 :", V3)
Si VI > V2 Alors
Permute_V1V2
Fin Si
Si V3 < V2 Alors
Si V3 < VI Alors
Permute_V1V3_V3V2
Sinon
Permute_V2V3
Fin Si
Fin Si
Afficher ("Voici les nombres dans l'ordre croissant :" & VI & "," & V2 & "," & V3)
FIN

PROCEDURE Permute_V1V2
Spécification : {}Æ{permute V1 et V2}
Débutproc
Permut Å V1
V1Å V2
V2Å Permut
Finproc

27 © FNM
Algorithmique

PROCEDURE Permute_V1V3_V3V2
Spécification : {}Æ{permute V1 et V2 et V3}
Débutproc
Permut Å V1
V1Å V3
V3Å V2
V2Å Permut
Finproc

PROCEDURE Permute_V2V3
Spécification : {} Æ{permute V2 et V3}
Débproc
Permut Å V2
V2Å V3
V3Å Permut
Finproc

REMARQUES
Pour indiquer que les variables de la partie principale de l'algorithme sont utilisables dans les actions
nommées, elles sont précédées dans la partie déclarative du mot "globales". Les variables sont globales
dans la mesure où elles sont utilisables dans l'ensemble des parties constitutives de l'algorithme.

Le découpage en actions nommées nous permet de réduire la taille de l'algorithme initial, voir même d'en
simplifier l'écriture en repoussant aux niveaux des actions nommées les problèmes liés aux permutations.
Voilà déjà un premier avantage des actions nommées, caractéristiques de la programmation structurée:
décomposer (ou diviser) pour régner !

Mais il ne s'agit que d'un avantage mineur, par rapport de ce que l'on peut attendre des actions nommées.
Observons attentivement les trois actions nommées :

L'action Permute_V1V2 permet de permuter V I et V2


L'action Permute_VIV3_V3V2 permet de permuter VI et V3, puis V2 et V3
L'action Permute_V2V3 permet de permuter V2 et V3

Ainsi, l'action commune à chacune de ces actions nommées est la permutation de deux nombres.
Imaginons une action nommée générique à laquelle il suffit de communiquer les variables à permuter et
qui retourne après traitement les variables permutées. Ce concept est nommé action paramétrée ou
procédure paramétrée. Notre problème se résume alors à l'algorithme suivant :

ALGO OrdonneTroisnombres
Pré-conditions : {}
Post-conditions :{affiche les 3 nombres triés}

Var
VI, V2, V3, Permut : réels

DEBUT
Saisir ("Entrer le nombre VI :", VI)
Saisir ("Entrer le nombre V2 :", V2)
Saisir "Entrer le nombre V3 :", V3)

© FNM 28
Algorithmique

Si VI > V2 Alors
Permute (V1, V2)
Fin Si
Si V3 < V2 Alors
Si V3 < VI Alors
Permute (V1, V3)
Permute (V3, V2)
Sinon
Permute (V2, V3)
Fin Si
Fin Si
Afficher ("Voici les nombres dans l'ordre croissant :" & VI & "," & V2 & "," & V3)
FIN

Procédure Permute (A, B : entier)


Spécification : {}Æ{permute les deux valeurs}

VAR
Permut : entier
Débproc
Permut Å a
AÅB
B Å Permut
Finproc

2 - COMMENT CELA FONCTIONNE-T-IL ?


Le mécanisme détaillé sera étudié ultérieurement, mais d'un point de vue strictement logique la procédure
Permute peut être vue comme une "boîte noire" à laquelle on communique les variables V1, V2 et V3 et
qui les permute en fonction de la demande.

Exemple :
Exécution de l'instruction Permute (V1, V2)
Avant exécution de l'instruction Permute (V1, V2)
V1
11

8
V2
Au moment de l'appel de la procédure Permute (), les variables a et b de la procédure Permute sont
"associées" respectivement aux variables V1 et V2
V1 a 11
11

8
V2 b 8
La procédure Permute () effectue la permutation des variables a et b à l'aide de la variable locale permut
V1 a 8
11
Permut 11
8
V2 b 11
Après exécution de l'instruction Permute (V1, V2)

29 © FNM
Algorithmique

V1 a 8
8
Permut 11
11
V2 b 11

L'utilisation de la procédure Permute () nous a fait gagner quelques lignes d'instruction. En plus cette
procédure va nous permettre de simplifier l'algorithme principal au niveau de la seconde alternative :

ALGO OrdonneTroisnombres
Pré-conditions : {}
Post-conditions :{affiche les 3 nombres triés}
Var
VI, V2, V3, Permut : réels
DEBUT
Saisir ("Entrer le nombre VI :",VI)
Saisir ("Entrer le nombre V2 :", V2)
Saisir "Entrer le nombre V3 :", V3)
Si VI > V2 Alors
Permute (V1, V2)
Fin Si
Si V3 < V2 Alors
Si V3 < VI Alors
Permute (V1, V3)
Fin Si
Permute (V2, V3)
Fin Si
Afficher ("Voici les nombres dans l'ordre croissant :" & VI & "," & V2 & "," & V3)
FIN

Procédure Permute (A, B : entier)


Spécification : {}Æ{permute les deux valeurs}
VAR
Permut : entier
Débproc
Permut Å a
AÅB
B Å Permut
Finproc
A - NOTIONS RELATIVES AUX ARGUMENTS
Lorsqu'une action nommée apparaît dans la description d'un algorithme, on dit qu'elle est appelée. Une
action nommée utilise éventuellement des arguments ou paramètres. Ces arguments ou paramètres
appelés également variables publiques de l'action nommée, constitue son interface. Les autres variables
propres à l'action nommée, ne sont pas "visibles" par les actions appelantes et sont appelées variables
locales ou privées.
Ainsi dans la procédure Permute (a, b) de notre exemple, a et b sont les arguments de la procédure et en
constitue l'interface. La variable Permut est une variable locale ou privée, non visible du reste de
l'algorithme.
Arguments effectifs Interface Partie Privée

© FNM 30
Algorithmique

V1 11 a 11
Permut 11
V2 8 b 8
Arguments formels ou Variables locales ou privées
Variables publiques

Décrire une action nommée, c'est spécifier les données et résultats de l'action à l'aide des arguments
formels. Appeler une action nommée se fait en fournissant la liste des objets appartenant à l'action
appelante. Cette liste constitue les arguments effectifs qui se substitueront aux arguments formels pour
l'exécution de l'action appelée.

Appel d'une action nommée dans l'action appelante Déclaration de l'action nommée
… Procédure Libelleaction(liste des arguments formels)
LibelléAction(liste des paramètres effectifs) Var
… Liste des variables privées
Debproc
….
finproc

Il est important de noter que les paramètres effectifs doivent avoir exactement le même type et de
préférence la même signification que les paramètres formels utilisés dans l'en-tête de l'action nommée.
Par contre, ils n'ont pas nécessairement le même nom.

Les paramètres effectifs sont transmis à l'action nommée au moment où elle est appelée ou "activée".
L'action nommée va éventuellement effectuer des calculs sur ces arguments. Les possibilités d'opérer sur
les arguments effectifs dépendent en fait du mode de passage des arguments. Une des difficultés de la
notion de d'action nommée paramétrée provient du fait qu'il y a plusieurs mécanismes de passage des
arguments entre une action appelante et une action appelée et que tous les langages de programmation
n'offrent pas tous les mêmes possibilités. De plus, un mode de passage est souvent sous-entendu : il faut
donc garder à l'esprit son mode de fonctionnement pour ne pas faire d'erreurs.
B - MÉCANISME DE PASSAGE DES PARAMÈTRES
Les paramètres ont 2 rôles :
- Transmettre à l'action nommée, au moment de l'appel, les valeurs nécessaires à son exécution.
- Au moment du retour, transmettre à l'action appelante le ou les résultats du traitement effectué.
La "façon" dont les valeurs des paramètres sont transmises est importante et doit être bien comprise pour
éviter des effets pervers et inattendus.
Tout tourne autour de la question suivante: les arguments effectifs passés à une action nommée sont-ils
modifiés par l'exécution de cette action ? Si oui, quelles valeurs auront-ils à la fin cette exécution dans
l'action appelante ?
On distingue essentiellement 2 types de transmission
- Le passage de paramètre(s) par valeur.
- Le passage de paramètre(s) par adresse

Exemple
ALGO PARAMETRES
Pré-conditions : {}
Post-conditions :{ajoute 1 à la valeur et affiche le résultat}
VAR
A : entier
Début

31 © FNM
Algorithmique

AÅ0
Afficher ("La valeur de A avant l'appel " & A)
Plus_un(A)
Afficher ("la vlaeur de A Apres l'appel "& A)
FIN

Procédure Plus_Un(X : entier)


Spécification :{}Æ{ajoute 1}
Debproc
XÅX+1
Afficher ("La valeur de A pendant l'appel " & A)
Fin proc
a) PASSAGE PAR VALEUR
Dans ce mode de transmission, c'est la valeur des arguments qui est transmise à l'action appelée: il y a
recopie des valeurs initiales des paramètres effectifs dans une variable locale de l'action appelée.

Avant l'appel de la procédure Plus_Un () on a représenté en mémoire centrale par un mot dont le contenu
est 0.

A 0

Au moment de l'appel, il y a recopie du contenu du mot associé à A dans un mot de la zone réservée à la
procédure Plus_Un (). Ce mot sera associé à l'identificateur X.

A 0 0 X

Au cours de l'exécution de Plus_Un (), le traitement portera sur le mot local associé à l'action appelée. Il
n'affectera pas du tout le contenu du mot associé à A.
Juste avant le retour au programme principal on aura :

A 0 1 X

Ainsi les variables du programme principal ne sont pas affectées par les traitements effectués dans la
procédure appelée.
b) PASSAGE PAR ADRESSE
Dans ce mode appelé également passage par référence, on associe aux variables utilisées dans l'action
appelée, l'adresse des variables correspondantes de l'action appelante.

A l'appel de Plus_Un () on a :

A 0 X

Le paramètre X de l'action appelée est associé au même mot (adresse physique en mémoire centrale) que
la variable A de l'action appelante.

© FNM 32
Algorithmique

Ce mode de transmission évite les recopies locales. Mais le traitement de la procédure appelée affecte les
variables du programme principal et peut amener des résultats inattendus si on ne maîtrise pas bien ce
type de transmission.

Ainsi, après l'exécution de Plus_Un () on aura :

A 1 X

Remarques
Le mode de transmission par adresse s'impose lors du passage de tableaux; en effet, il est trop coûteux de
recopier des tableaux transmis comme arguments.

Certains langages de programmation permettent de choisir le mode de transmission, dans d'autres il est
implicite par valeur ou par adresse selon le type de donnée transmise. Il est important de bien définir et de
préciser le mode de transmission utilisé dans l'algorithme et de bien connaître le mode de transmission du
langage de programmation.

La transmission par adresse est nécessaire pour communiquer au programme appelant les résultats du
traitement effectué par la procédure, car au moment du retour au programme principal toute la zone
mémoire servant aux variables de la procédure est libérée.

Résumé des avantages et inconvénients de chaque mode de transmission


Avantages Inconvénients
Passage par valeur N'affecte pas les variables du Nécessite la recopie des valeurs des
programme principal. paramètres transmis. A éviter dans le cas
de tableau.
Passage par adresse Economise la place mémoire Affecte la valeur des variables de
nécessaire pour transmettre les l'action appelante. Peut être perturbante
résultats de l'action appelée vers si mal maîtrisée.
l'action appelante

3 - SYNTAXE RELATIVE AUX PROCÉDURES


A - DÉCLARATION DE LA PROCÉDURE
PROCEDURE Nom_de_procédure (Type de passage Arguments)

Type de passage :
- par adresse noté : es ou r ou Adr
- par valeur noté : e ou d ou Val
B - APPEL D'UNE PROCÉDURE DANS UNE ACTION APPELANTE
Nom_de_procédure( { liste des paramètres effectifs} )
C - EXEMPLE
L'exemple relatif à la permutation de deux variables nécessite un passage des arguments par adresse car
la modification des variables V1, V2 et V3 doit être effective au niveau de l'action appelante. Les
paramètres formels a et b de la procédure Permute () sont dits en entrée-sortie.
Procédure Permute (es A, B : entier)
Spécification : {}Æ{permute les deux valeurs}

33 © FNM
Algorithmique

VAR
Permut : entier
Débproc
Permut Å a
AÅB
B Å Permut
Finproc

4 - VISIBILITÉ D'UN IDENTIFICATEUR


ON appelle visibilité, le domaine dans lequel un identificateur peut être utilisé. Un identificateur n'est
visible c'est-à-dire utilisable et modifiable que dans la procédure dans laquelle il est défini.
Deux façons permettent d'étendre la visibilité d'un identificateur à d'autres procédures :
- le passage de paramètre par adresse permet d'étendre la visibilité dé l'identificateur à une
procédure appelée.
- La déclaration de l'identificateur en tant que variable globale dans la partie principale de
l'algorithme. Dans ce cas l'identificateur est utilisable et modifiable dans toutes les actions
nommées sans qu'il soit nécessaire de la passer en paramètre.

Il est très fortement déconseille d'utiliser des variables globales, les actions nommées ne sont plus
indépendantes du contexte appelant et par conséquence ne sont pas "exportables", c'est-à-dire ré-
utilisables par d'autres algorithmes.

II - UTILISATION DES FONCTIONS


1 - DÉFINITION
La fonction est une action nommée similaire à la procédure mais qui retourne une valeur d'un type donné.
La fonction dans une action appelante est toujours utilisée dans une expression (arithmétique ou logique).
On distingue :
- Les fonctions utilisateurs
- Les fonctions standards

2 - LES FONCTIONS UTILISATEURS


Ceux sont les fonctions définies par l'utilisateur. Elles obéissent à la syntaxe suivante :
A - SYNTAXE
a) DÉFINITION DE LA FONCTION APPELÉE
Fonction Nom_de_fonction (Arguments) : type_de_retour
Spécifications :{pré conditions} Æ {Post-conditions}
Var :
Variables locales
Debfonc
Instructions
Retourne (valeur retournée)
Finfonc

Les arguments formels sont implicitement déclarés en entrée car une fonction ne doit pas à priori modifier
un paramètre formel.
Pour qu'une fonction puisse retourner la valeur calculée au programme appelant, il est nécessaire d'avoir

© FNM 34
Algorithmique

dans le corps de la fonction au moins une instruction d'affectation indiquant la valeur retournée. Cette
instruction est retourne ().
b) APPEL D'UNE FONCTION DANS UNE ACTION APPELANTE
Nom_de_la_fonction ({liste des paramètres effectifs})
B - EXEMPLE
Ecrivons l'algorithme permettant de calculer le nombre de combinaisons de p éléments pris parmi N
éléments sachant que ce nombre est déterminé par la formule suivante :
N! / (P! * (N-P)!) Où ! Signifie factorielle de
La nature même de l'exercice nous incite à utiliser une fonction. La fonction Factorielle () n'étant pas
standard, nous devons la décrire. Pour cela nous reprenons l'algorithme déjà écrit que nous transformons
en fonction.

Fonction factorielle (Nombre : entier) : entier


Spécification : {Nombre >0} Æ {calcul le factorielle d'un nombre}
Var
Cpt, Facto : entier
Débfonc
FactoÅ1
Pour Cpt de 2 à Nombre
Facto Å Facto *Cpt
Fin pour
Retourne (Facto)
Finfonc

La fonction Factorielle () ainsi définie retourne une valeur entière pour tout nombre entier communiqué
comme argument. Nous pouvons maintenant l'utiliser:
Algo combinaison
Pré-conditions : {}
Post-conditions : {calcul le Nb de combinaisons}
Var
N, P, Comb : entier
Debut
Saisir ("Veuillez indiquer la valeur de N :", N)
Saisir ("Veuillez indiquer la valeur de P :", P)
Comb Å Factorielle (N) / (Factorielle (P)*Factorielle (N-P))
Afficher ("le nombre de combinaisons de " & N & " par " & p & "est " & Comb)
Fin

3 - LES FONCTIONS STANDARDS


Ce sont des fonctions de base offertes par le langage utilisé. Leur nombre et leur spécification sont en
fonction du langage utilisé. On peut considérer une fonction comme un nouvel opérateur du langage qui
permet de calculer un résultat. De ce fait elles sont directement utilisables sans avoir besoin de les
déclarer.
A - SYNTAXE
Appel d'une fonction standard :
Nom_de_fonction (arguments)

35 © FNM
Algorithmique

B - EXEMPLE DE FONCTIONS STANDARDS


Les fonctions standards se répartissent en classes d'utilisation.

Manipulation des données de type chaîne de caractères


CVCHAINE() Conversion d'un numérique en chaîne de caractères
MILIEU() extrait une sous-chaîne d'une chaîne de caractères
DATESYST() donne la date système sous forme de chaîne de caractères
HEURESYST() donne l'heure système sous forme de chaîne de caractères

Manipulation des données de types numériques


ABS() donne la valeur absolue d'un nombre réel
ARRONDI() arrondi un réel à la valeur supérieure
ENT() donne la partie entière d'un réel
RACINE() Donne la racine nème d'un nombre

Exemple
Algorithme de calcul du périmètre d'un triangle rectangle. Nous utilisons la fonction standard Racine (al,
a2) qui admet deux arguments :
- un réel indiquant le nombre dont on veut extraire la racine
- un entier indiquant le type de racine (carrée, cubique, ...)

Ainsi Racine (121,2) est égal à 11.

Algo Rectangle
Pré-conditions : {}
Post-conditions : {Affiche le périmètre et la surface d'un triangle rectangle}
Var
A, B, Hypo, Périmètre: réel
Début
Saisir ("Veuillez indiquer la longueur du coté ", A)
Saisir ("Veuillez indiquer la longueur du 2° coté ", B)
Hypo := Racine (A*A + B*B)
Périmètre := A + B + Hypo
Afficher ("Le périmètre est égal à " & Périmètre)
FIN

III - FONCTIONS ET PROCÉDURES RÉCURSIVES


1 - NOTION DE RÉCURSIVITÉ
Une fonction ou une procédure est récursive si elle s'appelle elle-même directement nu indirectement.

Exemple:
Ecrivons la fonction factorielle de façon récursive
Fonction Factorielle (nb : entier) : entier
Spécifications :{nb>=0} Æ{calcul le factorielle de nb}
Debfonc
Si (nb=0) alors
Retourne (1)
Sinon

© FNM 36
Algorithmique

Retourne (nb* Factorielle (Nb-1))


Fin si
finfonc
Pour bien comprendre le principe de la récursivité, on va dérouler à la main algorithme pour N=4 :

Premier appel de FACTORIELLE :


FACTORIELLE (4).
4 <> 0 ÆOn passe dans la branche du SINON
Le premier appel à Factorielle est en attente du retour de Factorielle (3)

FACTORIELLE (3).
3 <> 0 ÆOn passe dans la branche du SINON
Le deuxième appel à Factorielle est en attente du retour de Factorielle (2)

FACTORIELLE (2).
2 <> 0 ÆOn passe dans la branche du SINON
Le troisième appel à Factorielle est en attente du retour de Factorielle (1)

FACTORIELLE (1).
1 <> 0 ÆOn passe dans la branche du SINON
Le quatrième appel à Factorielle est en attente du retour de Factorielle (0)
FACTORIELLE (0).
0 <> 0 ÆOn passe dans la branche du ALORS
La fonction retourne 1.
FACTORIELLE (1).
Peut alors retourner (1*1)
FACTORIELLE (2).
Peut alors retourner (2*1)
FACTORIELLE (3).
Peut alors retourner (3*2)
FACTORIELLE (4).
Peut alors retourner (4*6)

Remarque :
Le mécanisme est complexe. Il en résulte un temps de calcul plus long, et une place en mémoire plus
importante que pour une procédure itérative.
Mais ce prix supplémentaire à l'exécution est très largement compensé par l'extrême simplicité de
construction, et la très grande lisibilité de la procédure.

En fait, la récursivité apparaît souvent comme une première étape d'une construction de l'itération. La
transformation de la récursivité en itération est une des méthodes les plus puissantes de la programmation.
(Mais est hors programme)

Il faut soigneusement vérifier qu'un algorithme récursif s'arrête Dans l'exemple précédent, il n'y a plus
d'appel récursif pour Nb =O, et à chaque appel Nb décroît, le nombre d'appels est donc fini.

IV - CONCLUSION SUR L'UTILISATION DES ACTIONS


NOMMÉES
Il est important de bien comprendre que l'usage des actions nommées représente la base de la

37 © FNM
Algorithmique

programmation structurée, qui consiste d'abord à décrire les actions nommées par leur spécification, puis
à en décrire ensuite leur comportement.

Intuitivement, on voit bien que cette façon de faire permet d'une part de maîtriser la résolution d'un
problème complexe en l'assimilant à la résolution d'une suite de problèmes plus simples, d'autre part
d'utiliser les solutions apportées à certains problèmes pour en résoudre d'autres.

Ce sont là des facteurs fondamentaux dans l'efficacité de l'activité de programmation.

On peut en fait voir une action nommée de deux points diamétralement opposés, mais complémentaires :

• De l'extérieur : on utilise l'action comme une boite noire, dont on connaît le rôle, grâce à
ses spécifications, et les objets qu'elle peut manipuler, mais dont on ne connaît pas le
principe de fonctionnement.

• De l'intérieur : on en connaît le rôle, les types d'objets qu'elle peut manipuler et le


principe de fonctionnement mais on ne sait pas où elle sera utilisée. Lors de la construction
des programmes, cette technique permet de tester d'abord les actions nommées, avant de
les insérer dans le programme qui les utilise.

En résumé, les actions nommées permettent

• De partager la complexité en abordant un problème d'un niveau global vers un niveau détaillé.
• De réutiliser n fois un même module, plutôt que d'écrire n fois les mêmes instructions. La
réécriture d'instructions identiques doit d'ailleurs interpeller systématiquement le concepteur quant
à la mise en place d'une action nommée.
• De maintenir plus facilement un programme, puisque la modularité permet de repérer plus
facilement tout dysfonctionnement.
• De faire appel à des bibliothèques de modules existants dont on ne connaît que la partie
"spécifications".
• De répartir la charge d'un projet de développement conséquent entre plusieurs personnes.

La décomposition d'un algorithme en actions nommées est une tâche difficile, qui repose sur une capacité
à "aller à l'essentiel ".

Quelques conseils peuvent faciliter cette décomposition

- Une action doit toujours jouer un rôle précis et facile à définir


- L'interface entre les actions doit être la plus réduite possible: en général, une action ne doit
comporter que quelques arguments.

Il faut donc décomposer suffisamment pour réduire la complexité du problème, mais pas trop pour ne pas
augmenter la complexité de la solution !

© FNM 38
Algorithmique

LA GESTION DES TABLEAUX


I- INTRODUCTION
On considère l'algorithme ci-dessous qui permet de calculer la somme et la moyenne de N nombres saisis.

ALGO Moyenne
Pré-conditions {}
Post-conditions {Affiche la somme et la moyenne des valeurs saisies}
VAR
Somme, nb : réel
NBnotes, Cpt : entier
DEBUT
Saisir ("Entrer le nombre de notes à saisir";nb)
SommeÅ 0
Pour Cpt de 1 à NBnotes
Saisir ("Entrer un nombre :", nb)
SommeÅ somme+ nb
Fin pour
Afficher ("La somme est de " & Somme & " et la moyenne est de " & Somme/NBnotes)
FIN

Admettons que le nombre de notes à saisir soit 4 et que l'on souhaite conserver en mémoire l'ensemble
des notes pour les afficher; on ne peut plus se contenter d'une seule variable NB et l'on doit alors modifier
l'algorithme :

ALGO Moyenne
Pré-conditions {}
Post-conditions {Affiche la somme et la moyenne des valeurs saisies}
VAR
Somme, nb1, nb2, nb3, nb4 : réel
DEBUT
Saisir ("Entrer un 1er nombre :", nb1)
Saisir ("Entrer un 2ème nombre :", nb2)
Saisir ("Entrer un 3ème nombre :", nb3)
Saisir ("Entrer un 4ème nombre :", nb4)
SommeÅ nb1 + nb2 + nb3 + nb4
Afficher ("La somme de " nb1 & "+" & nb2 & "+" & nb3 & "+" & nb4 &" est de " & Somme & "
et la moyenne est de " & Somme/nb)
FIN

Et si l'on voulait saisir 1000 notes ?


Il faudrait alors créer 1000 variables et donc 1000 lignes de saisie. Ce serait un travail énorme.
Il faudrait un variable (c'est-à-dire un seul identificateur capable de sticker plusieurs valeurs.
Ce type de variable existe : il se nomme tableau

1 - DÉFINITION
Un tableau est une structure de données ayant une dimension et un type déterminés, qui permet de
stocker en mémoire plusieurs valeurs de même type. Ces valeurs sont appelées éléments du tableau.

39 © FNM
Algorithmique

Chacun de ces éléments est repéré par un indice indiquant sa position relative par rapport au début du
tableau.

Dimension : le nombre d'éléments que peut contenir le tableau détermine la dimension du tableau.
Type : désigne la nature des valeurs stockées dans le tableau (entier, caractères, chaîne, réel,…)
Elément : façon de désigner une valeur d'un tableau.
Indice : un indice est un entier naturel dont les valeurs varient de 1 à la dimension du tableau. A chaque
valeur de l'indice correspond une seule valeur dans le tableau.

2 - REPRÉSENTATION
Tableau T de type entier. Dimension = N
882 288 82 … 896 86 8
1 2 3 n-2 n-1 n

Le 1° élément du tableau est noté T[1]


Le 2° élément du tableau est noté T[2]

Le n-1° élément du tableau est noté T[n-1]
Le n° élément du tableau est noté T[n]

3 - REPRÉSENTATION MÉMOIRE
Un tableau est stocké en mémoire où il occupe une suite d'emplacements successifs.

Mémoire
Début du tableau

882 288 896


86 10 8

Dimension : 6
Fin du tableau

4 - DÉCLARATION D'UN TABLEAU


La dimension doit être connue à l'avance. Le tableau peut ne pas être entièrement rempli, mais il ne peut
en aucun cas contenir plus d'éléments que le nombre déterminé lors de la déclaration.
L'indice du tableau de dimension n est un entier déclaré indépendamment qui varie de 1 à n
Nom_du_tableau [Nb_element] : Tableau de type_des_elements_du_tableau
Exemple :
NomEleves[32] : tableau de chaîne de caractère.

On peut aussi utiliser une notation qui précise le début et la fin du tableau :
NomEleves[1..32] : tableau de chaîne de caractère.
Utilisation d'un tableau a une dimension

© FNM 40
Algorithmique

II - UTILISATION D'UN TABLEAU À UNE DIMENSION


1 - DÉFINITION
Un tableau est dit à une dimension lorsqu'un seul indice suffit à dresser les éléments du tableau.
L'utilisation des éléments d'un tableau ne peut se faire qu'élément par élément. L'accès à un élément peut
se faire :
- en indiquant directement la position relative de l'élément par rapport au début du tableau.
- En utilisant un indice
Exemple :
T[8] pour accéder au 8ème élément du tableau
T[k] pour accéder au kème élément du tableau

2 - GESTION DES ÉLÉMENTS D'UN TABLEAU


Un élément d'un tableau est considéré comme une variable à part entière et peut pas conséquent être
utilisé lors des instructions d'entrée-sortie, d'affectation, mais aussi dans toutes les expressions
numériques, conditionnelles,…

ALGO Moyenne
Pré-conditions {}
Post-conditions {Affiche la somme et la moyenne des valeurs saisies}
VAR
Somme, TNOTES [100] : réel
NBnotes, Cpt : entier
DEBUT
Saisir ("Entrer le nombre de notes à saisir (<100) ";NBnotes)
SommeÅ 0
Pour Cpt de 1 à NBnotes
Saisir ("Entrer un nombre :", TNOTES[i])
SommeÅ somme+ TNOTES[i]
Fin pour
Afficher ("Voici l'ensemble des notes ")
Pour Cpt de 1 à NBnotes
Afficher ("la " & i & "° notes est " & TNOTES[i]
Fin pour
Afficher ("La somme est de " & Somme & " et la moyenne est de " & Somme/NBnotes)
FIN
Quelque soit le nombre de notes saisies, la taille de l'algorithme n'augmente pas !

III - ALGORITHME UTILISANT UN TABLEAU À UNE


DIMENSION
1 - RECHERCHE D'UN ÉLÉMENT DANS UN TABLEAU
A - RECHERCHE À L'AIDE DE LA POSITION RELATIVE DANS UN TABLEAU
Algo Moyenne
Pré-conditions : {}
Post- condition : {affiche la valeur à une position dans un tableau}
VAR

41 © FNM
Algorithmique

Tnotes[100] : réels
Nbnotes, cpt, Position : entier
Début
Saisir ("Entrer le nombre de note à saisir (<100) : " Nbnotes)
Pour Cpt de 1 à NBnotes
Saisir ("Entrer un nombre ", Tnotes[Cpt])
Fin pour
Saisir ("Donnez la position de l'élément recherché ", position)
Afficher ("La valeur est : " & Tnotes[position])
Fin
B - RECHERCHE À L'AIDE DE LA VALEUR DE L'ÉLÉMENT
On recherche une valeur dans le tableau, on s'arrête à la première valeur identique rencontrée). On parle
de recherche séquentielle dans le tableau.
Algo Moyenne
Pré-conditions : {}
Post- condition : {affiche la valeur à une position dans un tableau}
VAR
Tnotes[100], val : réels
Nbnotes, cpt : entier
Trouve : booléen
Début
Saisir ("Entrer le nombre de note à saisir (<100) : " Nbnotes)
Pour Cpt de 1 à NBnotes
Saisir ("Entrer un nombre ", Tnotes[Cpt])
Fin pour
Cpt Å 1
Trouve Å Faux
Saisir ("Donnez la valeur de l'élément recherché ", val)
Tant que (Cpt != Nbnotes et non (trouve))
Si (Tnotes[Cpt]=val) alors
Trouve Å Vrai
Sinon
CptÅCpt +1
Fin si
Fin tant que
Si (Trouve) alors
Afficher ("L'élément est en position : " & cpt)
Sinon
Afficher ("L'élément n'est pas dans le tableau")
Fin si
Fin
C - RECHERCHE DE L'ÉLÉMENT LE PLUS GRAND
On suppose que le tableau à été rempli dans l'algorithme principal. Et qu'il fait appel à une fonction Max
qui retourne la position du plus grand élément du tableau.

Fonction MAX(es Table [100] : réels, e nbel : entier) : entier


Spécifications : {} Æ{retourne l'indice de la plus grande valeur}
Var

© FNM 42
Algorithmique

Cpt, position : entier


Max : réels
Debfonc
Position Å 1
Max Å Table [1]
Pour Cpt de 2 à nbel
SI (Max < Table [Cpt]) alors
Max Å Table [Cpt]
Position = Cpt
Fin si
Fin pour
Retourne (Position)
Finfonc

2 - TRI D'UN TABLEAU


La recherche d'un élément dans un tableau peut s'avéré très longue si le tableau est très grand. Car il faut
parcourir l'intégralité du tableau pour trouver un élément. Aussi afin d'accélérer les traitements sur les
tableaux on utilise généralement des tableaux triés.
Il existe plus algorithmes de tri.
A - TRI PAR REMPLACEMENT
Cette méthode travaille avec deux tableaux. On recherche dans le tableau de départ la plus grande valeur.
Puis on recherche la plus petite valeur. Elle est recopiée dans le deuxième tableau et remplacée dans le
premier par la valeur la plus grande. Et ainsi de suite jusqu'à ce qu'il n'y ai plus que des valeurs les plus
grandes dans le tableau de départ.
Exemple :
La valeur la plus grande est X.
Tableau Indice min V apres remplacment Tableau trié
1 BATEAUX 2 BXTEAUX A
2 BXTEAUX 5 BXTEXUX AA
3 BXTEXUX 1 XXTEXUX AAB
4 XXTEXUX 4 XXTXXUX AABE
5 XXTXXUX 3 XXXXXUX AABET
6 XXXXXUX 6 XXXXXXX AABETU
7 XXXXXXX FINI AABETUX
Procédure Tri_remplacement(e V[n] : caractères, es Vtrié[n] : caractères)
Spécification {n>0} Æ {Vtrié contient les éléments de V en ordre croissant}
Var
Max: caractères
I,j : entier
Debproc
Max Å maximum (V[n])
IÅ 1
Tant que (i<n) faire
JÅ indicemin(V[n])
Vtrié[i]ÅV[j]
V[j]ÅMax
iÅ i+1
Fin tant que

43 © FNM
Algorithmique

Vtrie[n]ÅMax
Finproc
Fonction Maximum(e Tab[n] : caractère) : caractère
Spécification : {n>0} Æ{Retourne la plus grande valeur du tableau}
Var
Cpt : entier
Max : réels
Debfonc
Max Å Tab [1]
Pour Cpt de 2 à n
Si (Max < Tab [Cpt]) alors
Max Å Tab [Cpt]
Fin si
Fin pour
Retourne (Max)
Finfonc

Fonction indicemin(e T[n] : entier) : entier


Spécification : {n>0} Æ{Retourne la position de la petite valeur du tableau}
Var
i, j :entier
debfonc
iÅ 2
jÅ 1
Tant que i <n faire
Si (T[j] > T[i]) alors
jÅi
Finsi
iÅ i+ 1
Fin tant que
Retourne (j)
Finfonc

Méthode simple et très intuitive mais nécessite l'utilisation de deux tableaux d’où une occupation
mémoire de totale de 2 * taille du tableau * taille des éléments.
Pour ce qui est des comparaison on fait n*(n-1) comparaisons
Pour les affectations dans le cas favorable : 2n affectation dans le cas défavorable 3n
Cette méthode n'est pas la plus efficace ni la plus rapide.
Exemple :
Si n=1000 et le type occupe 20 octets
La place occupée est de 40 000 octets
Le nombre comparaisons de l'ordre de 1 000 000.
Le nombre d'affectations 2500 en moyenne.
B - TRI PAR PERMUTATION
Il s'agit d'éviter la construction d'un second tableau.
Principe :
On partage le tableau en deux, on suppose la partie gauche triée et on recherche le plus petit élément dans
la partie droite. Et on le permute avec l'élément suivant la partie trié.

© FNM 44
Algorithmique

Exemple :
i J Trie / non trieé Elément à permuter Apres permutation
1 2 /BATEAUX B et A A/BTEAUX
2 5 A/BTEAUX B et A AA/TEBUX
3 5 AA/TEBUX T et B AAB/ETUX
4 4 AAB/ETUX Aucune permutation AABE/TUX
5 5 AABE/TUX Aucune permutation AABET/UX
6 6 AABET/UX Aucune permutation AABETU/X
7 AABETU/X fin AABETUX/

Procédure tir_permutation(es V[n] : entier)


Spécifications :{n>0} Æ{V est trié}
VAR
i,j :entier
Debproc
iÅ 1
Tant que (i<n) faire
jÅ indmin(V[n], i)
Si (j<> i) alors
Permut(V[i], V[j])
Fin si
iÅ i+1
Fin tant que
Fin proc

Procédure Permut (es a, b : entier)


Spécification {}Æ{les valeur a et b du tableau sont permutée}
Var
C: entier
Debproc
cÅ a
aÅ b
bÅ c
Fin proc

Fonction indmin(e V1 [n], deb : entier) : entier


Spécification {i<=deb <= n}Æ{retourne la position du plus petit élément}
VAR
k, j :entier
debfonc
jÅ deb
kÅdeb +1
Tant que k<= deb faire
Si (V1 [j]>V1[k]) alors
JÅ k
Fin si
kÅ k+1
Fin tant que

45 © FNM
Algorithmique

Retourne (j)
Fin
Place occupée nombre éléments + 1 (pour la permutation) * taille des éléments.
Nombre de comparaisons n*(n-1) /2
Nombre de permutations : cas favorable 0 cas défavorable : n-1.
Exemple :
Pour n= 1000 et taille de 20 octets
Place occupée : 20 020 octets
Nb de comparaisons 500 000
Nb d'affectations : 1500 en moyenne
Cet algorithme est donc beaucoup plus efficace que le précédent.
C - TRI À BULLE
On reprend le principe du trie par permutation. Mais on parcourt le tableau de la fin vers le début et on
permute les éléments consécutifs qui ne sont pas dans l'ordre.

Exemple :
j Non traité / traité Eléments à comparés Apres permutation
7 BATEAU/X U et X BATEA/UX
6 BATEA/UX U et A BATE/AUX
5 BATE/AUX E et A BAT/AEUX
4 BAT/AEUX T et A BA/ATEUX
3 BA/ATEUX A et A B/AATEUX
2 B/AATEUX A et B /ABATEUX

On constate que, non seulement l'élément minimum a bien été rangé dans la position voulue, mais que
l'ordre général s'est accru. Le second A c'est déplacé vers la gauche. C'est cette opération qui donne son
nom à la méthode : "on fait remonter les bulles vers la surface"; "les éléments les plus "légers" sont
transportés vers la gauche.

Procédure Tri_à_bulle1 (es V[n] : entier)


Spécifications :{n>0} Æ {V est trié}
VAR
i, j : entier
Debproc
Pour i de 1 à n-1
Pour j de n à i faire
Si (V[j-1]>V[j]) alors
Permut(V[j-1] , V[j])
Fin si
Fin pour
Fin pour
Fin

Mais cette version n'est pas optimum en effet si le vecteur est trié au deuxième passage on continu à
parcourir le vecteur. On peut donc optimiser :
Procédure Tri_à_bulle1 (es V[n] : entier)
Spécifications :{n>0} Æ {V est trié}
VAR
i, j : entier

© FNM 46
Algorithmique

onapermuter : booléen
Debproc
iÅ1
onapermuter<-vrai
Tant que onapermuter faire
onapermuter Å faux
Pour j de n à i faire
Si (V[j-1]>V[j]) alors
Permut(V[j-1] , V[j])
onapermuter Å Vrai
Fin si
Fin pour
iÅ i+1
Fin tant que
Fin

Place occupée : (n+1) * taille du type du tableau


Nombre de comparaison cas favorable n-1 cas défavorable n(n-1)/2
Nombre de permutation cas favorable 0 cas défavorable n(n-1)/2

Cet algorithme à des performances moyennes et surtout inférieures à celle du tri par permutation. Il est
surtout intéressant par sa simplicité d'écriture et si le vecteur est déjà un peu trié.
D - TRI PÀR SEGMENTATION (QUICKSORT)
C'est l'algorithme de tri qui a les meilleures performances. Il est basé sur le principe de "diviser pour
régner".
Il utilise le principe de la récursivité.
Supposons que nous devions trié un tableau T [inf..sup] (avec inf<sup).
On segmente le tableau en trois sous tableau tels que
<= >=
Inf Place sup
Tous les éléments se trouvant à gauche de place (place ∈ [inf .. sup]) soient inférieurs ou égaux à
V[place] et que ceux se trouvant à droite de place soient supérieurs à V[place].
On constate que V[place] est correctement rangé, il ne reste qu'à trié les deux sous tableaux.

Procédure Trisegmentation (es V[inf.. sup]: tableau de type)


Spécification {}Æ{V[inf ..sup] trié}
VAR
Place : entier
Debproc
Si (inf<sup) alors
Segmentation (V[inf..sup], place)
Trisegmentation (V[inf..Place-1])
Trisegmentation (V[Place+1..Sup])
Fin si
Fin proc

Procédure Segmentation (es V[inf..sup] : tableau de type,es Place :entier)


Spécification {inf <Sup}Æ{V[inf ..place-1] <=V[place] < V[place+1..sup]}
VAR

47 © FNM
Algorithmique

i, j: entier
pivot : type
debproc
pivotÅ V[inf]
iÅinf +1
jÅ sup
Tant que i<= j faire
Si V[i]<= Pivot alors
iÅ i+1
sinon
Permut(V[i],V[j])
JÅj-1
Fin si
Fin tant que
Permut(V[inf],V[j])
PlaceÅ j
Fin proc

Exemple
i j V avant V[i] <= 'B' V après
2 7 B /ATEAUX Oui inchangé
3 7 BA /TEAUX Non BAXEAUT
3 6 BA/XEAU/T Non BAUEAXT
3 5 BA/UEA/XT Non BAAEUXT
3 4 BA/AE/UXT Oui Inchangé
4 4 BAA//EUXT Non BAAEUXT
4 3 Fini 'AABEUXT' place = 3

En analysant cet algorithme on constate que l'on effectue des permutations inutiles. En effet en permutant
V[i] et V[j], si V[j] est supérieur à pivot, on permutera de nouveau cet élément V[j] qui est en position i
pour le remettre en position j-1.

On peut donc optimiser cet algorithme afin d'éviter.


Procédure Segmentation2 (es V[i..s] : tableau de type, Place :entier)
Spécification {inf <Sup}Æ{V[inf ..place-1] <=V[place] < V[place+1..sup]}
VAR
i, j: entier
pivot : type
debproc
pivotÅ V[inf]
iÅinf +1
jÅ sup
Tant que i<= j faire
Si V[i]<= Pivot alors
iÅ i+1
Sinon
Si V[j]>pivot alors
JÅ j-1
Sinon
Si i<j alors

© FNM 48
Algorithmique

Permut(V[i],V[j])
JÅj-1
IÅ i+1
Fin si
Fin si
Fin si
Fin tant que
Permut(V[inf],V[j])
PlaceÅ j
Fin proc

Exemple :
i j V avant V[i] <= 'B' V[j]>'B' V après
2 7 B /ATEAUX/ Oui inchangé
3 7 BA /TEAUX/ Non Oui Inchangé
3 6 BA/REAU/X Non Oui Inchangé
3 5 BA/TEA/UX Non Non BAAETUX
4 4 BAA/E/TUX Non Oui Inchangé
4 3 Fini 'AABEUTX' place = 3

Cet algorithme a de bonne performance dans le cas d'un grand vecteur. Mais pour les petits tableaux il
faut préféré les autres algorithmes de tri.

Mais on peut encore amélioré les performance dans le cas d'un vecteur déjà à peu prés trié.
Procédure Trisegmentation2 (es V[inf.. sup]: tableau de type)
Spécification {}Æ{V[inf ..sup] trié}
VAR
i, j :entier
Pivot : type
Debproc
iÅ inf
jÅ sup
pivot Å V[(i+1)div 2]
Tant que (i<=j) faire
Tant que (pivot >V[i]) faire
iÅ i+1
Fin tant que
Tant que (pivot <V[j]) faire
jÅj-1
Fin tant que
Si (i<=j) alors
Si (i<j) alors
Permut(V[i],V[j])
Fin si
iÅ i+1
jÅ j+1
Fin si
Fin tant que
Si (inf <j) faire
Trisegmentation2(V[inf ..j])

49 © FNM
Algorithmique

Fin si
Si (i<sup) faire
Trisegmentation2(V[i ..sup])
Fin si
Fin proc

3 - RECHERCHE DANS UN TABLEAU TRIE (RECHERCHE


DICHOTOMIQUE)
Le tableau est trié. On calcul l'indice du milieu du tableau. La tableau peut alors être séparé en deux
autres trié. Et on regarde si la valeur recherché à dans la tableau de gauche ou celui de droite. En fonction
de cela, on recommence la recherche dans la moitié ou se trouve la valeur. Et ainsi de suite jusqu'à ce qu'il
ne reste plus qu'une valeur dans le tableau. Et on teste si c'est la valeur recherchée.
Fonction dichoto1(es V[n] : Tableau d'entier, e elem : entier) : booléen
Spécification : {V trié} Æ{résultat = vrai si elem appartient au tableau.}
VAR
Inf, sup, m : entier
Trouvé : booléen
Debfonc
TrouvéÅ Faux
infÅ 1
sup Å n
Tant que ((inf <= sup) et non trouvé) faire
mÅ (inf + sup) div 2
Si (V[m] = elem) alors
TrouvéÅ Vrai
Sinon
Si (V[m] < elem) alors
inf Å m+1
Sinon
Sup Å m -1
Fin si
Fin si
Fin tant que
Retourne (Trouve)
Fin proc

Mais si la valeur recherchée est avant ou après le tableau on parcourt le tableau à la recherche de elem
alors pour rien. On peut don optimiser l'algorithme :
Fonction dichoto2(es V[n] : Tableau d'entier, e elem : entier) : booléen
Spécification : {V trié} Æ{résultat = vrai si elem appartient au tableau.}
VAR
Inf, sup, m : entier
Trouvé : booléen
Debfonc
TrouvéÅ Faux
Si ((elem>= V[1]) et (elem <= V[n])) alors
infÅ 1
sup Å n

© FNM 50
Algorithmique

Tant que ((inf <= sup) et non trouvé) faire


mÅ (inf + sup) div 2
Si (V[m] = elem) alors
TrouvéÅ Vrai
Sinon
Si (V[m] < elem) alors
inf Å m+1
Sinon
Sup Å m -1
Fin si
Fin si
Fin tant que
Fin si
Retourne (Trouvé)
Fin proc

On peut aussi simplifier les variables :


Fonction dichoto3(es V[n] : Tableau d'entier, e elem : entier) : booléen
Spécification : {V trié} Æ{résultat = vrai si elem appartient au tableau.}
VAR
Inf, sup, m : entier
Debfonc
Si (elem> V[n] ou elem <V[1]) alors
Retourne (Faux)
Sinon
infÅ 1
sup Å n
Tant que (inf <= sup) faire
mÅ (inf + sup) div 2
Si (elem <=V[m]) alors
Sup Å m
Sinon
inf Å m -1
Fin si
Fin tant que
Si (elem = V[sup]) alors
Retourne (Vrai)
Sinon
Retourne (Faux)
Fin si
Fin si
Fin proc

51 © FNM
Algorithmique

IV - UTILISATION D'UN TABLEAU PLUSIEURS


DIMENSIONS
1 - DÉFINITION
• Tableau à deux dimensions : lorsque plusieurs tableaux à une dimension comportent le
même nombre d'éléments, sont de types identiques et sont fonctionnellement semblables,
alors on peut utiliser un tableau à deux dimensions. Ce tableau peut être assimilé à la
feuille de calcul d'un tableur, avec ses lignes et ses colonnes.
• Tableau à trois dimensions : un tableau à trois dimensions peut être comparé à un cube.
• Tableau à n dimension : on peut multiplier ainsi les dimensions d'un tableau, la seule limite
étant fixé par le langage de programmation.
• Les principes d'utilisation des tableaux à n dimensions restent semblables à ceux étudiés
pour le tableau à une dimension, si ce n'est au niveau de la syntaxe et au niveau du nombre
d'indice à manipuler.

2 - REPRÉSENTATION
Soit le tableau de notes suivant :

Algo C Analyse SQL Moyenne


Guillaume 15 11 16 11
Gustave 18 16 8 8
Jules 14 15 18 9
Antoine 11 11 16 11
Monique 11 8 15 15
Julie 18 15 11 16
Paul 12 12 9 18
Véronique 14 15 11 16
Valérie 11 18 16 14
Pierre 18 11 18 14
Moyenne

Ce tableau peut être représenté en mémoire sous la forme de trois tableaux :


- 1 tableau à une dimension de type chaîne de caractères représentant les étudiants
- 1 tableau à une dimension de type chaîne de caractères représentant les Matières
- 1 tableau à 2 dimensions de type réel représentant les notes des étudiants dans les différentes
matières.
A - REPRÉSENTATION LOGIQUE :
Le tableau comporte 11 lignes et 5 colonnes et se représenta logiquement comme suit :

15 11 16 11 .
18 16 8 8 .
14 15 18 9 .
11 11 16 11 .
11 8 15 15 .
18 15 11 16 .
12 12 9 18 .
14 15 11 16 .

© FNM 52
Algorithmique

11 18 16 . 14
18 11 18 . 14
. . . . .
L'absence d'information est matérialisée par le caractère '.'.
B - REPRÉSENTATION PHISIQUE
La représentation physique de ce tableau en mémoire doit être perçue comme une suite de mots mémoire
contenant les différentes notes. Cette représentation est linéaire.

15 11 16 11 . 18 16 8 9 . --- 18 11 18 14 . . . . . .
1ère ligne 2ème ligne 10ème ligne 11ème ligne

La conception exacte à avoir est la suivante :


-
15 11 16 11 . -
. . . . .
T[1][1] T[1][3] T[1][4] T[1][4] T[1][5] - T[11][1] T[11][2] T[11][3] T[11][4] T[11][5]
T[1] T[11]

C - DÉCLARATION D'UN TABLEAU A DEUX DIMENSIONS


Nom_de _tableau [index1][index2] : tableau de type

Exemple :
Moyenne [32][11] : tableau de réel
Tableau de 32 lignes et 11 colonnes servant aux moyennes de type réel.

Magiccube [8][8][8] : tableau de réel


Tableau représentant un "magic cube" de 8 x8 8x éléments.
D - APPEL DES ÉLÉMENTS D'UN TABLEAU A PLUSIEURS DIMENSIONS
L'appel d'un des éléments d'un tableau à plusieurs dimensions se fait en précisant la ligne puis la colonne
souhaitée.

Exemple
Moyenne [5][3] permet de travailler avec l'élément de la ligne 5 dans la colonne 3.

3 - ALGORITHME MANIPULANT DES TABLEAUX À DEUX


DIPMENSIONS
A - MÉTHODE DE PARCOURS D'UN TABLEAU À DEUX DIMENSIONS
En dehors de l'accès aléatoire à un ou plusieurs éléments dans un tableau, on est souvent amener lors
d'opérations de saisie, d'affichage, de calculs, … à parcourir le tableau dans sa totalité.
Le parcours peut alors s'effectuer lignes par lignes ou bien colonnes par colonnes.
a) LIGNE PAR LIGNE
L'algorithme suivant permet la saisie des notes dans le tableau. Les notes sont saisie élèves après élève.

Algo MoyennesElèves
Pré-conditions: {}
Post-conditions: {permet de saisir les notes de élèves et le calcul des moyennes}
Var

53 © FNM
Algorithmique

Tnotes[11][5]: tableau de réels


Nbeleves, Nbmatières, ligne, colonne : entier
Début
Saisir ("Entrer le nombre d'élèves de la classe (<11)", Nbeleves)
Saisir ("Entrer le nombre de notes à saisir par élève (<5)", Nbmatières
Pour ligne de 1 à Nbeleves
Pour colonne de 1 à Nbmatière
Saisir ("entrer la note :", Tnotes[ligne][colonne]
Fin pour
Fin pour
Pour ligne de 1 à Nbeleves
Tnotes[ligne][5]Å0
Pour colonne de 1 à Nbmatière
Tnotes[ligne][5]Å Tnotes[ligne][5]+Tnotes[ligne][colonne]
Fin pour
Tnotes[lignes][5]ÅTnotes[ligne][5]/Nbmatière
Fin pour
Fin

b) COLONNE PAR COLONNE


Le parcours par colonne permet de calculer par exemple la moyenne par matière ainsi que le moyenne
générale :

Pour colonne de 1 à Nbmatière +1
Tnotes[11][colonne]Å0
Pour ligne de 1 à Nbelève
Tnotes[11][colonne]Å Tnotes[11][colonne]+ Tnotes[ligne][colonne]
Fin pour
Tnotes[11][colonne]Å Tnotes[11][colonne]/Nbeleve
Fin pour
B - UTILISATION D'UN TABLEAU A DEUX DIMENSIONS
Algorithme permettant la gestion des notes des élèves.

Algo MoyennesElèves
Pré-conditions: {}
Post-conditions: {permet de saisir les notes de élèves et le calcul des moyennes}
Var
Tnotes[11][6]: tableau de réels
Nbeleves, Nbmatières : entier
Début
Saisir ("Entrer le nombre d'élèves de la classe (<11)", Nbeleves)
Saisir ("Entrer le nombre de notes à saisir par élève (<5)", Nbmatières
Saisie_des_notes(Tnotes[11][5],Nbeleves, Nbmatières)
Calcul_moyennes_eleve (Tnotes[11][5],Nbeleves, Nbmatières)
Calcul_moyennes_matière (Tnotes[11][5],Nbeleves, Nbmatières)
Affiche_tableau (Tnotes[11][5],Nbeleves, Nbmatières)
Fin

© FNM 54
Algorithmique

Procédure Saisir_des_notes(TN[11][6]: tableau de réels, NbE :entier, NbM : entier)


Spécification : {NbE>0, NbM >0}Æ{Permet de saisir les notes des eleves}
Var
Ligne, colonne : entier
debproc
Pour ligne de 1 à NbE
Pour colonne de 1 à NbM
Saisir ("entrer la note :", TN[ligne][colonne]
Fin pour
Fin pour
Fin proc

Procédure Calcul_moyennes_eleve (TN [11][5]: tableau de réel ,NbE :entier , NbM:entier )


Spécifications {NbE >0, NbM>0}Æ{calcul des moyennes par eleve}
Var
Ligne, colonne : entier
Debproc
Pour ligne de 1 à NbE
TN[ligne][5]Å0
Pour colonne de 1 à NbM
TN[ligne][5]Å TN[ligne][5]+TN[ligne][colonne]
Fin pour
TN[lignes][6]ÅTN[ligne][6]/NbM
Fin pour
Fin proc

Procédure Calcul_moyennes_matière (TB[11][5] :tableau de réel, NbE: entier, NbM: entier)


Spécification :{NbE >0, NbM>0} Æ {Calcul la moyenne par metrière}
Var
Ligne, colonne : entier
Debproc
Pour colonne de 1 à NbM +1
TB[11][colonne]Å0
Pour ligne de 1 à NbE
TB[11][colonne]Å TB[11][colonne]+ TB[ligne][colonne]
Fin pour
TB[11][colonne]Å TB[11][colonne]/NbE
Fin proc

Procédure Affiche_tableau (TN[11][5]: tableau de réel ,Nbe : entier,NBm :entier)


Spécification :{Nbe >0, NBm >0}Æ{affiche les valeur du tableau}
Var
Li, col : entier
Debproc
Pour li de 1 à Nbe+1
Pour col de 1 à NBm+1
Afficher TN[li][col]
Fin pour
Fin pour
Fin proc

55 © FNM
Algorithmique

LES TYPES UTILISATEUR


I- INTRODUCTION
Dans certains cas les types de données à manipulés ne sont pas des types simples mais des types
composés de données de types différents. Lorsque l'on veut gérer des élèves d'une classe on a besoin
d'avoir leur nom, leur prénom et leur date de naissance. Les dates elles même ne sont pas de types qui
existent en algorithmique.
Pour pouvoir gérer des variables ou des tableaux de dates où d'élève l'utilisateur a besoin de définir de
nouveau type de données, ils sont appelés "types utilisateur".

II - DÉCLARATION ET UTILISATION DES TYPES


1 - DÉCLARATION DES TYPES UTILISATEURS
La déclaration des types utilisateur se fait dans l'algorithme principal, avant la déclaration des variables
par la commande suivante :

Type nom du type = structure


Définition des éléments du type
Fin structure

Exemple :
Type date = structure
Jour, mois, année : entier
Fin structure
Type Eleve = structure
Nom : chaîne de caractères
Prénom : chaîne de caractères
DateNaissance : date
Fin structure

2 - DÉCLARATION DE VARIABLES DE TYPE UTILISATEUR


La déclaration des variables de type utilisateur se fait de la même façon que les autres types.

Exemple :
Marc : Eleve
Classe[22] : tableau de élèves

3 - UTILISATION DES ÉLÉMENTS D'UN TYPE.


Lorsque l'on désir accédé à un des élément du type de donnée utilisateur on utilise la notation avec point :
Nomvariable.element

Exemple
Marc.nom Å "dupont"
Marc.prénomÅ"Marc"
Marc.dateNaissance.JourÅ 1
Marc.dateNaissance.moisÅ 1
Marc.dateNaissance.annéeÅ 1969

© FNM 56
Algorithmique

LES FICHIERS
I- LA NOTION DE FICHIER
1 - INTRODUCTION
Toutes les données utilisées jusqu'à maintenant dans les algorithmes des séquences précédentes étaient
stockées dans des variables en mémoire centrale et n'étaient de ce fait accessible Que le temps d'exécution
du programme.

La mémoire centrale d'un ordinateur étant par définition volatile, il n'est donc pas envisageable de se
limiter à la simple notion de variable pour pouvoir conserver de façon pérenne des données importantes.
Les données relatives à l'activité d'une entreprise (données relatives aux clients, fournisseurs, produits,
commandes ...) doivent pouvoir être mémorisées de façon durable pour pouvoir être réutilisées à la
demande.

Ce besoin de conservation de l'information passe par l'utilisation de supports non volatiles (disques,
bandes magnétiques, ...) et nécessite de structurer l'information en fichiers.

2 - DÉFINITION
Un fichier est une collection d'informations de même nature ayant trait à un même sujet et se trouvant sur
un support quelconque (bande ou cassette magnétique, disque ou disquette magnétique, cd-rom, etc.).
Ainsi les données relatives aux clients seront regroupées dans un fichier "clients" celles relatives aux
fournisseurs, dans un fichier "fournisseurs", etc.

Le choix du support revêt une extrême importance, et conditionne fortement les opérations qu'il sera
possible de réaliser sur un fichier. La capacité du support (de quelques Ko à plusieurs Go) détermine la
taille maximale du fichier. Le temps d'accès moyen (de quelques milli-secondes à plusieurs minutes)
conditionne le confort d'accès à l'information.

D'un point de vue de l'analyse, un fichier est considéré comme un élément du modèle physique de
données. Le fichier est au MPD ce que la relation est au MLD, ainsi si une relation est composée de n-
uplets, un fichier se compose d'articles ou d'enregistrements.

3 - LA STRUCTURE D'UN FICHIER


Un fichier est structuré en article ou enregistrements, comportant des informations élémentaires
appelées rubriques, champs, zones ou propriétés.
Représentation d'un fichier sous forme de fiches, où chaque fiche constitue un article ou un
enregistrement du fichier.
4ème fiche N° élève: 961111
ème
3 fiche N° élève: 960088
2ème fiche N° élève: 960022
1ème fiche N° élève: 960011
Nom : MARTIN
Prénom : Julien
Adresse: …..
Moyenne : 18

57 © FNM
Algorithmique

Représentation d'un fichier sous forme de tableau, où chaque ligne constitue un article ou un
enregistrement.
N° Elève Nom élève Prénom Elève Adresse Moyenne
1 MARTIN Jules … 18
2 DURAND Gustave … 16
3 OLLIVER Gilles … 14
4 PETIT Jean … 11

Les information N° Elève, Nom, prénom, adresse et moyenne sont appelées propriétés, rubriques, champs
ou zones du fichiers.

En algorithmique, nous définissons la structure d'un fichier comme suit :


DEBUT ARTICLE nom enregistrement
Déclaration de l'enregistrement
FIN ARTICLE

ENREGISTREMENT article nom enregistrement
Déclaration de l'enregistrement
FIN ENREGISTREMENT

La déclaration de l'enregistrement s'effectue à l'aide des types de variables défini au début de ce cours. Il
est également possible de déclarer des variables structurées à l'aide des instructions vu au chapitre
précédent.

Exemple :
Soit à décrire le contenu d'un fichier ELEVES
DEBUT ARTICLE Elève
Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
STRUCTURE Adresse
Rue : chaîne de caractères
Commune : Chaîne de caractères
FIN STRUCTURE
Moyenne : réel
FIN ARTICLE

4 - LE SYSTÈME DE GESTION DES FICHIERS


Les fichiers traités par les moyens informatiques, sont gérés par un module particulier du système
d'exploitation nommé système de gestion de fichiers ou SGF. Le SGF, associé à un langage de
programmation offre ainsi au programmeur un certain nombre de facilités en matières d'utilisation de
fichiers.

5 - CARACTÉRISTIQUES D'UN FICHIER


A - CARACTÉRISTIQUES FONCTIONNELLES D'UN FICHIER
• Volume : détermine la place occupée en caractères par le fichier
• Taux de renouvellement : c'est le nombre relatif d'articles nouveaux qui apparaissent en
un an.

© FNM 58
Algorithmique

• Taux d'accroissement : c'est le rapport du nombre absolu d'articles nouveaux au nombre


total des enregistrements pour une période donnée.
• Fréquence d'utilisation : c'est le nombre de fois qu'un fichier intervient dans des
traitements pour une période donnée.
• Taux élémentaire de consultation : c'est le rapport du nombre moyen d'articles consultés
en une séance, au nombre d'articles du fichier. C'est une information qui caractérise un
fichier vis à vis d'un traitement déterminé.
B - CARACTÉRISTIQUES TECHNIQUES D'UN FICHIER
a) SUPPORT DE STOCKAGE
Caractérise le support utilisé pour conserver le fichier (papier, support optique, support magnétique, etc.).
Le choix du support est fonction des caractéristiques fonctionnelles et induit très fortement les autres
caractéristiques techniques. De façon générale, le support le plus usité aujourd'hui est le disque
magnétique. La bande magnétique ou ses dérivés sont généralement réservées à l'archivage.
b) ORGANISATION
Caractérise le mode de rangement des articles du fichier et détermine la façon dont les enregistrements
seront stockés et retrouvés dans le fichier. Choisie par l'analyste, l'organisation reste en permanence
attachée au fichier. Il s'agit dès lors de la caractéristique la plus importante qui conditionne très fortement
les opérations autorisées sur le fichier. On distingue les trois organisations suivantes:
i) Organisation séquentielle
Les enregistrements d'un fichier séquentiel sont accessibles dans leur ordre de création uniquement. Pour
atteindre un enregistrement donné, il faut lire tous ses précédents. Il s'agit d'une organisation impossible à
utiliser dans des applications interactives nécessitant un temps d'accès minimum et constant à
l'information.
ii) Organisation relative
Les enregistrements d'un fichier relatif portent chacun un numéro d'ordre relatif à leur emplacement dans
le fichier. Le premier enregistrement porte le numéro I, le second enregistrement le numéro 2, etc. Ils
peuvent être lus et écrits directement grâce à ce numéro d'ordre, ce qui autorise un accès aléatoire à
l'information.
iii) Organisation séquentielle indexée
Dans cette organisation, une structure supplémentaire est associée au fichier Cette structure appelée
"index" permet un accès plus rapide aux enregistrements du fichier Cet index est construit à partie de
certains champs de l'enregistrement du fichier II peut y avoir plusieurs index associés au fichier
Les organisations relatives et indexées ne sont possibles que sur des supports autorisant un temps d'accès
constant à l'information (disquette ou disque magnétique"
c) MÉTHODE D'ACCES
Caractéristique étroitement dépendante de l'organisation, elle qualifie la technique utilisée pour accéder
aux articles du fichier Le type d'accès à un fichier est choisi par le programmeur et détermine la façon
dont les enregistrements seront recherchés dan, le f;chie,
i) Accès séquentiel
L'accès séquentiel sur un fichier délivre les enregistrements les uns à la suite des autres :
- dans leur ordre de création pour un fichier séquentiel.
- dans l'ordre des numéros relatifs pour un fichier relatif.
- dans l'ordre de l'index pour les fichiers indexés.

59 © FNM
Algorithmique

ii) Accès direct (ou aléatoire)


L'accès direct n'est possible que sur les fichiers relatifs ou indexés. On accède directement à un
enregistrement d'un fichier relatif en, connaissant sa position relative dans le fichier. On accède
directement à un enregistrement d'un fichier indexé en connaissant la ou les rubriques indexées.
iii) Accès dynamique
Il s'agit d'une combinaison de l'accès direct et de l'accès séquentiel. Combinaison réservée à l'organisation
séquentielle indexée.
d) MODE OPÉRATOIRE
On distingue principalement quatre modes de traitement.
- en lecture uniquement
- en écriture uniquement
- en mise à jour (lecture et écriture)
- en extension
Cette notion est généralement traduite par le mode d'ouverture du fichier en matière de programmation.
e) TRAITEMENTS EFFECTUÉS SUR DES FICHIERS
• Création : opération qui consiste à mettre en place un fichier sur un support donné.
• Tri : opération consistant à ordonner un fichier en fonction d'un certain nombre de critères
Cette opération s'effectue souvent à l'aide d'une commande du système d'exploitation
• Mise à jour: opération qui consiste à actualiser un fichier. La mise à jour est caractérisée
par les trois opérations suivantes :
- l'ajout d'un nouvel article.
- la modification d'un article existant
- la suppression d'un article existant
En fonction de l'organisation choisie, ces opérations sont plus ou moins simples à réaliser.

Consultation : demande d'information sur un fichier.


L'ensemble de ces traitements s'appuie sur des opérations élémentaires.
f) OPÉRATIONS ÉLÉMENTAIRES :
La gestion des fichiers d'un point de vue algorithmique repose sur les opérations ou primitives
élémentaires suivantes :

Opération effectuée Primitive de base


Ouverture OUVRIR nom fichier
Lecture LIRE nom enregistrement
Ecriture ECRIRE nom enregistrement
Modification REECRIRE nom enregistrement
Suppression SUPPRIMER nom enregistrement
Positionnement POSITIONNER nom enregistrement
Fermeture FERMER nom fichier

L'ensemble de ces opérations sera détaillé par la suite lors de l'étude plus approfondie de chaque
organisation. Toutefois voici quelques notions de base relatives à chacune de ces opérations élémentaires.
i) Ouverture
Cette opération nécessaire avant l'utilisation de tout fichier permet d'indiquer le mode de traitement
associé au fichier. Indiquée en début de programme, cette opération conditionne l'ensemble des
opérations possibles dans la suite de l'algorithme. Le mode de traitement sera effectif jusqu'à ce que le

© FNM 60
Algorithmique

fichier soit fermé. Des modes de traitement différents pouvant être utilisés pour un même fichier, il sera
nécessaire en cas de changement de mode opératoire de fermer puis d'ouvrir à nouveau le fichier.
Toute ouverture de fichier positionne un pointeur avant le premier enregistrement du fichier.
L'emplacement de ce pointeur évolue au gré des différentes opérations.
ii) Lecture
Cette opération permet de lire un article du fichier en plaçant les données de l'article dans les variables
relatives à la structure du fichier (cf. définition de la structure du fichier). Le transfert des données s'opère
du fichier vers les variables en mémoire.
iii) Ecriture
Cette opération permet d'écrire un article dans le fichier en plaçant le contenu des variables relatives à la
structure du fichier dans l'article. Le transfert des données s'opère des variables vers le fichier.
iv) Modification
Cette opération permet de modifier l'article du fichier sur lequel est positionnée le pointeur. Le transfert
des données s'opère des variables vers le fichier. Cette opération est obligatoirement précédée d'une
opération de lecture.
v) Suppression
Cette opération permet de supprimer l'article du fichier sur lequel est positionné le pointeur courant. La
suppression peut être logique (l'article est 'marqué' comme supprimé) ou physique (l'article est réellement
supprimé du fichier).
vi) Positionnement
Cette opération permet de positionner explicitement le pointeur courant sur un article déterminé. Cette
opération ne provoque pas de lecture de l'article.
vii) Fermeture
Cette opération permet de clore le fichier utilisé. Lors de la création ou de la mise à jour d'un fichier, elle
permet de positionner une marque de fin de fichier. Cette opération a pour conséquence de rendre
inaccessible le fichier concerné. Il est donc impossible de passer une quelconque opération élémentaire
sur un fichier fermé.

Schéma récapitulatif

Variables Lecture
en mémoire
centrale Ecriture
représentant Fichier de
le structure Î données sur
Modification
du fichier disque
magnétique
Suppression

61 © FNM
Algorithmique

II - L'ORGANISATION SÉQUENTIELLE
1 - GÉNÉRALITÉS
Avec cette organisation, les articles sont lus dans l'ordre où ils ont été écrits. A moins d'effectuer un tri,
l'ordre des articles ne change plus.
A - CONTRAINTES
Il s'agit d'une organisation impossible à utiliser dans des applications interactives nécessitant un temps
d'accès minimum et constant à l'information car pour atteindre un enregistrement donné, il faut lire tous
ses précédents.

De plus cette organisation implique des contraintes importantes, notamment en matière de mise à jour du
fichier. Certains SGF n'autorisent ni la suppression ni la modification d'un article. De plus l'ajout d'un
article n'est possible qu'à la fin du fichier. La mise à jour se solde alors par une nouvelle écriture du
fichier.

Les principaux inconvénients sont :


- l'accès à l'information est exclusivement séquentiel.
- l'accès à un petit nombre d'articles s'accompagne automatiquement d'un gaspillage de temps.
- selon les résultats à obtenir, il est souvent nécessaire de trier le fichier.
- les mises à jour nécessitent généralement la réécriture du fichier, donc un doublement de la place
occupée.
B - AVANTAGES
L'organisation séquentielle convient le mieux aux fichiers présentant les caractéristiques suivantes :
- la longueur du fichier est stable.
- la totalité ou la majorité des articles sont régulièrement traités (60%)

Cette organisation de fichier requiert peu ou pas du tout de programmation pour J'accès aux articles car Je
programmeur n'a pas à s'occuper de gestion d'index ou d'algorithme de gestion d'une clef relative.

Cette organisation est la seule utilisable sur bande magnétique

2 - ALGORITHMIQUE LIEE A L'ORGANISATION SEOUENTIELLE


A - DÉCLARATION
La déclaration permet d'indiquer l'organisation du fichier ainsi que la structure de l'article.
FICHIER nom-fichier en organisation séquentielle
Déclaration de l'enregistrement
Exemple
Soit à décrire le contenu d'un fichier ELEVES.
FICHIER Elèves en organisation séquentielle
DEBUT ARTICLE Elève
Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
STRUCTURE Adresse
Rue : chaîne de caractères

© FNM 62
Algorithmique

Commune : Chaîne de caractères


FIN STRUCTURE
Moyenne : réel
FIN ARTICLE
B - OUVERTURE
L'opération d'ouverture nécessaire avant toute utilisation du fichier, permet d'indiquer le mode opératoire
associé au fichier. Lors de l'ouverture du fichier, le pointeur courant est positionné avant le premier
article.
Syntaxe
OUVRIR nomFichier en mode opératoire

Mode opératoire :
- Lecture: seule l'opération de lecture est autorisée.
- Ecriture: seule l'opération d'écriture est autorisée. Ce mode opératoire n'est à utiliser que pour un
nouveau fichier, car il est considéré comme vide.
- Extension: seule l'opération d'écriture est autorisée, dans ce cas les articles sont ajoutés en fin de
fichier

Remarque : pour des raisons exclusivement pédagogiques nous ne présentons pas les possibilités offertes
par certains S.G.F de modification ou de suppression d'un article.
C - FERMETURE
Opération inverse de l'ouverture, cette opération permet de libérer les ressources utilisées pour gérer le
fichier, et éventuellement de pouvoir l'ouvrir à nouveau dans un autre mode opératoire.
Syntaxe
FERME nom fichier
D - LECTURE
Le pointeur est positionné sur l'article suivant, le contenu de cet article étant alors placé dans les variables
relatives à la structure du fichier. La lecture s'effectue toujours en avant(du premier au dernier
enregistrement du fichier) et il n'est donc pas possible d'effectuer de lecture en arrière.
Syntaxe
LIRE nom enregistrement

Remarque la fonction booléenne FinFichier(nom-fichier) permet de déterminer si la fin du fichier est


atteinte. Ainsi pour traiter séquentiellement un fichier, il est fortement conseillé de respecter l'algorithme
suivant :

Ouvrir nom-fichier
Lire nom-enregistrement
Tant que Non FinFichier(nom-fichier) Faire
…traitement
Lire nom-enregistrement
Fin Tant Que
Fermeture nom fichier
E - ECRITURE
Cette opération permet d'écrire un article dans un fichier séquentiel. En fonction du mode opératoire
retenu, deux cas sont possibles :

63 © FNM
Algorithmique

- Si le mode opératoire est "écriture", le fichier étant vide au départ, les articles sont écrits les uns à
la suite des autres.
- Si le mode opératoire est "extension", alors les articles ajoutés sont placés après le dernier article
du fichier.
Syntaxe
ECRIRE nom enregistrement

3 - QUELQUES EXEMPLES D'ALGORITHMES


A - CRÉATION D'UN FICHIER SÉQUENTIEL
Objectif : on souhaite saisir des renseignements propres à chaque élève de la classe et les stocker dans un
fichier séquentiel.

Algo GestElev
Pré-conditions : {}
Post-conditions : {algorithme permettant la saisie des donnes d'un fichier élève}
Fichier Elèves en organisation séquentielle
Début article Elève
Numéro: entier
Nom: chaîne de caractères
Prénom : chaîne de caractères
Structure Adresse
Rue: chaîne Commune : chaîne de caractères
Fin structure
Moyenne: réel
Fin article

DEBUT
Ouvrir Elèves en écriture
Saisir ("Veuillez indiquer un numéro d'élève ou 99 pour arrêter ", Numéro)
Tant que Numéro <> 99 faire
Saisir ("Veuillez indiquer le nom de l'élève : ", Nom )
Saisir ("Veuillez indiquer le prénom de l'élève : ", Prénom)
Saisir ("Veuillez indiquer la rue de l'élève : ", Adresse.Rue)
Saisir ("Veuillez indiquer la commune de l'élève : ", Adresse.Commune)
Saisir ("Veuillez indiquer la moyenne de l'élève : ", Moyenne)
Ecrire Elève
Saisir ("Veuillez indiquer un numéro d'élève ou 99 pour arrêter ", Numéro)
Fin Tant Que
Fermer Elèves
FIN
B - PARCOURS D'UN FICHIER SÉQUENTIEL
Objectif : afficher le contenu du fichier des élèves de la classe

Algo GestElev
Pré-conditions : {}
Post-conditions : {afficher le contenu du fichier des élèves de la classe}
Fichier Elèves en organisation séquentielle
Début article Elève

© FNM 64
Algorithmique

Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
Structure Adresse
Rue Commune ; chaîne de caractères
Fin structure
Moyenne: réel
Fin article

DEBUT
Ouvrir Elèves en lecture
LIRE Elève
Tant que Non FinFichier (Elèves) faire
Afficher (Numéro, nom, prénom, Adresse.Rue, Adresse.Commune, Moyenne)
LIRE Elève
Fin Tant que
FERMER Elèves
FIN
C - RECHERCHE D'UN ARTICLE DANS UN FICHIER SÉQUENTIEL
Objectif : Recherche les caractéristiques des élèves dont ont saisit le nom
a) MÉTHODOLOGIE :
Sachant que :
- La lecture d'un fichier séquentiel s'effectue toujours en avant
- Les noms des élèves sont saisis dans un ordre aléatoire
Il va être nécessaire pour chercher les caractéristiques de chaque élève, d'ouvrir et de fermer le fichier lors
du traitement de chaque élève (cette méthode n'est pas à pratiquer et ne sert qu'à illustrer les limites de
cette organisation)
b) ALGORITHME
Algo GestElev
Pré-conditions : {}
Post-conditions : {Recherche les caractéristiques des élèves dont ont saisit le nom}
Fichier Elèves en organisation séquentielle
Début article Elève
Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
Structure Adresse
Rue Commune ; chaîne de caractères
Fin structure
Moyenne: réel
Fin article
VAR
Nomelv: chaîne de caractères
DEBUT
Saisir ("Veuillez indiquer le nom de l'élève ou STOP pour arrêter", Nomelv)
Tant que Nomelv <>"STOP" faire
Ouvrir Elèves en lecture
LIRE Elève

65 © FNM
Algorithmique

Tant que (Non FinFichier (Elèves) et nom <>Nomelv) faire


LIRE Elève
Fin tant que
Si Finfichier(Elèves) alors
Afficher ("L'élève ne figure pas dans le fichier")
Sinon
Afficher (Numéro, nom, prénom, Adresse.Rue, Adresse.Commune, Moyenne)
Fin si
FERMER Elève
Saisir ("Veuillez indiquer le nom de l'élève ou STOP pour arrêter", Nomelv)
Fin Tant que
FIN
c) LIMITES
Le temps de recherche d'un élève étant fonction de son emplacement dans le fichier, on atteint bien au
travers de cet exemple les limites de l'organisation séquentielle. Limites qui peuvent se traduire par une
baisse globale des performances et surtout par une programmation "lourde".
D - TRAITEMENT DE RUPTURE SUR UN FICHIER SÉQUENTIEL
Les traitements de rupture sur un fichier séquentiel utilisent le fait qu'un fichier séquentiel est ordonné
selon un ou plusieurs critères. On profite alors de cet ordre pour afficher le contenu du fichier ou ben
effectuer certains calculs.

Exemple : liste des élèves de chaque classe et comptage du nombre d'élèves par classe.

Le fichier organisé en séquentiel est trié par N° de classe et par ordre alphabétique.
On souhaite obtenir par classe la liste des élèves et le nombre d'élèves par classe.
a) MÉTHODOLOGIE
Le principe repose sur la mémorisation du numéro de classe du premier élève de chaque classe afin de
détecter la rupture de classe.
b) ALGORITHME
Algo GestElev
Pré-conditions : {}
Post-conditions : {imprime par classe la liste des élèves}
Fichier Elèves en organisation séquentielle
Début article Elève
Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
Classe : entier
Fin article
VAR
NBeleve, Memeclasee : entier
DEBUT
OUVRIR Elèves en lecture
LIRE Elève
Tant que (non FinFichier(Elèves)) faire
Afficher ("Liste des élèves de la classe : " & Classe)
Memeclasse Å Classe

© FNM 66
Algorithmique

NBeleveÅ 0
Tant que (Memeclasse=N° classe et non FinFichier(Elèves)) faire
Afficher (Nom prenom)
NBeleveÅ NBeleve +1
Lire Elève
Fin tant que
Afficher ("le nombre d'élèves de la classe est de : & NBelev)
Fin tant que
Ferme Elèves
FIN

Le principe de cette rupture peut se traduire de façon générale comme suit :

Début
Ouvrir Fichier en Lecture
Lire Fichier
Tant que (non FinFichier(Fichier)) faire
Mémoriser_Elément_de_Rupture()
Traitement_avant _Rupture()
Tant que (Non Rupture et non FinFichier(Fichier)) faire
Traitement_Même_niveau_rupture()
Lire Fichier
Fin tant que
Traitement_Après_rupture()
Fin tant que
Fermer fichier
Fin
E - LECTURE EN CONCORDANCE DE PLUSIEURS FICHIERS SÉQUENTIELS
La lecture en concordance de deux ou plusieurs fichiers séquentiels permet le balayage de ces fichiers
dans un ordre déterminé et de façon séquentielle.

Exemple :
2diter la liste des élèves de chaque classe

On dispose :
- D'un fichier des élèves trié par numéro de classe et par ordre alphabétique dans chaque classe.
- D'un fichier ordonné par numéro de classe et comportant la désignation en clair de la classe.

Les deux fichiers sont en organisation séquentielle.

Le fichier des élèves :


N° élève Nom Prénom N° classe
960011 Abascal Christophe IG1
960008 Bastian Gérald IG1
960018 Decker Stéphane IG1

950012 Aktir Hassan IG2
950005 Berk Jean IG2

67 © FNM
Algorithmique

Fichier des classes


IG1 BTS informatique de gestion 1ere Année
IG2 BTS informatique de gestion 2ème Année
….

On souhaite obtenir :

Liste des élèves de la classe de : BTS informatique de gestion 1ere Année

Nom Prénom
Abascal Christophe
Bastian Gérald
Decker Stéphane

Liste des élèves de la classe de : BTS informatique de gestion 2ème Année

Nom Prénom
Aktir Hassan
Berk Jean

a) MÉTHODOLOGIE
Lors d'un traitement en concordance, un des fichiers est dit maître, car il détermine le traitement. Le
fichier maître dans cet exemple est le fichier "Classes" car la liste doit être principalement triée par classe
et pour chaque classe par ordre alphabétique des élèves.
b) ALGORITHME
Algo GestElev
Pré-conditions : {}
Post-conditions : {imprime par classe la liste des élèves}
Fichier Elèves en organisation séquentielle
Début article Elève
Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
N° classe : entier
Fin article

Fichier Classes en organisation séquentielle


Début article Classe
N° classe : entier
Désignation : chaîne
Fin article

VAR
NBeleve : entier

© FNM 68
Algorithmique

DEBUT
OUVRIR Elèves en Lecture
OUVRIR Classes en Lecture
Lire Elève
Lire Classe
Tant que (non FinFichier(Classes) faire
Afficher ("Liste des élèves de la classe :" & Désignation)
Tant que (Elève.N° classe = Classe.N° classe) faire
Afficher (Nom Prenom)
Lire Elève
Fin tant que
Lire Classe
Fin Tant que
Fermer Elèves, Classes
Fin

Remarque :
Lorsque deux propriétés portent le même identifiant dans des fichiers différents, il est possible de préfixer
ces propriétés du nom de l'article de leur fichier d'appartenance.

F - MISE À JOUR D'UN FICHIER SÉQUENTIEL


La mise à jour f'un fichier séquentiel doit permettre :
- l'ajout d'un nouvel article
- la modification ou la suppression d'un article existant.

Compte tenu du cratère obsolète de l'organisation séquentielle nous ne développerons pas les techniques
de mises à jour d'un fichier séquentiel.
Retenons simplement que dans la pratique et en l'absence de primitives particulières, l'organisation
séquentielle n'est pas utilisée dans des applications de mise à jour en temps réel nécessitant une forte
interactivité et un temps de réponse constant.
Par contre la mise à jour de fichiers séquentiels est possible lorsqu'il s'agit de traitement en temps différé.
Dans ce cas, un fichier des mises à jour à effectuer est associé au fichier mis à jour. Les deux fichiers sont
alors triés sur les mêmes critères afin d'accroître sensiblement les performances.
L'ajout se fait toujours à la fin du fichier.
a) ALGORITHME
Algo GestElev
Pré-conditions : {}
Post-conditions : {ajoute un élève au fichier}
Fichier Elèves en organisation séquentielle
Début article Elève
Numéro: entier
Nom : chaîne de caractères
Prénom : chaîne de caractères
Structure Adresse
Rue : chaîne
Commune : chaîne
Fin structure

69 © FNM
Algorithmique

Moyenne : réel
Fin article

Début
Ouvrir Elèves en extension
Saisir ("Veuillez indiquez le numéro de l'élève", Numéro)
Saisir ("Veuillez indiquez le nom de l'élève", Nom)
Saisir ("Veuillez indiquez le Prénom de l'élève", Prénom)
Saisir ("Veuillez indiquez la rue de l'élève", Adresse.rue)
Saisir ("Veuillez indiquez la commune de l'élève", Adresse.commune)
Saisir ("Veuillez indiquez la moyenne de l'élève", Moyenne)
Ecrire Elève
Fermer Elèves
FIN

III - L'ORGANISATION RELATIVE


1 - GENERALITES
A - DÉFINITION
L'organisation de fichier relative ou directe permet l'accès direct aux articles sans passer par un index (cf.
organisation séquentielle indexée) et sans avoir à effectuer une recherche séquentielle dans tout le fichier.

Un fichier relatif peut être considéré comme une suite d'articles, chacun identifié par un numéro relatif
indiquant sa position par rapport au début du fichier.

Une position d'article ne contient pas forcément des informations utilisables, auquel cas elle est
considérée comme inactive.

Le fichier relatif est obligatoirement sur un support adressable.

Exemple
Position N° élève Nom Prénom N° classe
1 96001 Absacal Christophe IG1
2 96008 Bastian Gérald IG1
3
4 960018 Becker Stéphane IG1
5 960021 Benois Sophie IG1
6
7 960028 Dupont Louis IG1
8
9 950012 Aston Matin IG2
10 950015 Bond James IG2
11
12 950014 Cantini Sophie IG2
13 950020 Dubois Marie IG2

Les position relatives 3, 6, 8 et 11 sont vides.

© FNM 70
Algorithmique

B - CLÉ RELATIVE
Le numéro relatif d'article est appelé clé relative. Lorsqu'il n'y a pas d'attribut permettant de fournir
directement la position relative de l'enregistrement dans le fichier, l'utilisateur doit en construire un à
l'aide d'un ou des attributs existants auxquels il applique un algorithme approprié. L'algorithme doit alors
générer des numéro relatifs d'articles en évitant au maximum les synonymes.

C - MODE D'ACCÈS
L'accès aux articles d'un fichier relatif peut être séquentiel ou direct.
- En accès séquentiel les articles sont traités dans l'ordre croissant des numéros relatifs.
- En accès direct la valeur de la clé relative indique l'article à traiter.

a) MÉTHODOLOGIE DE DÉTERMINATION DE LA CLEF RELATIVE


Lors de la manipulation d'un fichier relatif le programmeur a le choix entre deux méthodes :

Méthode n°1: il est possible d'associer à chaque article un numéro d'ordre servant de clef relative. Ce
numéro peut ou non faire partie de la définition du fichier. Dans ce cas la manipulation du fichier relatif
se résume à l'utilisation des primitives (instructions) étudiées au paragraphe suivant.

Exemple : dans le fichier des élèves d'une classe, on utilise l'ordre alphabétique et on décide que le
premier élève aura la position 1, le deuxième la position 2, etc...
Position N° élève Nom Prénom N° classe
1 96001 Absacal Christophe IG1
2 96008 Bastian Gérald IG1
3 960018 Becker Stéphane IG1
4 960021 Benois Sophie IG1
5 960028 Dupont Louis IG1
6 …

S'il est facile de retrouver un élève à partir de sa position alphabétique dans la classe dans un fichier de
faible volume, cette méthode n'est plus utilisable lorsque l'on manipule des fichiers importants.
Supposons que l'on constitue un fichier relatif de l'ensemble des élèves d'un lycée comportant
2000 élèves. Il n'est pas possible de connaître par coeur la liste alphabétique des élèves ! Bien entendu on
peut attribuer à chaque élève un numéro d'ordre croissant de 1 à n, qui peut être retenu comme clef
relative. Mais souvent un numéro servant d'identifiant a une signification fonctionnelle et traduit une
réalité du domaine où il est usité. Ainsi le numéro Insee a une signification fonctionnelle et peut servir
d'identifiant (hormis le fait que son utilisation soit limitée par la C.N.I.L !). Par contre le numéro Insee ne
peut être utilisé directement comme clef relative. L'on est donc amené à le convertir en clef relative, c'est
l'objectif de la deuxième méthode.

Méthode n°2: supposons que dans le lycée chaque élève soit identifié par un numéro indiquant l'année
d'entrée dans l'établissement (un élève pouvant rester plusieurs années), associé à un numéro d'ordre
d'inscription dans l'année. Ainsi l'élève inscrit en 11° position l'année 1995 aura le numéro 950011.
Il n'est pas conseillé d'utiliser ce numéro, car cela supposerait de réserver au moins 950011 emplacements
pour stocker les 2000 élèves du lycée, ce qui se traduit indiscutablement par une perte de place! Le
problème consiste donc à concevoir un algorithme permettant de passer d'un numéro fonctionnel ou clef
naturelle à une clef relative indiquant la position de l'article dans le fichier.

Clef naturelle Algorithme Clef relative

71 © FNM
Algorithmique

Compte tenu qu'il y a 2000 élèves à enregistrer, il est nécessaire que l'algorithme délivre une position
relative comprise entre 1 et 2000. La clef naturelle étant de type "chaîne", l'instruction suivante permet de
passer de la clef naturelle à la clef relative:

Clef rel Å((Cvnombre(clef naturelle) - (Cvnombre(Gauche(clef naturelle,2)) * 10000)) mod 2000) + 1

La fonction Gauche permet d'extraire les 2 caractères à gauche de la clef naturelle.


La fonction Cvnombre convertit une donnée de type chaîne en nombre.

Exemple
Soit la clef naturelle 960011, la clef relative est calculée à l'aide de l'expression

Clef relative := ((Cvnombre('960011') -(Cvnombre('96') *10000)) mod 2000) + 1


Clef relative :=((96011 -96000) mod 2000) + 1 = 11 mod 2000 + 1 = 12

L'élève ayant le numéro 960011 sera écrit dans le fichier à la position 12.
Le même calcul appliqué au numéro 961897 donne une position relative égale à 1898. Mais le numéro
950011 donne également une position relative é~ale à 12 !

Remarque
Des clefs naturelles différentes peuvent donc délivrer des positions relatives identiques. Ce phénomène
peut être réduit en utilisant des méthodes de calcul de clefs relatives plus ou moins sophistiquées
(élévation au carré, pliage de nombre, ...) mais en tout état de cause quelque soit la qualité de la méthode
(celle présentée précédemment est facile mais très médiocre) on aboutit toujours à des problèmes
d'homonymies (deux clefs naturelles différentes pour une même position relative). Ce problème
d'homonymie pose la limite de l'organisation relative. Toutefois l'homonymie peut être gérée à l'aide
d'une technique de chaînage des enregistrements homonymes.

Exemple :
On désire enregistrer dans un fichier relatif les 11 élèves suivants. On souhaite accéder à ces élèves à
l'aide de la clef naturelle; il est donc nécessaire d'appliquer un calcul de clef relative qui optimise la place
occupée par le fichier. Modifions la méthode précédente :

Clef relative := ((Cvnombre(clef naturelle) -(Cvnombre(Gauche(clef naturelle,2)) * 10000)) mod 11) + 1

Voici les clefs relatives obtenues :


N° élève Nom Prénom N° classe Clef relative
960011 Absacal Christophe IG1 1
960008 Bastian Gérald IG1 9
960018 Becker Stéphane IG1 8
960021 Benois Sophie IG1 11
960028 Dupont Louis IG1 7
950012 Aston Matin IG2 3
950011 Bond James IG2 1
950021 Cantine David IG2 11
950022 Dupont Louis IG2 1
950028 Emile Jean IG2 7
950088 Martin Jean IG2 9

© FNM 72
Algorithmique

Si l'algorithme est simple, il n'en résulte pas moins que plusieurs élèves peuvent avoir la même clef
relative. On est donc amené à prévoir dans le fichier une zone de "débordement" permettant de gérer les
articles ayant la même clef relative. Le premier article homonyme est enregistré dans l'intervalle 1 à 11,
les autres à partir de la position 12. Les articles sont "chaînés" les uns aux autres afin de pouvoir être
retrouvés lors d'une consultation.

Exemple: voici la représentation du fichier en utilisant les liens de chaînages.


Position N° élève Nom Prénom N° classe Article
suivant
1 960011 Absacal Christophe IG1 12
2
3 950012 Aston Matin IG2
4
5
6
7 960028 Dupont Louis IG1 15
8 960018 Becker Stéphane IG1
9 960008 Bastian Gérald IG1 16
10
11 960021 Benois Sophie IG1 13
12 950011 Bond James IG2 14
13 950021 Cantine David IG2
Zone de
14 950022 Dupont Louis IG2
débordement
15 950028 Emile Jean IG2
16 950088 Martin Jean IG2

Les élèves sont enregistrés dans l'ordre chronologique de saisie. La recherche dépend donc de cet ordre en
cas d'homonymie.
Ainsi pour rechercher l'élève …. Ayant pour numéro 950021 et comme clef relative 1, il est nécessaire
d'accéder aux élèves ….

b) LIMITES DE L'ORGANISATION RELATIVE.


Si l'organisation relative fournit des primitives de base, la gestion des liens de chaînage est entièrement à
la charge du programmeur. Aucune organisation relative ne permet de gérer facilement ce type de
contrainte. Cet inconvénient pose les limites de l'organisation relative qui dans le cas d'utilisation de clefs
naturelles induit une programmation plus compliquée.
Ainsi lorsque la clef naturelle ne peut pas fournir directement une position relative, on préférera utilisée
l'organisation séquentielle indexée. Il n'en est pas moins vrai que dans le cadre d'une utilisation classique
(clef relative = clef naturelle) l'organisation relative reste la plus performante.
Notons également que certains langages n'admettent que l'organisation relative, ce qui amène les
développeurs à construire une organisation séquentielle indexée à partir de l'organisation relative.

2 - ALGORITHMIQUE LIEE A L'ORGANISATION


RELATIVE
A - DÉCLARATION
La déclaration permet d'indiquer l'organisation du fichier ainsi que la structure de 1a structure de l'article.

73 © FNM
Algorithmique

FICHIER nom-fichier en organisation relative


Accès : {sequentiel | directe | sequentiel direct}
Clef : nom de clef
Déclaration de l'enregistrement
a) ACCÈS
Contrairement à l'organisation séquentielle où l'accès aux enregistrements est toujours séquentiel, dans le
cas de l'organisation relative l'accès peut être :
- séquentiel: lecture les enregistrements les uns à la suite des autres
- direct: accès direct à un enregistrement et lecture de celui-ci
- séquentiel/direct: accès direct, puis lecture séquentielle.
b) CLEF
Ce paramètre permet d'indiquer la variable servant de clef relative et devant être positionnée avant toute
opération d'entrée/sortie. Cette variable ne doit pas faire partie de la structure de l'article.
Exemple
Soit à décrire le contenu d'un fichier ELEVES :
FICHIER Elèves en organisation relative
Accès direct
Clef : clefRelative
Début article Elève
Numéro : entier
Nom :chaine
Prenom : chaine

Fin Article
B - OUVERTURE
a) SYNTAXE
OUVRIR nom-fichier en mode opératoire
b) MODE OPÉRATOIRE :
- Lecture: seule l'opération de lecture est autorisée.
- Ecriture: seule l'opération d'écriture est autorisée.
- Lecture/Ecriture : les opérations de mises à jour du fichier sont possibles.
C - FERMETURE
Syntaxe
Fermer nom fichier
D - LECTURE
a) ON DISTINGUE DEUX TYPES DE LECTURE :
La lecture séquentielle du fichier : celle-ci fonctionne exactement comme pour les fichiers séquentiels, les
enregistrements étant lus dans l'ordre de la clef relative. La même fonction FinFichierO permet de
détecter la fin du fichier. Le fichier doit être ouvert en accès séquentiel.
Lire nomenregistrment
b) LA LECTURE DIRECTE DU FICHIER :
Celle-ci nécessite que la variable servant de clef relative contienne la position de l'article auquel on

© FNM 74
Algorithmique

souhaite accéder. Il est possible de mentionner une autre variable que celle servant de clef relative (mais
cela n'est pas conseillé). Le fonction ErreuClef() permet de savoir si l'article à lire a été trouvé ou non. Le
fichier doit être ouvert en accès direct ou séquentiel/direct.

syntaxe
LIRE nom-enregistrement avec clef := nom-clef
Remarque: l'algorithme général de lecture en accès direct d'un fichier relatif peut se résumer aux
instructions suivantes :

Algo
Fichier nom-fichier en organisation relative
accès direct
Clef: Cle.fRelative
Début article nom-article
/* description de l'article */
fin article
Var ClefRelative : entier

Début
Ouvrir nom-fichier en lecture /* ouverture du fichier */
Saisir "Veuillez indiquer la position relative d'un article ", CletRelative
Lire nom-enregistrement avec clef := ClejRelative /* lecture article */
Si ErreurClef(nom-fichier) Alors
Afficher ("Cet article n'existe pas")
Sinon
Afficher nom article
Fin si
Fermer nom-fichier
Fin
E - ECRITURE
Cette opération permet d'écrire un article à la position indiquée par la variable déclarée comme clef
relative. La valeur de la clef relative doit être connue avant l'opération d'écriture. La fonction ErreurClef()
permet de savoir si l'opération d'écriture s'est correctement passée. Le fichier doit être ouvert en écriture
ou lecture/écriture.

Syntaxe
ECRIRE nom_enregistrement
F - MODIFICATION
Cette opération permet de modifier un article figurant à la position indiquée par la variable déclarée
comme clef relative ou un article préalablement lu. La fonction ErreurClef() permet de savoir si
l'opération de modification s'est correctement passée. Le fichier doit être ouvert en mode lecture/écriture.

Syntaxe
REECRIRE nom_enregistrement
G - SUPPRESSION
Cette opération permet de supprimer un article figurant à la position indiquée par la variable déclarée
comme clef relative ou un article préalablement lu. La valeur de la clef relative doit être connue avant

75 © FNM
Algorithmique

l'opération. La fonction ErreurClef() permet de savoir si l'opération d'écriture s'est correctement passée.
Le fichier doit être ouvert en mode lecture/écriture.
Syntaxe
SUPPRIMER nom_enregistrement

3 - EXEMPLES D'ALGORITHME UTILISANT UN FICHIER RELATIF


A - ALGORITHME DE MISE À JOUR D'UN FICHIER RELATIF
a) OBJECTIF :
Permettre la mise à jour en mode conversationnel du fichier des élèves d'une classe.
Le fichier est en organisation relative, la clef relative nécessaire à la gestion des articles du fichier est un
nombre compris entre 1 et 32.

L'algorithme doit autoriser les actions suivantes :


- ajout d'un nouvel élève
- modification des renseignements liés à un élève
- suppression d'un élève
- consultation des renseignements liés à un élève.
Exemple de fichier à obtenir
Position N° élève Nom Prénom N° classe
1 960011 Absacal Christophe IG1
2 950012 Aston Matin IG2
3 960028 Dupont Louis IG1
4 960018 Becker Stéphane IG1
5 960008 Bastian Gérald IG1
6 960021 Benois Sophie IG1
7 950011 Bond James IG2
8 950021 Cantine David IG2
9 950022 Dupont Louis IG2
10 950028 Emile Jean IG2
11 950088 Martin Jean IG2

La rubrique "position" ne fait pas partie de l'article, mais permet d'indiquer la position relative de chaque
élève dans le fichier.

L'écran permettant la saisie des informations et le dialogue opératoire est conforme au schéma ci-dessous.
L.T.C. Gestion des Elèves le : jj/mm/aa

Numéro de l'élève : AAAAA Nom de l'élève : AAAAAAAAAAA

Classe : AAAAA Prénom de l'élève : AAAAAAAAAAA

Message : MMMMMMMMMMMMMMMMMMMMMMMM Réponse : XXXXX

Les libellés font partie de la présentation de l'écran et sont indiqués en gras.


Les données affichées sont indiquées par le symbole M.
Les données modifiables par l'utilisateur sont indiquées par le symbole A
Les données saisies par l'utilisateur sont symbolisées par un X.

© FNM 76
Algorithmique

b) MÉTHODOLOGIE :
le principe de base qui régit l'algorithme est le suivant :
Saisie d'un numéro d'élève (équivalent à sa positon dans le fichier)
Si le numéro est égal à 0 alors
Arrêt du programme
Sinon
On lit le fichier à l'aide du numéro saisi et on vérifie ainsi si l'élève existe déjà.
Si l'élève existe alors
Il ne peut s'agir que d'une modification ou d'une suppression
Sinon
On propose de le créer
Fin si
Fin si
c) ALGORITHME
ALGO GestElèves
Pré-conditions : {}
Post-conditions : {ajoute un élève au fichier}

Fichier Elèves en organisation relative


Accès direct
Clef : numElève
Début article
NomElève : chaîne
PrénomElève : chaîne
ClasseElève : entier
Fin article

VAR GLOBALE
numElève : entier
jourdate: chaîne

DEBUT
Ouvrir Elève en Lecture/Ecriture
Affichefondpage()
Saisir numElève
Tantque(numElève<>0) faire
GestionEleve()
Affichefondpage()
Saisir numElève
Fin tant que
Fermer Elèves
FIN

Procedure AfficheFondpage()
/* cette procédure permet l'affichage des libellés et de la date du jour */
Début
effaceEcran()

77 © FNM
Algorithmique

JourDate=datesystem()
AfficherEcran(2,10,' GESTION Eleves Le :")
AfficherEcran(2,66,Joudate)
AfficherEcran(8,10 "Numero Eleve")
AfficherEcran(8,45, "Nom Elève")
AfficherEcran(10,10,"Prenom élève");
AfficherEcran(10,45,"Classe de L'élève")
AfficherEcran(22,10,"Message")
AfficherEcran(22,60,"Réponse");
FIN

Procédure GestionEleve()
Début
Lire Elève avec clef Í NumElève
Si (ErreurClef(Eleves)) alors
CreationEleve()
Sinon
ModificationSuppression()
Fin fi
FIN

Procédure CreationEleve()
Début
Si (MessageRéponse(22.20,"Voulez vous créer l'élève avec ce numéro ?")="Oui") alors
SaisieAutreRenseignementsEleve()
Si (MessageRéponse(22,20,"Voulez vous valider cette saisie ?") = "Oui") alors
Ecrire Eleve avec Clef Í NumElève
Afficher ("L'élève est ajouté au fichier des élèves de la classe")
Fin si
Fin si
Fin

Procédure SaisieAutresRenseignementsElève()
Début
Saisir (NomElève)
Saisir (PrénomElève)
Saisir (ClasseElève)
Fin

Procédure ModificationSuppression()
Var
Réponse : chaîne
Début
AfficheElève()
RéponseÍMessageRéponse(22,20"Voulez vous (Mo)odifier, (S)upprimer")
Selon (Réponse)
Cas "M" : ModificationElève()
Cas "S" : SuppressionElève()
Fin selon
Fin

© FNM 78
Algorithmique

Procédure AfficheElève()
Début
AfficheEcran (8, 60, NomElève)
AfficheEcran (10, 20, PrenomElève)
AfficheEcran (10, 60, ClasseElève)
Fin

Procédure ModificationElève()
Début
EffaceEcran()
Si (MessageRéponse(22,20,"Voulez vous modifier des données ?")="Oui") alors
SaisieAutresRenseignementsElève()
Si (MessageRéponse(22,20,"Voulez vous valider cette saisie ?") = "Oui") alors
Réécrire Eleve
Afficher ("L'élève a bien été modifie")
Fin si
Fin si
Fin

Procédure SuppressionEleve()
Début
Si (MessageRéponse (22, 20, "Voulez vous supprimer cet Elève ?")="Oui") alors
Sipprimer Elève
Afficher ("L'élève a bien été supprimé")
Fin si
Fin

Procédure AfficheEcran(e Ligne, colonne: entier, Message : Chaîne)


Début
Curseur (Ligne, colonne)
Afficher (Message)
Fin

Fonction MessageRéponse(e Ligne, colonne : entier; Message :chaîne) : chaîne


Var
Réponse : chaîne
Début
Curseur (Ligne, colonne)
Afficher (Message)
Curseur (Ligne, colonne+ Longueur (Message)+2)
Saisir (Réponse)
Retourne (Réponse)
Fin

d) CONCLUSION
L'algorithme précédent n'offre pas de difficultés particulières, il n'en est pas de même si au lieu de choisir
comme clef relative un numéro compris entre 1 et 32 on choisit une clef naturelle ne pouvant être
directement utilisée comme clef relative. Outre l'algorithme de conversion à appliquer à cette clef

79 © FNM
Algorithmique

naturelle, il sera nécessaire de gérer les articles homonymes, ce qui complexifie sensiblement l'algorithme
de mise à jour. Pour éviter ce niveau de complexité on a recours lorsque cela est possible à l'organisation
séquentielle indexée.

IV - L'ORGANISATION SÉQUENTIELLE INDEXÉE


1 - GÉNÉRALITÉS
A - DEFINITION
L'organisation séquentielle indexée est l'organisation la plus aisée à manipuler aussi bien eu niveau de sa
mise en œuvre que de son utilisation. Malheureusement elle n'est pas accessible au travers de tous les
langages.
Cette organisation permet ainsi d'indexer un fichier de données sur l'un ou plusieurs de ses champs
(exactement comme l'on indexe un agenda téléphonique).
Cette indexation permet alors de retrouver rapidement tout article en indiquant la ou les rubriques
indexées.
Un fichier indexé est un fichier sur support adressable, divisé en deux parties principales :
- la zone des données qui contient les articles du fichier. Les articles y sont inscrits
séquentiellement
- le zone index qui permet de connaître l'adresse réelle des articles dans la partie donnée. Cette zone
index peut être constituée d'un ou plusieurs index.

Exemple :
Soit le fichier des élèves suivant :
Adresse N° élève Nom Prénom N° classe
Adres1 960011 Abascal Christophe IG1
Adres2 950012 Aston Matin IG2
Adres3 960028 Dupont Louis IG1
Adres4 960018 Becker Stéphane IG1
Adres5 960008 Bastian Gérald IG1
Adres6 960021 Benois Sophie IG1
Adres7 950011 Abascal James IG2
Adres8 950021 Cantine David IG2
Adres9 950022 Dupont Louis IG2
Adres10 950028 Emile Jean IG2
Adres11 950088 Martin Jean IG2

La colonne Adresse représenta l'adresse disque où se situe l'article. Par commodités nous les avons
numérotés adres1 a adres11.

Supposons que l'on souhaite accéder rapidement à un article du fichier par la simple connaissance de son
numéro d'élève. Dans ce cas il suffit d'indexer le fichier sur la rubrique numéro d'élève. Cette opération
d'indexation a pour but de mettre en place la structure suivante dans la zone de l'index.

Index sur le numéro d'élève :


N° élève Adresse
950011 Adres7
950012 Adres2

© FNM 80
Algorithmique

950021 Adres8
950022 Adres9
950028 Adres10
950088 Adres11
960008 Adres5
960011 Adres1
960018 Adres4
960021 Adres6
960028 Adres3

L'index ainsi créé est automatiquement ordonné par numéro d'élève. En correspondance de chaque
numéro d'élève, on obtient l'adresse où se trouve l'article.
Ainsi lors d'une recherche d'un article, il suffit de rechercher la valeur dans l'index pour obtenir l'adresse
de l'article recherché.

De même si l'on souhaite accéder rapidement aux articles du fichier à l'aide du nom de l'étudiant, il est
possible d'indexer le fichier sur cette rubrique. On obtient alors la structure complémentaire suivante dans
la zone d'index.

Index sur le nom d'élève :


Nom Adresse
Abascal Adres1
Abascal Adres7
Aston Adres2
Bastian Adres5
Becker Adres4
Benois Adres6
Cantine Adres8
Dupont Adres3
Dupont Adres9
Emile Adres10
Martin Adres11
Dans ce cas, l'index est ordonné par nom d'étudiant et autorise les doublons.
B - CLEF PRIMAIRE ET CLEF SECONDAIRE
Tout fichier indexé comporte au moins une clef primaire, c'est-à-dire un index n'admettant pas de
doublons. Il s'agit généralement d'une propriété jouant le rôle d'identifiant. Dans notre exemple le numéro
d'étudiant sert de clef primaire.

A cette clef primaire, il est possible d'adjoindre autant d'index supplémentaire que nécessaire. Ces index
supplémentaires sont appelés clefs secondaires. Une clef secondaire admet des doublons. Ainsi dans notre
exemple il est possible de créer une clef secondaire sur le nom de l'élève et/ou une clef secondaire sur le
numéro de classe.
C - ACCÈS À UN FICHIER SÉQUENTIEL INDEXÉ
L'accès aux articles peut être séquentiel ou direct par l'intermédiaire de la clef.
a) L'ACCÈS SÉQUENTIEL
Trois possibilités

81 © FNM
Algorithmique

- traitement séquentiel sur clés


- traitement séquentiel entre limites (dynamique)
- traitement séquentiel physique

Avec les deux premières méthodes le S.G.F utilise l'index pour présenter les articles selon l'ordre logique
croissant. Avec la troisième méthode, l'index n'est pas utilisé et le fichier ne peut être traité Qu'en lecture.
b) L'ACCÈS DIRECT
L'accès aux articles d'un fichier indexé peut être direct de sorte qu'un article donné peut être traité
indépendamment de sa position dans le fichier ou de ses rapports avec les autres articles du fichier.
L'utilisateur indique l'article requis au moyen de la rubrique 'clé'.
D - GESTION DE L'INDEX
La gestion de l'index est entièrement prise en compte par le S.G.F et n'implique aucune manipulation de
la part du programmeur. Un index est une structure organisée de façon telle que l'accès à ses éléments soit
très performant. Lorsque l'index n'est pas trop volumineux il peut être totalement ou partiellement chargé
en mémoire centrale. De façon générale les rubriques de l'index sont ordonnées :

- physiquement, c'est à dire qu'elles sont effectivement enregistrées les unes à la suite des autres
dans l'ordre croissant des clés dans la zone index; ce qui nécessite un tri de l'index après chaque
mise à jour du fichier (lors d'adjonction ou de suppression d'articles). Cette technique obsolète est
assez peu performante.
- logiquement, c'est à dire que les rubriques de l'index sont chaînées les unes aux autres chaque fois
que l'ordre d'enregistrement physique ne correspond pas à l'ordre croissant logique des clés.
L'index est ainsi organisé en structure de liste ou d'arbre binaire (technique du b-arbre ou arbre
balancé). Ce type d'organisation des données est étudié dans le cadre du cours de deuxième année.
E - MISE À JOUR DES FICHIERS INDEXÉS
a) AJOUT DE NOUVEAUX ARTICLES
Les articles peuvent être ajoutés au moyen d'un traitement séquentiel sur clés ou d'un traitement direct sur
clés. Quand un article est ajouté à un fichier indexé, il est rajouté dans la zone des données à la suite des
autres articles et la zone index est mise à jour.
b) SUPPRESSION D'ARTICLES
Les articles inactifs d'un fichier indexé ne sont pas supprimés physiquement. Ils sont indiqués
'logiquement' comme étant supprimés, leur emplacement étant de nouveau disponible. Parallèlement, le
S.G.F retire de la zone index les informations permettant l'accès à l'article.
L'ajout et la suppression d'articles impliquent une mise à jour de l'index, qui lorsqu'il est organisé en b-
arbre se traduit par un rééquilibrage de l'arbre, opération pénalisante.
F - AVANTAGES ET INCONVÉNIENTS DE L'ORGANISATION SÉQUENTIELLE
INDEXÉE
a) AVANTAGES
- la programmation est moins complexe que pour les fichiers relatifs dès lors que la clef primaire est
une clef naturelle ne pouvant être utilisée comme clef relative.
- l'adjonction et la suppression d'articles sont bien plus performantes qu'avec l'organisation
séquentielle et l'algorithmique bien plus simple.

© FNM 82
Algorithmique

b) INCONVÉNIENTS
- le chargement partiel de l'index en mémoire augmente les besoins en mémoire d'un programme.
Le rééquilibrage de l'index lors des mises à jour peut ralentir le traitement.
- l'accès direct aux articles est moins performant que dans l'organisation relative, puisqu'il est
nécessaire de passer par une structure intermédiaire, l'index.

2 - ALGORITHME LIÉE A L'ORGANISATION SÉQUENTIELLE INDEXÉE


A - DÉCLARATION
La déclaration permet d'indiquer l'organisation du fichier ainsi que la structure de l'article.
FICHIER nom-fichier en organisation indexée
Accès : {séquentiel | directe | dynamique}
Clef : nom de clef
Clef secondaire : nom clef
Déclaration de l'enregistrement
a) ACCÈS
Les articles peuvent être lus de façon séquentielle, direct ou en combinant les deux méthodes (accès
dynamique).
- séquentiel: lecture les enregistrements les uns à la suite des autres
- direct: accès direct à un enregistrement et lecture de celui-ci
- séquentiel/direct: accès direct, puis lecture séquentielle.
b) CLEF PRIMAIRE
Ce paramètre obligatoire permet d'indiquer la propriété servant de clef primaire lors d'un accès direct ou
dynamique. Cette propriété fait obligatoirement partie de l'article. La clef primaire doit être évaluée avant
toute opération d'entrée/sortie. Lors de la mise en place d'un nouveau fichier, ce paramètre sert au S.G.F.
à mettre en place l'index primaire.
c) CLEF SECONDAIRE
Une ou plusieurs propriété du fichier peuvent servir de clef(s) secondaire(s). Dans ce cas il est nécessaire
de les indiquer. Ces propriétés doivent faire partie de l'article. Lors de la mise en place de nouveau
fichier, ces paramètres servent au S.G.F. à mettre en place le ou les index secondaire.
d) EXEMPLE
Fichier Elèves en organisation indexée
Accès direct
Clef primaire : numéro
Clef secondaire : nom
Début article Elève
Numéro : entier
Nom : chaîne
Prénom : chaîne

Classe : chaîne
Fin article
B - OUVERTURE
a) SYNTAXE
OUVRIR nom-fichier en mode opératoire

83 © FNM
Algorithmique

b) MODE OPÉRATOIRE :
- Lecture: seule l'opération de lecture est autorisée.
- Ecriture: seule l'opération d'écriture est autorisée.
- Lecture/Ecriture : les opérations de mises à jour du fichier sont possibles.
C - FERMETURE
Syntaxe
Fermer nom fichier
D - LECTURE
On distingue trois types de lecture :
a) LA LECTURE SÉQUENTIELLE DU FICHIER :
Celle-ci fonctionne exactement comme pour les fichiers séquentiels, les enregistrements étant lus dans
l'ordre de la clef relative. Le clef primaire étant choisie par défaut. La même fonction FinFichierO permet
de détecter la fin du fichier. Le fichier doit être ouvert en accès séquentiel.
Lire nomenregistrment

b) LA LECTURE DIRECT DU FICHIER :


Celle-ci nécessite que la variable servant de clef primaire ou secondaire soir précisée. La fonction
ErreurClef() permet de savoir si l'article à lire a été trouvé ou non. Le fichier doit être ouvert en accès
direct ou dynamique.

Syntaxe
LIRE nom-enregistrement avec clef := nom-clef

Exemple
Algo
Fichier nom-fichier en organisation indexée
accès direct
Clef primaire :numéro
Début article nom-article
/* description de l'article */
fin article
Var ClefRelative : entier

Début
Ouvrir nom-fichier en lecture /* ouverture du fichier */
Saisir "Veuillez indiquer la position relative d'un article ", CletRelative
Lire nom-enregistrement avec clef := ClejRelative /* lecture article */
Si ErreurClef(nom-fichier) Alors
Afficher ("Cet article n'existe pas")
Sinon
Afficher nom article
Fin si
Fermer nom-fichier
Fin

© FNM 84
Algorithmique

c) LA LECTURE DYNAMIQUE
La lecture dynamique permet d'effectuer sur le fichier un premier accès direct, suivi de plusieurs lectures
séquentielles. Ce type de lecture est vouent utilisé lorsque l'on souhaite accéder à une partie du fichier,
par exemple tous les articles compris entre deux valeurs d'une clé d'index. Une première instruction
permet de se positionner directement à un endroit particulier du fichier. Des instructions de lecture
permettent ensuite de lire séquentiellement le reste du fichier. Le fichier

85 © FNM
Algorithmique

ARBRES DE DÉCISIONS
I- INTRODUCTION
On peut avoir plus d'une alternative, c'est à dire plus de deux ensembles d'opérations à exécuter. Dans
ce cas, on est obligé d'avoir recours à plusieurs niveaux de structures alternatives.

En langage structuré, on a :
SI
ALORS
SI
ALORS séquence 1
SINON séquence 2
FINSI
SINON
SI
ALORS séquence 3
SINON séquence 4
FINSI
FINSI

L'exemple ci-dessus est simple (2 niveaux et 2 conditions seulement). Mais la logique de certaines règles
de gestion peut devenir complexe, en raison de la présence de nombreuses conditions entraînant de
nombreux niveaux d'alternative. Dans ces cas, on peut utiliser d'autres représentations, telles que la
représentation simplifiée par un arbre, que nous présenterons dans ce paragraphe sur un exemple, ou
encore la table de décision, à laquelle nous consacrerons le prochain paragraphe.
Exemple
Les employés d'une société peuvent disposer de jours de congés supplémentaires s'ils satisfont à certaines
conditions.
- Les cadres ont droit à 3jours, s'ils ont 2 ans d'ancienneté dans la société au moins.
- Les cadres de position III et plus ont droit à 1 jour.
- Les mères de famille ayant 2 enfants ou plus au foyer ont droit à 2 jours.
- Les personnes de 50 ans où plus ont droit à 4 jours. Si les personnes ont au moins 20 ans de
présence dans la société, ils ont droit à 5 jours. Ces dispositions ne s'appliquent pas aux cadres.
- Une personne appartenant à plusieurs catégories de bénéficiaires ne peut cumuler les divers
avantages de ces catégories; le nombre de jours le plus avantageux lui sera accordé.

Une première tâche consiste à lever les ambiguïtés du texte.


- Bien qu'il n’y ait pas cumul des avantages entre les différentes catégories, on peut supposer que
les cadres de position III et plus ont en fait, non pas l jour, mais 1 jour + les 2 jours attribués à
l'ensemble des cadres ; de plus, on suppose que la condition d'ancienneté de 2 ans s 'applique à
eux, puisqu'elle est prévue pour les cadres en général.
- Le paragraphe relatif aux personnes de plus de 20 ans d'ancienneté n'est pas clair ; doivent-ils être
aussi des personnes de plus de 50 ans d'âge ? nous pensons que non; il s'agit de deux critères
indépendants.

Les ambiguïtés du texte étant levées, on essaye de progresser le plus logiquement possible dans l'étude, de
manière à obtenir l'algorithme le plus clair et le plus simple possib1e ; il va de soi qu'il peut y avoir
plusieurs expressions d'un algorithme, suivant le chemin suivi dans le raisonnement.

© FNM 86
Algorithmique

Les conditions « Cadre » et « Non-cadre » sont évidemment exclusives l'une de l'autre, c'est-à-dire qu'une
même personne ne peut satisfaire qu'à l'une des conditions, à l'exclusion de l’autre. On pourra donc avoir
une première alternative sur la condition « Cadre ».

Prenons maintenant le traitement de la branche « Cadre »; on a les conditions suivantes :


< 2 ans d'ancienneté nombre de jours = 0
> = 2 ans d'ancienneté >= position III nombre de jours = 4
< position III nombre de jours = 3
On aura donc deux niveaux d'alternative, mais sans avoir à répéter aucune des deux conditions
(successivement test de « >=2 ans d'ancienneté » et test de « >= position III»).
Prenons maintenant le traitement de la branche « Non-cadre »; les conditions « >=50 ans d'âge » et « >=
20 ans d'ancienneté » ne sont pas exclusives l'une de l'autre, c'est-à-dire qu'une même personne peut
satisfaire aux deux conditions à la fois. Pour éviter d'avoir à répéter les conditions comme dans l'exemple
de départ (condition B exprimée deux fois), on appliquera la règle : « faire bénéficier la personne du
régime le plus avantageux », d'où la priorité suivante dans 1 'ordre des tests des conditions :
- >= 20 ans d'ancienneté nombre de jours = 5
- >= 50 ans d'âge nombre de jours = 4
Nous n'avons pas considéré la condition « mère de famille avec 2 enfants ou plus ». Bien sûr, cette
condition est indépendante de toutes les conditions précédentes, c'est-à-dire qu'une personne satisfaisant
ou non à n'importe laquelle des conditions précédentes peut être « mère de famille avec 2 enfants ou plus
». Nous appliquerons la même règle que ci-dessus : « faire bénéficier la personne du régime le plus
avantageux », en remarquant que le nombre de jours attribués aux mères (2 jours) est inférieur à tous les
nombres de jours attribués au titre des conditions ci-dessus; il suffira donc de tester la condition « mère de
famille avec 2 enfants ou plus » pour les personnes n'ayant obtenu, après les tests ci-dessus, aucun jour de
congé.
D’où l’algorithme, que l’on représentera de façon simplifiée par l’arbre ci dessous

PERSONNE

Cadre Non Cadre

<2 ans >= 2 ans < 20 ans >= 20 ans anc.


anc. anc. anc.

Non mère Mère <PositionIII >=PositionIII Age<50ans Age>=50ans

non Mère
mère

0 2 3 4 0 2 4 5
Nombre de jours
Figure 1: représentation d'une structure alternative complexe par un arbre

87 © FNM
Algorithmique

II - STRUCTURES ALTERNATIVES COMPLEXES .


REPRÉSENTATION PAR UNE TABLE DE DÉCISION
1 - GÉNÉRALITÉS
La table de décision est un excellent outil de représentation des règles du jeu qui déterminent les actions à
réaliser en fonction de certaines conditions. Elle présente un grand intérêt dans les cas complexes où on
doit définir un ensemble de conditions et un ensemble d'actions.
Exemple
Considérons les règles pour un gestionnaire de stock qui a une commande à satisfaire :
- Condition 1 : quantité à livrer <= quantité en stock
Si cette condition est réalisée, on exécute l'action 1 : livrer la commande.
- Condition 2 : quantité en stock - quantité à livrer <= seuil minimum
Si cette condition est réalisée, on exécute l'action 2 : ordonner le réapprovisionnement.

Les décisions du gestionnaire de stock, face à l’arrivée d’une commande, peuvent être représentées par la
table ci-après :
Condition 1 : Quantité à livrer <= Quantité en stock OUI OUI NON
Condition 2 : quantité en stock - quantité à livrer <= seuil NON OUI
minimum

Action 1 : livrer la commande OUI OUI NON


Action 2 : ordonner le réapprovisionnement NON OUI OUI

La représentation conventionnelle générale est représentée par le tableau ci-après :


SOUCHE Cas 1 Cas 2 --- Cas p
Condition 1
CONDITIONS Condition 2
---
Condition m

Action 1
ACTIONS Action 2
---
Action n

On peut distinguer quatre zones dans le tableau :


- en haut à gauche : libellé des conditions,
- en bas à gauche : libellé des actions,
Ces deux premières zones constituant la « souche »,
- en haut à droite : combinaison possible des conditions,
- en bas à droite : désignation des actions à exécuter

Le principe consiste donc à associer entre elles les conditions de toutes les manières possibles pour
envisager l'ensemble des situations ou cas réalisables et indiquer en face de chaque cas la ou les actions à
accomplir.
Le nombre de cas possibles peut être déterminé mathématiquement : si l'on suppose par exemple que les
conditions sont binaires (oui ou non), et s'il y a 6 conditions, il y a 26 = 64 cas possibles.

On prend maintenant un exemple de conditions non binaires, c'est-à-dire consistant à comparer une
donnée à plus d'une constante.

© FNM 88
Algorithmique

Exemple
- âge < 20 ans, 20 ans <= âge < 40 ans, âge >= 40 ans (3 valeurs)
- situation de famille = célibataire ou marié ou veuf ou divorcé (4 valeurs).
- Il y aura 3 * 4 = 12 cas possibles.

En pratique, le nombre de cas peut être réduit, car souvent, pour certaines valeurs d'une condition, les
autres conditions n'interviennent pas dans les actions.
Exemple
Dans l'exemple « Gestion de stock », dans le cas où la quantité à livrer est supérieure à la quantité en
stock, on ne s'intéresse pas à la condition (le nouveau stock devient négatif et donc nécessairement
inférieur au stock minimum); nous avons 2 conditions binaires (oui ou non), soit 2² = 4 combinaisons
théoriquement possibles, mais seules 3 sont à retenir.
C'est le problème de la hiérarchie des conditions, qui est la base de l'établissement optimal des tables de
décision.

2 - TABLES LIMITÉES ET TABLES ÉTENDUES


La table est dite « limitée » lorsque chaque condition et chaque action sont entièrement décrites dans la
souche ; le raisonnement est alors binaire (oui ou non).
L'exemple « Gestion de stock » ci-avant est décrit par une table limitée.
Exemple :
Age < 20 ans OUI NON NON NON
célibataire OUI
Marié OUI
veuf OUI

Indemnité nulle OUI OUI


Indemnité = 100 F OUI
Indemnité = 500 F OUI

On voit sur l'exemple que ces tables deviennent rapidement volumineuses si les conditions de base (ici
l'âge et la situation familiale d'une personne) ne sont pas binaires.
D'où l'intérêt des tables « étendues », dans lesquelles les valeurs des conditions sont indiquées dans les
colonnes.
Exemple :
Nous reprenons le même exemple que ci-avant, en le traitant à l'aide d'une table étendue.
Age < 20 ans >= 20 ans >= 20 ans >= 20 ans
situation familiale Célibataire marié Veuf

Indemnité 0 0 100 500

Lorsque les deux modes de présentation précédents (limité et étendu) sont utilisés dans une même table,
on dit qu'elle est « mixte ».

3 - SIMPLIFICATION DES TABLES


Si on a n conditions binaires on a vu qu'il y avait 2n cas possibles. Dans la réalité, on peut en général
simplifier la table en limitant le nombre de cas possibles à partir des remarques suivantes :
- conditions complémentaires : une condition et son opposé sont dites complémentaires, par
exemple « marié » et « non marié » ; plus généralement, les conditions sont complémentaires si
leur réunion restitue l'ensemble des possibilités, par exemple les trois conditions : âge < 20 ans, 20
ans <= âge < 40 ans, âge >= 40 ans, qui recouvrent l'ensemble des âges d'une population ; dans ce

89 © FNM
Algorithmique

cas, on remarque que, si la réponse est « oui » à une condition, la réponse est obligatoirement «
non » aux autres ; il y a donc, pour des conditions complémentaires, non pas 2n cas possibles, mais
seulement n.
- conditions dépendantes : si deux conditions sont dépendantes l'une de l'autre, la condition
assujettie ne sera prise en compte que si la condition maîtresse est réalisée.
Exemple
Soit les deux conditions « être marié » et « conjoint travaillant ». On a intérêt à ordonner les conditions
dans la hiérarchie des dépendances, afin d'éviter l'analyse de cas impossibles.
Exemple
On attribue une prime exceptionnelle aux salariés mariés ayant plus de 3 enfants, le montant de la prime
dépendant de l'âge du plus jeune (inférieur ou supérieur à 5 ans). Les conditions et actions sont
représentés sur le tableau suivant :

La personne est-elle salariée NON OUI OUI OUI OUI


est-elle mariée NON OUI OUI OUI
A-t-elle plus de 3 enfants NON OUI OUI
L’âge du plus jeune est-il > 5 ans NON OUI

Prime 0 0 0 100 F 500 F

4 - TABLES DE DÉCISION ENCHAÎNÉES


Dans certains problèmes, le nombre très important de cas possibles peut amener, pour que la table
n'atteigne des dimensions trop importantes (ne pas dépasser 10 cas environ pour une table), à définir pour
une ou plusieurs des actions à exécuter le renvoi à une ou plusieurs autres tables : on a ainsi une suite de
tables enchaînées.

C'est le cas en particulier pour les problèmes de tarification.


Exemple :
Prenons le cas de la tarification d'une assurance des automobiles. Celle-ci dépend par exemple :
- de la puissance (9 valeurs),
- de la région d'utilisation (5 valeurs),
- du type d'assurance (4 valeurs),
Soit en tout 9 x 5 x 4 = 180 cas.
La solution peut être la suivante. Elle est représentée par la figure 2

On accède à une première table, la Table l, (flèche 1).

Cette table renvoie à une autre table en fonction de la puissance. La Super 5 a une puissance, c'est-à-dire
la fiscale de 4 CV. On se renvoie donc à la table qui traite la puissance 3-5 CV, la Table3 (flèche 2).

Cette table traite des différents types d'assurances (risques) couverts (pour les véhicules de puissance 3-5
CV). Supposons que la Super 5 soit assurée tous risques; la prime de base est de2000F et l'on doit aller à
la table qui traite le type « tous risques », c'est-à-dire la Table 400. (Flèche 3).

Cette table traite des 5 régions d'utilisation pour une voiture (pour les véhicules 3-5 CV, assurés tous
risques). Si la Super 5 est utilisée à l'étranger, la prime est alors de 2000 * 1,6 = 3200F

On constate que dans la Table 400, après l’établissement de la prime, on doit se renvoyer à la table
3(flèche 4), pour achever l’opération et, pour le type d’assurances tous risques qui nous intéresse,

© FNM 90
Algorithmique

procéder à la dernière action : établir la police de modèle N° 438 ; on dit parfois, lorsqu’on se rebranche
sur une table déjà parcourue, qu’on a un système de tables « fermées »

1
TABLE 1
Puissance =2 3-5 6-7 8-9 10-11 12-13 14-15 16-20 >20

Aller à la table T2 T3 T4 T5 T6 T7 T8 T9 T10


2
TABLE 3
Type assurance Tiers Affaires Tierce collision Tous risques

Etablir prime de base 600 900 1200 2000


faire table T100 T200 T300 T400
Etablir police modèle N° N° 123 N° 252 N° 373 N° 438
3 4
TABLE 400
Région Paris Banlieu Province 1 Province 2 Etranger

Etablir Prime PB * 1,5 PB * 1,3 PB * 1,2 PB PB * 1,6


Retour table T3 T3 T3 T3 T3
(légende : PB : prime de base)
Figure 2 :Tables des décisions enchaînées
tarification de l'assurance des automobiles

5 - MÉTHODE DE CONSTRUCTION DE LA TABLE DE DÉCISION


Supposons que l’on veuille constituer une table de décision à la suite d’interviews diverses auprès de
plusieurs personnes. On procédera comme suit :
- relever l’ensemble des conditions et actions sans souci de leurs relations,
- classer en catégories conditions et actions,
- recenser les cas possibles en déterminant notamment la hiérarchie des conditions,
- construire une première version de la table qui révélera peut-être :
- des redondances,
- des contradictions,
- des manques d’informations,
- des anomalies,
qui nécessiteront un complément d’enquête ; c’est le grand intérêt de la table de décision de relever les
lacunes de l’enquête,
- - après éclaircissement des point obscures, construire la table définitive.

6 - EXEMPLES D'APPLICATION DES TABLES DE DÉCISIONS


A - EXEMPLE 1
Soit les règles de gestions suivantes dans le traitement d'une commande client, dans le cas de produits
fabriqués sur devis :
« Lorsque la commande arrive, si son montant T.T.C est < 10 000 F ou qu'il s'agit d'un client en compte
(client habituel), on envoie un avis de réception de commande. Dans le cas contraire, on ajoute dans le
texte de l'accusé de réception une demande d'acompte ; et on met la commande en attente (jusqu'à
réception de l'acompte). Si les matériaux de nécessaires à la fabrication du produit sont disponibles en

91 © FNM
Algorithmique

stock, on lance la commande en fabrication. Dans le cas contraire, on met la commande en attente et on
envoie une commande de matériaux au fournisseur ».
On a les conditions suivantes, toutes binaires (oui ou non) :
- client en compte,
- montant < 10 000 F
- matériaux en stock.
On a les actions suivantes :
- envoyer un accusé de réception : 2 valeurs : simple, avec demande d'acompte,
- prendre une décision de fabrication. 2 valeurs. lancer, mettre en attente,
- envoyer une commande au fournisseur (oui ou non).
On suppose, en considérant l'esprit des règles de gestion que, si on demande un acompte, on ne consulte
pas le stock de matériaux, pour savoir si la commande est réalisable». en effet, on ne sait pas quand
arrivera l'acompte, ni même s'il arrivera. On détecte donc une hiérarchie entre :
- d'une part les conditions déclenchant l'acompte,
- d'autre part la condition « matériaux en stock ».
On mettra donc la condition « matériaux en stock » après les conditions déclenchant l'acompte.
De la même façon, on détecte une hiérarchie entre les conditions :
- client en compte,
- montant < 10 000 F
Puisque le test du montant de la commande ne concerne que les clients « non en compte ».On mettra donc
la condition « <10 000 F » après la condition « client en compte ».
On obtient alors la table de décision ci-après :
Client en compte OUI OUI NON NON NON
Montant commande <10000 <10000 >=10000
Matériaux en stock OUI NON OUI NON

envoyer accusé réception AR AR AR AR AR+


simple simple simple simple acompte
Prendre une décision de fabrication Lancer Mettre en Lancer Mettre en Mettre en
attente attente attente
Envoyer une commande au NON OUI NON OUI NON
fournisseur

On notera que la table présentée est « mixte » (valeurs, alternative OUI/NON). Toutefois, on aurait pu la
présenter sous la forme simplifiée, étant donné que chaque condition n’a que deux valeurs (lancer ou
mettre en attente, etc.) toutes deux complémentaires, c’est-à-dire exclusives (on ne peut pas à la fois
lancer et mettre en attente).

B - EXEMPLE 2 :
On reprend l’exemple des jours de congés du personnel d’une société, traité au paragraphe précédent au
moyen d’un arbre. On le représente par une table de décision.
En reprenant un cadre :
- Ancienneté >= 2ans,
- Position >= III,
Pour un non cadre :
- Ancienneté >= 20 ans,
- âge >= 50 ans,
- Mère de famille avec >= 2 enfants.
On obtient la table de décision suivante, mixte (les conditions sont binaires, mais pas l’action : « attribuer
nombre de jours »)

© FNM 92
Algorithmique

Cadre OUI OUI OUI OUI NON NON NON NON


Ancienneté >= 2ans OUI OUI NON NON
Position >= III OUI NON
Ancienneté >= 20 ans OUI OUI NON NON
Ages >= 50 ans OUI NON NON
Mère de famille avec >= 2 OUI NON OUI NON
enfants

attribuer nombre de jours 4 3 2 0 5 4 2 0

On remarque que, pour 6 conditions, et donc 26 =64 cas théoriques possibles, on a seulement 8 cas utiles à
tester.

93 © FNM
Algorithmique

Table des Matières


INTRODUCTION À L'ALGORITHMIQUE........................................................................................................................... 2
I- NOTIONS DE BASE ............................................................................................................................................................ 2
1- Programmer, c’est quoi ? ........................................................................................................................................... 2
2- Définitions .................................................................................................................................................................. 2
A- algorithmique ............................................................................................................................................................................ 2
B- Algorithme ................................................................................................................................................................................ 2
C- Programmation.......................................................................................................................................................................... 3
D- Instruction ................................................................................................................................................................................. 3
E- Ordinateur ................................................................................................................................................................................. 4
F- Langage de programmation....................................................................................................................................................... 4
3- Programmation modulaire ......................................................................................................................................... 4
A- Phase de spécification ............................................................................................................................................................... 5
B- Phase de conception .................................................................................................................................................................. 5
C- Phase de codage ........................................................................................................................................................................ 6
D- Phase de correction ................................................................................................................................................................... 6
E- Phase de maintenance ............................................................................................................................................................... 6
II - REPRÉSENTATION EN LANGAGE STRUCTURÉ ............................................................................................................... 7
III - LES COMPOSANTS ÉLÉMENTAIRES DES ALGORITHMES................................................................................................. 7
1- Structure d’un algorithme elementaire....................................................................................................................... 7
2- La notion de Variable ................................................................................................................................................. 8
A- Caractéristiques d’une variable ................................................................................................................................................. 8
B- Les types élémentaires de variables .......................................................................................................................................... 8
a) ENTIER ............................................................................................................................................................................... 8
b) REEL ................................................................................................................................................................................... 8
c) CARACTERE...................................................................................................................................................................... 8
d) CHAINE .............................................................................................................................................................................. 8
e) BOOLEEN........................................................................................................................................................................... 8
C- Déclarations de variables .......................................................................................................................................................... 8
3- La notion de constante................................................................................................................................................ 9
4- Opérateurs et expressions........................................................................................................................................... 9
A- Opérateurs de concaténation ..................................................................................................................................................... 9
B- Opérateurs et expressions arithmétiques ................................................................................................................................... 9
C- Opérateurs relationnels............................................................................................................................................................ 10
D- Opérateurs et expressions logiques ......................................................................................................................................... 10
a) Négation (non) ................................................................................................................................................................... 10
b) Intersection (et) .................................................................................................................................................................. 10
c) Union (ou).......................................................................................................................................................................... 10
IV - LES INSTRUCTIONS DE BASE ...................................................................................................................................... 10
1- L'affectation .............................................................................................................................................................. 10
2- Instructions d'entrée sortie ....................................................................................................................................... 12
A- La lecture des données ............................................................................................................................................................ 12
B- La sortie de données................................................................................................................................................................ 13
a) L'affichage des données ..................................................................................................................................................... 13
b) L'impression des données .................................................................................................................................................. 13
3- La structure conditionnelle....................................................................................................................................... 14
A- La structure alternative............................................................................................................................................................ 14
B- La structure de choix............................................................................................................................................................... 17
4- La structure répétitive .............................................................................................................................................. 17
A- La structure répétitive Tant que … Fin tant que...................................................................................................................... 18
B- La structure répétitive Répéter… Jusqu'à................................................................................................................................ 19
C- La structure répétitive Pour … Fin pour.................................................................................................................................. 21
V- LA VALIDATION DES ALGORITHMES .......................................................................................................................... 23
1- Méthodologie ............................................................................................................................................................ 23
A- Elaboration du tableau d'éxécution.......................................................................................................................................... 23
B- Règles de mise à jour du tableau ............................................................................................................................................. 23
2- Exemple .................................................................................................................................................................... 23
A- Algorithme de recherche du plus petit parmi deux nombres ................................................................................................... 23
B- Algorithme de multiplication des deux ENTIERS (Tant que)................................................................................................. 24
C- Algorithme de multiplication des deux entiers (Répéter) ........................................................................................................ 25
D- Algorithme de multiplication des deux entiers (Pour)............................................................................................................. 25
PROCÉDURES ET DE FONCTIONS .................................................................................................................................... 27

© FNM 94
Algorithmique

I- UTILISATION DES PROCÉDURES ...................................................................................................................................... 27


1- Notion d'action nommée ou procédure..................................................................................................................... 27
2- Comment cela fonctionne-t-il ? ................................................................................................................................ 29
A- Notions relatives aux arguments ............................................................................................................................................. 30
B- Mécanisme de passage des paramètres.................................................................................................................................... 31
a) Passage par valeur.............................................................................................................................................................. 32
b) Passage par adresse ............................................................................................................................................................ 32
3- Syntaxe relative aux procédures ............................................................................................................................... 33
A- Déclaration de la procédure..................................................................................................................................................... 33
B- Appel d'une procédure dans une action appelante................................................................................................................... 33
C- Exemple .................................................................................................................................................................................. 33
4- Visibilité d'un identificateur ..................................................................................................................................... 34
II - UTILISATION DES FONCTIONS .................................................................................................................................... 34
1- Définition.................................................................................................................................................................. 34
2- Les fonctions utilisateurs .......................................................................................................................................... 34
A- Syntaxe.................................................................................................................................................................................... 34
a) Définition de la fonction appelée ....................................................................................................................................... 34
b) Appel d'une fonction dans une action appelante ................................................................................................................ 35
B- Exemple .................................................................................................................................................................................. 35
3- Les fonctions standards ............................................................................................................................................ 35
A- Syntaxe.................................................................................................................................................................................... 35
B- Exemple de fonctions standards .............................................................................................................................................. 36
III - FONCTIONS ET PROCÉDURES RÉCURSIVES ................................................................................................................. 36
1- Notion de récursivité ................................................................................................................................................ 36
IV - CONCLUSION SUR L'UTILISATION DES ACTIONS NOMMÉES ......................................................................................... 37
LA GESTION DES TABLEAUX............................................................................................................................................. 39
I- INTRODUCTION .............................................................................................................................................................. 39
1- Définition.................................................................................................................................................................. 39
2- Représentation .......................................................................................................................................................... 40
3- Représentation mémoire ........................................................................................................................................... 40
4- Déclaration d'un Tableau ......................................................................................................................................... 40
II - UTILISATION D'UN TABLEAU À UNE DIMENSION ......................................................................................................... 41
1- Définition.................................................................................................................................................................. 41
2- Gestion des éléments d'un tableau............................................................................................................................ 41
III - ALGORITHME UTILISANT UN TABLEAU À UNE DIMENSION ......................................................................................... 41
1- Recherche d'un élément dans un tableau.................................................................................................................. 41
A- Recherche à l'aide de la position relative dans un tableau ....................................................................................................... 41
B- Recherche à l'aide de la valeur de l'élément ............................................................................................................................ 42
C- Recherche de l'élément le plus grand ...................................................................................................................................... 42
2- Tri d'un tableau ........................................................................................................................................................ 43
A- Tri par remplacement .............................................................................................................................................................. 43
B- Tri par permutation ................................................................................................................................................................. 44
C- Tri à bulle................................................................................................................................................................................ 46
D- Tri pàr segmentation (Quicksort) ............................................................................................................................................ 47
3- Recherche dans un tableau trie (recherche dichotomique) ...................................................................................... 50
IV - UTILISATION D'UN TABLEAU PLUSIEURS DIMENSIONS ............................................................................................... 52
1- Définition.................................................................................................................................................................. 52
2- Représentation .......................................................................................................................................................... 52
A- Représentation logique :.......................................................................................................................................................... 52
B- Représentation phisique .......................................................................................................................................................... 53
C- Déclaration d'un tableau a deux dimensions............................................................................................................................ 53
D- Appel des éléments d'un tableau a plusieurs dimensions ........................................................................................................ 53
3- algorithme manipulant des tableaux à deux dipmensions ........................................................................................ 53
A- Méthode de parcours d'un tableau à deux dimensions............................................................................................................. 53
a) Ligne par ligne ................................................................................................................................................................... 53
b) Colonne par colonne .......................................................................................................................................................... 54
B- Utilisation d'un tableau a deux dimensions ............................................................................................................................. 54
LES STRUCTURES.................................................................................................................................................................. 56

LES FICHIERS ......................................................................................................................................................................... 57

ARBRES DE DÉCISIONS........................................................................................................................................................ 86

95 © FNM
Algorithmique

I - INTRODUCTION ............................................................................................................................................................... 86
II - STRUCTURES ALTERNATIVES COMPLEXES . REPRÉSENTATION PAR UNE TABLE DE DÉCISION..................................... 88
1 - Généralités ............................................................................................................................................................... 88
2 - Tables limitées et tables étendues............................................................................................................................. 89
3 - Simplification des tables ........................................................................................................................................... 89
4 - Tables de décision enchaînées.................................................................................................................................. 90
5 - Méthode de construction de la table de décision...................................................................................................... 91
6 - Exemples d'application des tables de décisions........................................................................................................ 91
A- Exemple 1 ............................................................................................................................................................................... 91
B- Exemple 2 : ............................................................................................................................................................................. 92

© FNM 96

Vous aimerez peut-être aussi