Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
À
L 'A L G O R I T H M I Q U E
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
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
P1 P2
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.
Æ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é).
© 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).
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
Pré condition : contient l’ensemble des conditions de départ pour que l’algorithme se déroule
normalement
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
© FNM 10
Algorithmique
Avant ? Avant 8 11
A C B
Après 11 (11) Après 11 11
C B
Avant 8 Avant 10 9
A C B
Après 11 +2 Après 11 +2 9
C 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.
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
© 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
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
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
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)
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
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
© FNM 22
Algorithmique
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
© FNM 24
Algorithmique
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 :
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
VAR
Permut : entier
Débproc
Permut Å a
AÅB
B Å Permut
Finproc
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
© 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
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.
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.
33 © FNM
Algorithmique
VAR
Permut : entier
Débproc
Permut Å a
AÅB
B Å Permut
Finproc
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.
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.
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
35 © FNM
Algorithmique
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, ...)
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
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
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.
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.
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 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 ".
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
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
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
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
Dimension : 6
Fin du tableau
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
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 !
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.
© FNM 42
Algorithmique
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
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/
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.
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
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.
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.
© 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
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
51 © FNM
Algorithmique
2 - REPRÉSENTATION
Soit le tableau de notes suivant :
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
Exemple :
Moyenne [32][11] : tableau de réel
Tableau de 32 lignes et 11 colonnes servant aux moyennes de type réel.
Exemple
Moyenne [5][3] permet de travailler avec l'élément de la ligne 5 dans la colonne 3.
Algo MoyennesElèves
Pré-conditions: {}
Post-conditions: {permet de saisir les notes de élèves et le calcul des moyennes}
Var
53 © FNM
Algorithmique
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
55 © FNM
Algorithmique
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
Exemple :
Marc : Eleve
Classe[22] : tableau de élèves
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.
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.
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
© FNM 58
Algorithmique
59 © FNM
Algorithmique
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.
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.
© FNM 62
Algorithmique
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
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
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
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
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.
67 © FNM
Algorithmique
On souhaite obtenir :
Nom Prénom
Abascal Christophe
Bastian Gérald
Decker Stéphane
…
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
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.
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
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.
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.
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.
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:
Exemple
Soit la clef naturelle 960011, la clef relative est calculée à l'aide de l'expression
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 :
© 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.
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 ….
73 © FNM
Algorithmique
© 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
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
© 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}
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
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.
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.
© 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.
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
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.
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
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é.
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 ».
PERSONNE
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
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
ACTIONS Action 2
---
Action n
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.
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
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 ».
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 :
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
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
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
On remarque que, pour 6 conditions, et donc 26 =64 cas théoriques possibles, on a seulement 8 cas utiles à
tester.
93 © FNM
Algorithmique
© FNM 94
Algorithmique
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