Swift: File séquentielle -1-

Introduction

Cette série d’articles est consacrée à la traduction des schémas de programme sur les files séquentielles. La traduction d’un schéma de programme représente la dernière étape du processus de développement: Analyse, Conception et Construction. Nous avions, dans les premiers articles sur l’algorithmique, évoqué la possibilité de vérifier l’exactitude d’un algorithme par l’utilisation de AlgoBox.

Notre approche est un peu différente puisqu’elle préconise de maitriser le développement d’algorithme tout en apprenant un langage de programmation, par conséquent de pouvoir vérifier la validité d’un algorithme à l’aide d’un langage informatique.

Une des difficultés de traduction que l’on pourrait rencontrer, tient au fait que la syntaxe et le vocabulaire des schémas de programmes exprimés, en français, diffèrent de celle du langage Swift.

Afin de rendre la traduction plus simple nous avons développé un ensemble de fonctions et de déclarations dans un « framework » que nous appellerons AlgoSwift. Les principales primitives du langage algorithmique comme, Premier, Dernier Ranger et Prendre, Avancer deviennent des fonctions Swift.

La fonction Swift Premier est l’implémentation de la primitive Premier du langage algorithmique. Cette fonction positionne le curseur au début de la file pour préparer l’accès par une valeur. Elle positionne le curseur sur le premier élément de la file Si la file est vide la fonction Dernier délivre la valeur VRAI pour indiquer que la fin de file est atteinte.

La fonction Prendre qui implémente la primitive Prendre permet d’accéder à la valeur de la position courante. Son fonctionnement est le suivant:

  • Ne modifie pas le curseur de position.
  • Extrait la valeur de l’élément courant et le mettre dans une variable.
  • Cette fonction est TOUJOURS définie car la fonction Premier doit avoir été exécutée au préalable.
  • La valeur sélectionnée est TOUJOURS valide puisqu’elle ne modifie pas le curseur de position

La fonction Avancer est la primitive du langage algorithmique Avancer. Cette fonction permet de faire avancer le curseur à la position suivante. Si la fin de file est atteinte, la fonction Dernier délivre la valeur VRAI.

La fonction Dernier comme la primitive Dernier délivre la valeur VRAI si l’action Avancer ou Premier ont essayé de lire la marque de fin de file. Il délivre FAUX dans tous les autres cas.

La fonction Ranger est une primitive d’accès qui permet de ranger une valeur dans une file. L’interprétation de cette primitive est la suivante:

  • Rangement de la donnée contenue dans l’emplacement appelé Valeur dans la file à la position du curseur.
  • Le curseur n’est pas modifié par cette fonction
  • Cette action est définie si et seulement si la primitive Premier ou Avancer à été exécutée
  • La valeur de la fonction Dernier n’est pas modifiée par cette primitive

En conclusion on note que pour que le parcours d’une file séquentielle soit correcte il suffit de respecter l’enchainement des fonctions comme indiqué ci-dessous.

  • La fonction Prendre doit être précédé d’au moins un appel de la fonction Premier.
  • La fonction Avancer est toujours exécutée après Prendre.
  • La fonction Dernier doit suivre Premier afin de protéger l’accès à une valeur de la fonction Prendre.
  • La fonction Premier doit toujours précéder la fonction Dernier afin de tester correctement le fin de file

Au cours des prochains articles nous présenterons tous les programmes Swift correspondants au différents traitements que l’on peur réaliser sur une ou plusieurs file séquentielles comme:

  • Accès à une élément
  • Recherche d’un élément
  • Insertion d’un élément
  • Suppression d’un élément
  • Copie d’une partie d’un ensemble
  • Éclatement de l’ensemble en plusieurs sous-ensemble
  • Fusion de plusieurs ensemble en un seul
  • Tri (ordonner les éléments d’une file séquentielle suivant une relation d’ordre)

Tous ces algorithmes impliquent une énumération dont le parcours se modélise toujours suivant le schéma de programme Parcours:

Action Parcours 
   Premier(File)
   TantQue Non Dernier(File)
   Faire
      Prendre(File,Val)
      "suite d'instruction de traitement de la valeur Val"
      Avancer(File)
   Fin-Faire 
Fin-Action