Un palindrome est un mot qui présente le même ordre des caractères dans les deux sens (de gauche à droite et de draoite au gauche). Nous pouvons implémenter la solution par une boucle (Tant que) ou bien en utilisant le format récursive.
La solution récursive se base sur une idée simple : un mot est palindrome si son premier caractère est identique à son dernier caractère et le reste est aussi palindrome. L'expression du problème de cette façon permet une implémentation récursive : on définit le problème en fonction de lui même.
Vous devez ne pas oublier les conditions d'arrêts; Dans ce cas, nous avons deux :
Le code suivant peut résoudre le problème (fonction + programme principal ) :
L'exécution de ce code avec la saisi du mot : RADAR nous donne le résultat suivant :
Nous pouvons ajouter une fonction de décoration pour améliorer l'affichage et montrer la progression des traitements. Le résultat avec le même mot sera :
Vous pouvez télécharger ces codes sources par ici.
La solution récursive se base sur une idée simple : un mot est palindrome si son premier caractère est identique à son dernier caractère et le reste est aussi palindrome. L'expression du problème de cette façon permet une implémentation récursive : on définit le problème en fonction de lui même.
Vous devez ne pas oublier les conditions d'arrêts; Dans ce cas, nous avons deux :
- Le reste est vide : dans ce cas le mot est un palindrome parce que toutes les vérifications précédentes ont réussi,
- Deux caractères symétriques ne sont pas identiques : on arrête les vérifications et le mot (ou terme) n'est pas un palindrome.
Le code suivant peut résoudre le problème (fonction + programme principal ) :
Program PalindromeRec; { Une fonction récursive pour vérifier est-ce qu'un terme saisi est un palindrome ou pas Définition du palindrome : https://fr.wikipedia.org/wiki/PalindromeRec } function PalRec(s : String; pos : Integer) : Boolean; Var symetrique : Integer; Begin symetrique := Length(s) - pos + 1; If (pos >= symetrique) Then Begin { Une première condition d'arrêt : fin des vérification } PalRec := true; End Else Begin If (s[pos] = s[symetrique]) Then Begin PalRec := PalRec(s, pos + 1); End Else Begin { Une deuxième condition d'arrêt : l'échec d'une vérification } PalRec := false; End; End; End; Var mot : String[30]; Begin WriteLn('Veuillez saisir le mot à tester :'); ReadLn(mot); WriteLn('Est-il palindrome ? : ', PalRec(mot, 1)); End.
L'exécution de ce code avec la saisi du mot : RADAR nous donne le résultat suivant :
Nous pouvons ajouter une fonction de décoration pour améliorer l'affichage et montrer la progression des traitements. Le résultat avec le même mot sera :
Vous pouvez télécharger ces codes sources par ici.