VERIFICATION D'UN PALINDROME

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 5 déc. 2011 à 20:10
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013 - 6 déc. 2011 à 14:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53828-verification-d-un-palindrome

Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
6 déc. 2011 à 14:51
Mais pourquoi s'embêter à passer par un tableau de caractères alors, qu'un string EST un tableau de caractère (tout du moins son implémentation)
De plus on peut se contenter de ne parcourir que la moitié de la chaine (vu qu'on l'analyse "par les deux bouts")

Function IsPalindrome(ByVal text As String) As Boolean
    For i As Integer = 0 To text.Length \ 2 - 1
        If text(i) <> text(text.Length - 1 - i) Then Return False
    Next
    Return True
End Function

Quitte à faire un overkill contreperformant, autant le faire élégamment ^^ (avec les méthodes d'extension)
Dim isPalindrome As Func(Of String, Boolean) = Function(text) text.SequenceEqual(text.Reverse)

Cordialement !
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
6 déc. 2011 à 14:07
Salut
cela serait plutot un snippet
Private Function Palindrom(ByVal strin As String) As Boolean
Dim strcar As Char()
Dim iter As Integer
strcar = strin.ToCharArray
For iter = 0 To strcar.Count - 1
If strcar(iter) <> strcar(strcar.Count - 1 - iter) Then
Return False
End If
Next
Return True
End Function
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 déc. 2011 à 11:44
Regarde les différentes méthodes postées sur Codyx: http://codyx.org/snippet_savoir-si-mot-est-palindrome_398.aspx
D'ailleurs, vu le nombre de solutions postées pour ce "problème", ta source n'a que peu d'intérêt, désolé.
Je la supprimerais donc dans l'après-midi.
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
6 déc. 2011 à 11:38
Non.
Un palindrome est un mot, ou un texte plus généralement, dont l'ordre des lettres ne change pas suivant le sens de lecture. "kayak", "Esope reste ici et se repose": oui, ce sont des palindromes. "Abbaya": non, pas palindrome.Donc, la définition de Adn56 est tout à fait correcte. Je pense que tu n'as pas lu toute sa phrase ;) Je cite: "alors la première lettre la dernière, la seconde l'avant dernière, etc..."
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 10
6 déc. 2011 à 11:19
salut Adn56, Sache que pour un palindrome si tu dis que la Première=dernière c'est faux exemple:Abbaya
est-ce un palindrome?
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
6 déc. 2011 à 08:19
Salut, encore une fois hormis l'inutilité la plus complète du code, il vous faut vraiment prendre en compte les conseils de NHenry (c'est codé en VB6), Faites aussi attention à la cohérence des noms de variables, un MotLong m'indique une string pas un Long ou integer ;)
Pour finir avec ce bout de code, je rebondi sur le message de Sehnsucht car il a bien raison.Inverser les lettres une à une pour les placer dans un autre string et voir si c'est égal et loin d'être le plus simple, regarde bien la définition de palindrome, une solution saute au yeux ! Si c'est un palindrome alors la première lettre la dernière, la seconde l'avant dernière, etc....tant que c'est égalité sont vrai alors c'est un palindrome, dés qu'une est fausse zou on sort de la boucle pour dire NON c'est pas un palindrome. Voili voilou.. kenavo
Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
5 déc. 2011 à 21:05
Bonsoir,

Outre les remarques déjà énoncées, il faudrait aussi songer à revoir l'algorithme, créer un nouveau tableau de caractères pour le remplir de la chaîne à l'envers afin de comparer les 2 strings, c'est pas vraiment le plus simple ; une simple boucle peut suffire ;)

Cordialement !
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
5 déc. 2011 à 20:10
Bonsoir,

Retires l'import de l'espace de nom Microsoft.VisualBasic (propriétés du projet) et utilises les méthodes fournies par le Framework.

Là tu as codé en VB6 dans .NET.

MsgBox -> Messagebox.Show
Mid -> MaChaine.SubString
etc.
Actives aussi (si ce n'est pas déjà fait) Option Strict et Option Explicit.

Long en VB6 équivaut à Integer en .NET.
Rejoignez-nous