Anagrammes

Résolu/Fermé
Anna - 22 févr. 2016 à 12:36
 Anna - 22 févr. 2016 à 20:10
Bonjour,

SVP, j'ai besoin de vos aides pour vérifier si la correction de l'exercice suivant est correcte ou non :

Exercice:"

Écrire une procédure récursive nommée Anagramme qui permet d’afficher tous les anagramme d’une chaine ch.
Remarque: Utiliser une permutation circulaire pour résoudre ce problème.
¬Exemple : ch="iag"
Les anagrammes de « iag » sont :
1- aig
2- agi
3- gai
4- gia
5- iga
6- iag

Correction: "

Procédure PermutCirc(var ch :chaine)Début

Si LONG(ch)>1 Alors
Ch=ch[LONG(ch)] +SOUS-CHAINE(ch,2,LONG(ch)-1)
Fin Si
Fin

Procédure Anagramme(s : chaine ; c : Entier ; var l : Entier)
Var
i : Entier
tete, queue : chaine

Début

Pour i de 1 à LONG(s) - c
tete= SOUS-CHAINE (s, 1, c)
queue= SOUS-CHAINE (s, c+1,LONG(s)-c)
s = tete +PermutCirc(queue)
Si c =LONG(s) - 1 Alors
l=l + 1
Ecrire(l,")",s)
Sinon
Anagramme(s, c + 1, l)
Fin Si

Fin Pour
Fin

J'ai pas pas compris la correction, dans la première procédure PermutCirc et au niveau de sous-chaine il a choisi la position 2 et n'est pas 1 ?
SVP qui peut me guider ? c urgent !

2 réponses

Bonjour,

Tu as raison, c'est bien une erreur, la bonne instruction est:
Ch=ch[LONG(ch)] +SOUS-CHAINE(ch,1,LONG(ch)-1)

D'autre part tu as écrit PermutCirc comme une procédure alors que dans cette ligne:
s = tete +PermutCirc(queue)
tu fais appel à une fonction, il faut ecrire plutot comme ça
Fonction PermutCirc(var ch :chaine) : chaine
Début
Si LONG(ch)>1 Alors
Ch=ch[LONG(ch)] +SOUS-CHAINE(ch,1,LONG(ch)-1)
Fin Si
retourner(ch)
Fin

Pour le reste, on ne sait pas d'où sortent les variables (s : chaine ; c : Entier ; var l : Entier)

A+
0
Merci bien Mosca
0
SVP, est ce que la deuxième partie de l'algorithme est correcte ?

Procédure Anagramme(s : chaine ; c : Entier ; var l : Entier)
Var
i : Entier
tete, queue : chaine
Début
Pour i de 1 à LONG(s) - c
tete= SOUS-CHAINE (s, 1, c)
queue= SOUS-CHAINE (s, c+1,LONG(s)-c)
s = tete +PermutCirc(queue)
Si c =LONG(s) - 1 Alors
l=l + 1
Ecrire(l,")",s)
Sinon
Anagramme(s, c + 1, l)
Fin Si
Fin Pour
Fin
0