Bonjour,
je souhaitais faire une fonction qui retourne la chaine suivant celle passée en paramètre. Exemple :
A > B
Z > BA
AAZ > ABA
...
Je me suis dit facile ,c'est juste un changement de base alors j'ai décomposé :
. Transformation de la chaine en entier base 10
. Ajout de l'incrément (1 par défaut mais on peut le passer en paramètre)
. Transorfmation de l'entier en chaine
Mais je me bute à un problème et m'embrouille dans la compréhension. Voici l'algo que j'ai fait :
Comme vous pouvez le voir, j'ai aussi l'alphabet en paramètre qui me permettra de le changer au besoin. Ainsi je définit la base comme la taille de l'alphabet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 FONCTION sIncrementeChaine(psChaine est une chaîne, psAlphabet est une chaîne = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", pnStep = 1) nChaineDansBase est un entier sans signe sur 8 octets = 0 nIndice est un entier nPuissance est un entier = 0 nBase est un entier = Taille(psAlphabet) sChaineResultat est une chaîne = "" //Conversion de la chaine en entier POUR nIndice = Taille(psChaine) A 1 PAS -1 nChaineDansBase += Position(psAlphabet,psChaine[[nIndice]]) * Puissance(nBase,nPuissance) nPuissance++ FIN //Ajout de l'incrément nChaineDansBase += pnStep //Conversion de l'entier dans la base TANTQUE nChaineDansBase <> 0 //Recherche de la puissance max nPuissance = 0 TANTQUE PartieEntière(nChaineDansBase/Puissance(nBase,nPuissance + 1)) <> 0 nPuissance++ FIN sChaineResultat = sChaineResultat + psAlphabet[[PartieEntière(nChaineDansBase/Puissance(nBase,nPuissance))]] //On retranche la partie convertie nChaineDansBase = nChaineDansBase - (PartieEntière(nChaineDansBase/Puissance(nBase,nPuissance)) * Puissance(nBase,nPuissance)) FIN RENVOYER sChaineResultat
L'opération de conversion de la chaine en entier fonctionne car j'ai bien :
Z = 26
A = 1 (c'est là ou je sens l'embrouille...)
BA = 27
Le problème est qu'avec mon algo, quand j'incrémente :
- Y je tombe sur A : Y = 25 et on l'incrémente à 26. La conversion donne bien une puissance de 1 avec un reste de 0 et on tombe sur A...
Est ce que vous voyez où je me perd ?
Partager