Instruction répétitive

En programmation le terme boucle fait référence à l’exécution répétitive d’une ou plusieurs instruction. Une boucle répétitive est une structure de contrôle qui permet de répéter l’exécution d’une séquence d’instructions. Elle comporte obligatoirement:

  • Un bloc d’instructions qui est exécuté à chaque itération
  • Une instruction d’arrêt, grâce à laquelle la boucle s’arrête
  • Un itérateur qui est le moyen par lequel on réalise la répétition

L’itération, couramment utilisé en programmation, est un processus qui consiste à répéter une séquence d’instructions afin de produire le résultat souhaité. La plupart des langages de programmation impérative implémentent l’itération comme une boucle for ou une boucle while

Pour établir une boucle on met en œuvre un itérateur, il définit la manière de parcourir séquentiellement une collection d’éléments.
On dispose de plusieurs techniques pour mettre en œuvre un itérateur :

  • Une expression booléenne: la boucle s’arrête quand la valeur de l’expression booléenne qui contrôle la boucle est Faux .
  • Une expression itérable: le contrôle de la boucle est  assuré par un nombre entier ou un ensemble. Pour un nombre entier: la boucle est répétée autant de fois que la valeur du nombre. Pour un ensemble les éléments sont parcourus du début à la fin.
  • Une expression intervalle: la boucle est répétée autant de fois qu’il y a d’éléments spécifié par l’intervalle.

Note: Une boucle sans itérateur est par définition une boucle infinie. Le seul moyen de l’arrêter est d’utiliser une instruction de sortie de boucle.

En Schema, un itération est guidée par:

  • Itération conditionnelle, elle permet d’effectuer un traitement de zéro à plusieurs fois suivant la valeur d’une expression booléenne.
  • Itération, contrôlée par un élément itérable, nombre entier ou ensemble
  • Itération bornée,  par les valeurs de départ et d’arrivée d’un intervalle

Une itération est constituée d’une expression itérable, booléenne ou intervalle  suivie d’une ou plusieurs instructions, terminée par le mot réservé Fin

Itération conditionnelle

Dans la plupart des langages de programmation on implémente une itération conditionnelle avec l’expression while condition. Le langage Schema, ne défini pas de mot réservé équivalent à while en  Julia, Python ou Swift.
l’instruction d’itération conditionnelle de Schema commence toujours par une expression booléenne. La valeur de l’expression est évaluée avant l’exécution des instructions à répéter. Il est possible que la séquence d’instruction ne soient jamais exécutées si la condition est initialisée à Faux avant d »entrer dans la boucle.

Pour que la boucle se termine Il faut que dans la liste des instructions une instruction au moins évalue la condition à Faux au bout d’un temps fini.

Prenons l’exemple de calcul de la somme des 3 premiers nombres entiers.

SommeDesTroisPremiersNombreEntier -> Entier
   somme <- 0
   compteur <- 0
   compteur < 3 
      compteur = compteur + 1 
      somme <- somme + compteur
   Fin 
   <- somme 
Fin

Traduction Julia:

function SommeDesTroisPremiersNombreEntier()
   somme =0
   compteur =0
   while compteur <3
      compteur = compteur +1
      somme = somme + compteur
   end
   return somme
end

La condition booléenne est compteur < 3 , la condition devient Faux lorsque l’index est  égal ou supérieur à 3 grâce à l’instruction compteur = compteur + 1.

Itération contrôlée par un itérable

Un itérable est une séquence d’éléments que l’on va parcourir sans expression conditionnelle. La boucle de parcours de l’ensemble est une instruction itérative sur cette séquence.

Une itération est dite implicite lorsqu’elle met en œuvre un élément itérable. Par définition, un  élément itérable implique un nombre d’itération. Par exemple l’instruction itérative 3 indique une boucle dont le le nombre d’itération est 3. De même l’instruction iterative ensemble indique une boucle  dont le nombre d’itération correspond au nombre d’éléments de l’ensemble.

Chaque expression itérable peut être suivie d’un séparateur : suivi d’un identificateur. Cette forme d’itérateur permet d’accéder à chaque élément lors de l’itération.

Expression_Itérable : Element 
    séquence d’instructions
Fin

Expression_Itérable
   séquence d’instructions 
Fin

l’expression itérable est un ensemble itérable

Parcours d’un ensemble

cardinal ensemble Ensemble -> Entier
   somme <- 0
   ensemble
      somme <- somme + 1
   Fin 
   <- somme
Fin

Liste  des éléments d’un ensemble

Lister ensemble Ensemble
   ensemble: element
      Afficher element = #element
   Fin
Fin

l’expression itérable est un nombre entier.
Si l’on veut afficher 3 fois “hello Steve“ on écrira , l’algorithme:

helloSteve 
   3 
      Afficher hello Steve
      Afficher have a nice day
   Fin 
Fin<

Pour accéder à la valeur de l’index de boucle que l’on appellera nombre on écrit:

helloSteve 
   3 : nombre 
      Afficher hello Steve #nombre fois
      Afficher have a nice day
   Fin 
Fin

Pour calculer la somme des 3 premiers nombres entiers, on écrit l’algorithme suivant avec une itération sur un nombre entier.

Version sur expression  booléenne

sommeDesTroisPremiersNombreEntier -> Entier
   somme <- 0
   index <- 0
   3
      index <- index + 1
      somme <- somme + index
   Fin
   <- somme 
Fin

Version sur expression itérable

sommeDesTroisPremiersNombreEntier -> Entier
   somme <- 0
   3 : index
      somme <- somme + index
   Fin
   <- somme 
Fin

sommeDesTroisPremiersNombreEntier ensemble Ensemble -> Entier 
   somme <- 0 
   ensemble : index somme <- somme + index 
   <- somme 
Fin

Itération bornée par un intervalle

l’expression itérable est un intervalle sur l’ensemble des nombres entier. Si l’on veut afficher 3 fois “hello Steve“ on écrira , l’algorithme:
L’intervalle est noté borneInférieure -> borneSupérieure

helloSteve
   3 -> 5 Afficher hello Steve
Fin

Dans le cas d’un bloc d’instructions

helloSteve
   3 -> 5
      Afficher hello Steve
      Afficher have a nice day
   Fin
Fin

Pour accéder à la valeur de l’index de boucle que l’on appellera nombre on écrit:

helloSteve
   3 -> 5 : nombre
     Afficher hello Steve #nombre fois
     Afficher have a nice day
   Fin
Fin

Calcul de la somme des 3 premiers nombres entiers, avec itération sur un intervalle.

SommeDesTroisPremiersNombreEntier -> Entier
   somme <- 0
   1 -> 3 : nombre 
      somme <- somme + nombre
   Fin 
   <- somme 
Fin

Itération infinie

Une itération infinie est représentée par un booléen Vrai ou Faux
C’est par définition une boucle infinie si aucune condition d’arrêt n’est spécifiée. Au moins une instruction particulière Sortie permet de provoquer l’arrêt immédiat de l’itération.

Les  particularités de cette boucle: On ne l’utilise pratiquement jamais

  • On peut simuler un boucle TantQue, l’instruction Sortie se trouve en début du bloc d’instructions à itérer
  • On peut simuler une boucle Faire-Jusqua, l’instruction Sortie se trouve en fin de bloc d’instructions
  • On peut exécuter tout ou partie d’un bloc d’instruction, les instructions Sortie sont placées dans le bloc d’instructions.
BoucleInfinie
   Vrai Afficher infinite loop
Fin

La même boucle infinie avec la négation de Faux

BoucleInfinie
   Non Faux : index
      Afficher infinité loop
      Afficher itération #index
   Fin
Fin

Note: l’instruction de Schema Sortie conditionnelle marque la fin de la boucle.

sommeDesTroisPremiersNombreEntier -> Entier
   somme <- 0
   nombre <- 0
   Vrai 
      Si nombre > 3 Sortie 
      somme <- somme + nombre
      nombre <- nombre + 1
   Fin
   <- somme 
Fin

copyright A rchitectures A pplicatives A vancées A3-Soft

A3soft