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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| /* variables
var nbLettres
var pos[nbLettres-1] //tableau dynamique
var longCour
var mot //Le mot, chaine de char
principe:
* On commence avec tous le mot de 1 possibles, puis de 2, ... jusqu'à n
* n est nbLettres
* longCour est la longueur du mot qu'on trouve: au début, elle sera de 1, puis de 2, puis... de n
* pos: contient les curseurs: au début ils sont tous placés dans l'ordre, puis à chaque nouveau mot, le curseur le plus loin avance: quand il est au bout, c'est le curseur d'avant qui avance et ainsi de suite... Ca permet de parcourir toutes les possibilités
* i sert a des itérations quelconques
* tempo est une chaine qui contient le mot temporaire.
*/
chaine mot = entrer mot;
entier nbLettres = longueur(mot);
entier pos[nbLettres];
entier longCour = 1;
entier i;
chaine tempo[nbLettres + 1];
pour longCour = 1, tant que longCour <= nbLettres, faire longCour ++
{
pour i = 0, tant que i < longCour, faire i++
{
//On initialise les pos de départ: pos[0] = 0, pos[1] = 1...
pos[i] = i;
}
toujours faire
{
//On forme le mot avec les lettres désignées par le membres de pos
//On s'arrete lorsqu'on est au bout du mot ou si il n'y a plus de curseur
pour i=0, tant que pos[i]!= 0 et i<longCour, faire i++
{
tempo[i] = pos[i];
}
//Caractere de fin de chaine:
tempo[i+1] = "\0";
ajouter tempo;
//On bouge le curseur de fin:
//Si le dernier curseur est à la fin, on vérifie si le curseur d'avant peut avancer et ainsi de suite....
//Il y a des 1 qui se baladent du fait de la comparaison d'un curseur et d'une longueur (l'un commence à 0, l'autre à 1)
pour i = longCour-1, tant que i >= 0 et pos[i]=nbLettres-(longCour-(i+1)), faire i--
{ ;
}
//On vérifie si la boucle a été exécutée completement: aucun curseur ne peut plus avancer
si i=0
{
sortir de la boucle "toujours faire";
} sinon
{
pos[i] ++;
}
}
} |
Partager