Aide palindrome en C

Résolu/Fermé
tonyx01 Messages postés 42 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 17 février 2014 - Modifié par tonyx01 le 4/01/2014 à 15:12
tonyx01 Messages postés 42 Date d'inscription samedi 1 décembre 2012 Statut Membre Dernière intervention 17 février 2014 - 5 janv. 2014 à 21:36
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
4 janv. 2014 à 17:04
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 samedi 1 décembre 2012 Statut Membre Dernière intervention 17 février 2014 51
5 janv. 2014 à 20:21
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 janv. 2014 à 20:53
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 samedi 1 décembre 2012 Statut Membre Dernière intervention 17 février 2014 51
5 janv. 2014 à 21:36
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