Exercice d'algo: verif d'un palindrome en C

Fermé
Guits21 - Modifié par Guits21 le 26/11/2010 à 22:33
Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 - 26 nov. 2010 à 22:39
Bonjour,

je cherche à créer un sous-programme permettant de vérifier si une chaîne de caractère est un palindrome. Le but étant de créer ensuite un code dans le programme principal afin d'afficher le resultat pour l'utilisateur.
J'ai déjà réalisé un programme qui fonctionne correctement, cependant je rencontre quelques difficultés pour l'écrire comme une fonction afin de l'appeler par la suite dans mon programme principal.
Aussi, pourriez-vous m'indiquez dans la mesure du possible, quelques pistes afin que je puisse y remédier SVP? Je vous remercie par avance.

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

// Sous-programme verifiant si une chaine de caractere est un palindrome
int Palindrome (char mot,int ok)
{
// Variables
ok = 1;
int n;
n = strlen(mot);
int numero_lettre;

for (numero_lettre=0; numero_lettre < n/2; numero_lettre++)
{
if (mot[numero_lettre]!= mot[n - numero_lettre -1])
{
ok = 0;
}
else
{
ok = 1;
}
}

// Programme principal
int main()
{
// Variables
char mot[256];
int ok;
ok = 1;

// Verification de la longueur d'une chaine de caractere (=<256) => preconditions
do
{
printf("entrer le mot a verifier SVP : ");
scanf("%s",&mot);
}
while ((strlen(mot)>0) || (strlen(mot)<257));

// Appel du sous-programme
Palindrome (mot,ok);

// Affiche le resultat => postconditions
if(ok == 1)
{
printf("Felicitation, la chaine %s est palindrome",mot);
}
else
{
printf("Desole, la chaine %s n'est pas palindrome",mot);
}

system("pause");
return(0);
}

1 réponse

Doctor C Messages postés 627 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 19 février 2016 398
26 nov. 2010 à 22:39
Concernant ta fonction de vérification de palindrome:

- Tu ne sembles pas retourner de valeur (pas de return à la fin de ta fonction).

- Pour ce qui est de ton algo, mon C est un peu rouillé alors je te suggère ce pseudo-code:

numero_lettre= 0;
ok = 1;

while (numero_lettre <= n/2 ET ok == 1) 
{ 
if (mot[numero_lettre]!= mot[n - numero_lettre -1]) 
{ 
ok = 0;
break; // sort de la boucle while
} 
}



Je sais pas si c'est clair mais bon c'est une piste. Je suis pressé alors je dois terminer mon message abruptement.
Si tu as d'autres questions n'hésites pas!

Bonne chance!
1