Anagrammes

Résolu
Anna -  
 Anna -
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

  1. Mosca
     
    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
    1. Anna
       
      Merci bien Mosca
      0
  2. Anna
     
    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

Discussions similaires