Exercice 68
Énoncé
Modifier la classe set_char précédente, de manière à disposer de ce que l’on nomme
un « itérateur » sur les différents éléments de l’ensemble. Il s’agit d’un mécanisme
permettant d’accéder séquentiellement aux différents éléments. On prévoira trois
nouvelles fonctions membre : init, qui initialise le processus d’exploration ; prochain,
qui fournit la valeur de l’élément suivant lorsqu’il existe et existe, qui précise s’il
existe encore un élément non exploré.
On complétera alors le programme d’utilisation précédent, de manière qu’il affiche
les différents caractères contenus dans le mot fourni en donnée.
N.B. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, et qu’il ne faut pas chercher à utiliser
ici.
Compte tenu de l’implémentation de notre classe, la gestion du mécanisme d’itération
nécessite l’emploi d’un pointeur (que nous nommerons courant) sur un élément du
tableau ens. Nous conviendrons que courant désigne le premier élément de ens non encore
traité dans l’itération, c’est-à-dire non encore renvoyé par la fonction membre suivant
(nous aurions pu adopter la convention contraire, à savoir que courant désigne le dernier
élément traité).
En outre, pour faciliter la reconnaissance de la fin de l’itération, nous utiliserons un
membre donnée supplémentaire (fin) valant 0 dans les cas usuels, et 1 lorsqu’aucun
élément ne sera disponible (pour suivant).
Le rôle de la fonction init sera donc de faire pointer courant sur la première valeur non
nulle de ens s’il en existe une ; dans le cas contraire, fin sera placé à 1.
La fonction suivant fournira en retour l’élément pointé par courant lorsqu’il existe (fin
non nul) ou la valeur 0 dans le cas contraire (il s’agit là d’une convention destinée à
protéger l’utilisateur ayant appelé cette fonction, alors qu’aucun élément n’était plus
disponible). Dans le premier cas, suivant recherchera le prochain élément de l’ensemble
(en modifiant la valeur de fin lorsqu’un tel élément n’existe pas). Notez bien qu’ici la
fonction suivant doit renvoyer non pas le prochain élément, mais l’élément courant.
147
Précédent

- 148/398

Suivant