Aide palindrome en C

Résolu
Bonjour,

En fait voilà je doit essayer de comprendre pendant ces vacances le cours de mon professeur en C il nous a donné un programme afin de déterminer si en rentrant une chaîne de caractère si c'est ou pas d'un palindrome et j'ai un peu de mal le voilà : (ce sont mes commentaires pour essayer de comprendre) Merci !!!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main (int argc, char *argv)
{
char mot[20]; // definition d'un tableau de 20 caractere
int i, j, Palindrome; // variables i, j, palindrome
Palindrome = 0;

printf ("Veuillez entrer un mot : ");
scanf ("%s", mot);
for (i = 0, j = strlen (mot) - 1; i <= j; ++i, --j){ // la fonction "strlen" va permettre de connaitre la longeur de la chaine
if (mot[i] == mot[j])
Palindrome = 1;
else
{
Palindrome = 0;
break;
}
}

if (Palindrome) // si palindrome = 1 alors on peut lire ">> Ce mot est un palindrome;"
printf ("%s >> Ce mot est un palindrome.\n", mot);
else // si palindrome = 0 alors on peut lire ">> Ce mot n'est pas un palindrome."
printf ("%s >> Ce mot n'est pas un palindrome.\n", mot);
system("pause");

}

2 réponses

  1. Contributeur
    Bonjour,
    Ce n'est pas void main mais int main. Et du coup on met return 0 à la fin.
    Sinon l'algorithme me semble bien compliqué. Lusage dune fonction rendrait lalgo plus simple et plus propre. Grosso modo il faudrait que tu rajoutes un "tant que palindrome==1". Pas besoin de palindrome=1; à chaque itération.

    1. D'abord merci de m'aider. Je suis débutant en C cependant je ne vois pas l'utiliser d'un "tant que" mais pourquoi pas essayer un "switch" ? J'aurai aussi besoin d'aide surtout sur cette partie je n'ai pas tout compris ... >> "for (i = 0, j = strlen (mot) - 1; i <= j; ++i, --j)"
      Merci !
      1. Contributeur
        Un switch ? Un switch ne remplace pas un While... Ou alors explique ton idée davantage.
        Ce que je disais sur ton code, c'est que le break n'est pas très élégant. En plus à chaque itération tu fais Palindrome=1; s'il y a égalité des lettres. Il suffirait de rien faire.

        Ce qui donnerait :
        for (i = 0, j = strlen (mot) - 1; i <= j; ++i, --j){ // la fonction "strlen" va permettre de connaitre la longeur de la chaine
             if (mot[i] != mot[j]) {
                  Palindrome = 0;
                  break;
             }
        } 


        Une autre variante sans break :

        i<-0
        j<-Taille(Mot)-1
        Palindrome<-1
        TantQue i<j ET palindrome=1 Faire
        Si Mot[i]<>Mot[j] Alors
        Palindrome<-0
        FinSi
        i<-i+1
        j<j-1
        FinTantQue
        Et enfin, une fonction serait plus propre. Tu mets par exemple ton code "for" dans une fonction int estPalindrome(const char*const mot); qui te renverra 0 si le mot n'est pas un palindrome sinon 1. Ainsi en lisant le nom de la fonction, on sait directement à quoi ça sert. Et ce bout de code pourra être rappelé ultérieurement.

        Cdlt,
      2. Je comprend mieux j'ai donc rectifier avec votre version. C'est vrai que c'est beaucoup plus concis pour le même résultat .
        Merci beaucoup !

    Discussions similaires

    palindrome

    3 réponses