Ah là là, ça ne va pas du tout ça !
Tu as déclaré une variable de type set of '0'..'9'. Ta variable peut donc contenir un ensemble de caractères (jusqu'à 255) prenant une valeur entre '0' et '9'.
Lorsque tu appelles ta procédure, la variable est crée sur la pile, et contient une valeur aléatoire. En fait, pas vraiment aléatoire, puisqu'elle dépend de ce qui s'est passé avant, la pile étant modifiée par les appels aux différentes procédures.
Tu attaques donc ta procédure EditNbBoucleChange et ta variable Tchiffre4 est remplie aléatoirement. Dans ton cas, elle est tout bêtement remplie avec la valeur ['3', '4', '5']. Elle aurait très bien pu contenir ['1', '6'] et ta procédure aurait jeté les autres caractères.
La programmation, ce n'est pas du hasard. Quand on ne sait pas, on cherche dans son cours. Il ne suffit pas d'essayer pour voir ce qui se passe ![:roll:](https://www.developpez.net/forums/images/smilies/icon_rolleyes.gif)
L'opérateur in permet de tester l'inclusion d'un élément dans un ensemble. Pas dans un type ensemble, déclaré avec set of.
Dans la déclaration suivante :
var Characters: set of Char
Characters est un ensemble, il peut contenir une valeur de type ensemble, notée [A..B] ou [A, B, C] ou un mélange des deux.
set of Char est un type ensemble
Et A..B est un intervalle. Ce n'est pas un ensemble, il ne faut pas confondre avec les ensembles même si les notations sont proches.
Donc forcément, vos déclarations fantaisistes essayées ne pouvaient pas fonctionner.
Mais dans la déclaration telle que je viens de la faire, Characters peut contenir un ensemble de caractères quelconque. Il n'a pas été initialisé.
On peut à présent écrire :
Characters := ['A'..'Z', 'a'..'z']
Là, Characters est un ensemble correspondant aux lettres de l'alphabet.
Pour en revenir au problème de départ : le but est de tester si un caractère est un chiffre, autrement dit s'il appartient à l'ensemble des caractères représentants un chiffre. Il s'agit bien de tester la présence d'un élément au sein d'un ensemble.
Cet élément, c'est StCar, et cet ensemble, c'est ['0'..'9']. On peut utiliser l'opérateur in, ce qui donne :
if not (StCar in ['0'..'9']) then ...
Tout simplement... Il serait temps d'aller ouvrir un cours de Pascal ![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
@++
Partager