Le problème d’accès à un élément d’un file, classique en gestion, est formulé habituellement de deux manières:
- Soit on connait la position de l’élément à trouver, on recherche , depuis le début de la file jusqu’au ixième élément.
- Soit on ne connait pas la position de l’ élément et l’on recherche le premier élément dont la valeur est la valeur donnée.
On distingue donc deux types de recherche dans une file séquentielle:
- Un accès par position
- Un accès par valeur ou associatif
Accès par position
Pour construire le schéma de programme de rechrche par position, on reprend le schéma d’énumération vu précédemment:
- Une initialisation d’un compeur de position
- Un condition d’itération qui contrôle l’énumération
Si index est la position de l’élément courant et k la position recherchée
la condition de boucle s'écrit: index < k et Non Dernier (file)
3 cas peuvent se produir
1- k > longueur de file: La condition Non Dernier(file) provoque l’arrêt
2- index <= k <= longueur de file: . On a trouvé le kieme élément
3- k <= 0 la condition index < k ne permet pas le parcours
Schéma de programme
Schéma Programme Accès_Par_Position
Interface
Objectif: Recherche par position lors d'un parcours séquentiel
d'une file de Nombre
Variable valeur : Nombre -- La variable valeur est de type Nombre
Variable file : File -- La variable file est de type File
Résultat: Lecture de tous les éléments de la file
Remarque: La file n'est pas modifiée, le prédicat retourne une valeur
booléenne et la valeur trouvée si le prédicat est vrai
Fin-Interface
Prédicat Accès_Par_Position (file: File,position: Nombre, resultat: Nombre)
Déclaration
Variable existe : Booléen -- La variable accès est de type logique
Variable index : Nombre -- La variable index est de type Nombre
Variable val : Nombre -- La variable val est de type nombre
Instruction
existe = Faux
index = 1
Premier(file) -- Positionne le curseur sur le premier élément
TantQue (index < position) ET (Non Dernier(file)
Faire
index = index + 1
Avancer(file)
Fin-Faire
Si Non Dernier(file) ET position > 0
Alors
Prendre(file,val)
resultat = val
existe = vrai
Fin-Si
Fin-Instruction
Accès_Par_Position = existe
Fin-Prédicat
Fin_Schéma