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 :

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
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.

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 ?