Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  Programmation
  C - C++

  mot palindrome

Bas de page
Auteur Sujet :

mot palindrome

n°19636
Echap
Profil : Jeune recrue
Posté le 12-07-2009 à 01:28:54  
 

Salut
Je n'ai pas arrivé à résoudre un problème de vérification d'une chaine de caractères. Le problème consiste à vérifier si un mot est palindrome ou non sans l'utilisation de la <string.h>
J'ai tapé le code pas mal de fois mais sa marche pas avec moi pourriez vous m'aidez svp
exemple d'un mot palindrome :
i=0,j=5  
le mot LAVAL et palindrome" toujours ch[i] == ch[j] "
voila  code:

Code :
  1. #include<stdio.h>
  2. #include<conio.h>
  3. int main()
  4. {    int n;
  5.     char ch[n];
  6.     int i,m,k,p,j;
  7.     m=1;
  8.     puts("donne une chaine de caractaire\n" );
  9.     gets(ch);
  10.     printf("la chaine tape est :%s\n",ch);
  11.  
  12.      for (j=0;ch[j];j++)  //compte le nb de caracteres "comme laal"
  13.     ;
  14.     printf("\nnombres de caractéres est:%d",j);
  15.     p= j%2;
  16.     k=j/2;
  17.     if (p==0) // le cas d'un mot don les caracteres multiple de 2
  18.     {
  19.     for(i=1;i==k,j==k+1;i++,j--)
  20.          { 
  21.              if(ch[j]==ch[i] )
  22.                 {
  23.                     m=0;
  24.                 }
  25.              else
  26.               {
  27.                     break;
  28.                     puts("le chainne ne pas palendrome" );
  29.                }
  30.         }
  31.       }
  32. else
  33. {
  34.         for(i=1;i==k,j==k+2;i++,j--) // le cas  le de caracteres d'un mot impaire "comme laval"
  35.         {
  36.           if(ch[j]==ch[i])
  37.                {
  38.                       m=0;
  39.                 }     
  40.           else
  41.                 {
  42.                      break;
  43.                      puts("le chainne ne pas palendrome" );
  44.                  }
  45.           }
  46. }
  47. if(m==0){    printf("lachaine est palindrome",j);}
  48. getch();
  49. return(0);
  50. }

mood
Pub
Posté le 12-07-2009 à 01:28:54  
 

n°19637
cmoila
Profil : Membre
Posté le 13-07-2009 à 18:53:21  
 

Salut,
Mais quel est ton algorithme ?
Tu fais une différence entre nombre de caracteres pair et impair mais pourquoi ?
 
Tu as un mot dans une chaine à zéro terminal. (standard C)
Tu veux savoir si c'est un palindrome. Tu dois donc vérifier que le premier caractère est identique au dernier et ainsi de suite...
 
Tu crées une boucle avec deux pointeurs. un sur le 1er un sur le der
et tu fais les verif en incrémentant l'un et décrémentant l'autre.
 
Tu sors de la boucle quand les pointeurs se sont croisés. (boucle while condition de sortie)
Si en cours de route tu trouves une différence (pas un palindrome) tu as ton résultat, donc tu casses la boucle (break)


Message édité par cmoila le 13-07-2009 à 18:55:32
n°19642
Echap
Profil : Jeune recrue
Posté le 14-07-2009 à 02:30:31  
 

merci bien pour la réponse cmoila ,l'algorithme c'est un invention de moi :D.je vais vous donner une "pré-analyse" descendante
1) lecture d'une chaine & affecter dans un tableau  
2) compter le nombre de caractères on utilisant cette méthode  
 

Code :
  1. for (j=0;ch[j];j++)  //compte le nb de caractères "  
  2.    ;


3)teste sur le nombre de caractères (paire ou impaire) "sa sert a arrêter la boucle de teste si le mot est palindrome si c'est pas le cas on fait break
pourriez vous m'aider a résoudre se problème avec cette méthode  
 
NT: je dois pas utiliser la bibliothèque "string.h" donc pas de strln ni srtcpy  

n°19646
cmoila
Profil : Membre
Posté le 15-07-2009 à 15:46:47  
 

Tu as pas le droit aux bibliotheques pour te forcer à réfléchir.  
 
T'as fonction de calcul de longueur de str n'est pas très élégante et un peu (beaucoup) piegeuse pour un débutant.
 
for (j=0;ch[j];j++) ;
 
tu sous-entends le test c'est pas forcement très lisible pour tout le monde. C'est plus clair et ca change rien d'écrire :
 
for ( j=0; ch[j]==0; j++ )  ;
 
c'est pas mauvais mais c'est pas l'utilisation classique de la boucle construite for() car justement tu ne fais rien dans la boucle.  
Une boucle simple est plus adaptée.
 
j = 0;
while ( ch[j++] != 0 )  ;   // équivalent à    while( !ch[j++] )  ;
 
est plus habituel.
 
Sauf que normalement on utilise des pointeurs qui servent justement a manipuler les tableaux et tout particulierement les chaines de car.
 
D'où ma question est ce que tu connais les pointeurs ?
On peut faire sans, mais c'est moins clair.
 
 
 
 

  FORUM Rue-Montgallet.com
  Programmation
  C - C++

  mot palindrome

© 2000-2024 Forum.rue-montgallet.com - Tous droits réservés