Aide palindrome en C

Résolu
tonyx01 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -  
tonyx01 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   -
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");

}
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.

0
tonyx01 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   51
 
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 !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
tonyx01 Messages postés 42 Date d'inscription   Statut Membre Dernière intervention   51
 
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 !
0