Bonjour à tous !

Voila je rencontre un petit problème avec mon code.

Ce que je fais

~Voici mon code : ~

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        var firstarray = []; // je déclare mon tableau
        var secondarray = []; //deuxième tableau
        function palindrome(mot){ //fonction
            if (mot.length % 2 === 0){ /*si divise par 2, impossible d'avoir un
             mot palindrome */
                console.log('Votre mot n\'est pas un palindrome.')
            }
            for(var i = 0; i = (mot.length/2)-2.5 ; i++ ){ /* ma var i, jusqu'à
            wavelength/2 -2.5, ça marche pour kayak et pour lol donc pour tous
             les autres nombres */
                firstarray.push(mot[i]); //entrer valeurs des lettres dans le tableau
                console.log(firstarray) //Faire apparaître le tableau
            }
            for(var j = (mot.length/2) - 0.5 ; j = mot.length - 1 ; i--){
                secondarray.push(mot[j]);
                console.log(secondarray)
            }
            if(firstarray === secondarray){
                console.log('Votre mot est un palindrome.');
            }
            else{
                console.log('Votre mot n\'est pas un palindrome.');
            }
        }
        document.write(palindrome('kayak'))
    </script>
</body>
</html>

Ce que je veux

Je souhaiterais un code me permettant de déterminer, à l'aide d'une fonction, si un mot est ou non palindrome.

Ce que j'obtiens

Mon code ne marche absolument pas, j'obtiens une boucle infini. Ma page ne se charge pas. :(

7 réponses


Balsakup
Réponse acceptée

Salut

si divise par 2, impossible d'avoir un mot palindrome, faux, SELLES est un palindrome et est divisible par 2

Voilà un petit cadeau

function palindrome(str) {
        for (var i = 0; i < str.length / 2; i++) {
                if (str[i] !== str[str.length - i - 1]) {
                        return false;
                }
        }

        return true;
}
Maenhyr
Réponse acceptée

un string est une chaine de caractères, tu peux la décomposer et l'inverser.

  • split('') transforme une chaine de caractères en un tableau suivant le séparateur fourni en paramêtre. Si c'est une chaine vide, il va couper à chaque lettre.
  • reverse() inverse l'index de tous les éléments du tableau
  • join() transforme un tableau en une chaine de caractères en concaténant les valeurs.
 function palindrome(mot){
    return mot === mot.split('').reverse().join('');
 }

EDIT : corrigé suite au commentaire de @Balsakup.

Mehdikacim
Réponse acceptée

En fait en programmation on utilise des objets.
Dans un objet mot tu peux lui appliquer des méthodes (fonctions/procédures).
mot étant un chaîne de caractères tu peux lui appliquer split.
Split prend en paramètre une chaîne par exemple un chaîne vide ( split('') )

Ainsi, split('') te retourne un tableau qui casse ta chaîne par lettres.

ex:

var mot = 'MOT':
var tab;
tab = mot.split('');
// ici tab vaut ['M','O','T'];
var palinTab = tab.reverse();
// reverse() permet de retourner le tableau
// palinTab = ['T','O','M'];

var palindrome = palinTab.join();
// join permet de joindre chaque elements d'un tab sous forme de chaine, ici TOM
// puis on compare si palindrome == mot palindrome sinon, non

Bonjour,

1/ Il manque pas mal de ; à la fin des console.log...
2/ La deuxième condition d'un "for" ne pas être seulement =. Il faut qu'elle soit < ou > ou >= ou <=.

@prbaron, bon exemple, par contre faut remplacer join() par join(''), sinon il va concaténer avec des virgules

Noldea
Auteur

@Balsakup Je ne comprends pas bien ton code, je m'excuse, je débute en programmation.
@prbaron Je ne comprends pas très bien non plus ce que vous faites, l'utilité des trois objets.

Noldea
Auteur

Merci tout le monde, bonne soirée, bonne nuit ! :)