Function ne fonctionnant pas

Par Noldea, il y a 8 ans


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

Carouge10, il y a 8 ans

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 <=.

Balsakup, il y a 8 ans

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, il y a 8 ans

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.

Balsakup, il y a 8 ans

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

Noldea, il y a 8 ans

@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.

Mehdikacim, il y a 8 ans

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
Noldea, il y a 8 ans

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