IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

verification si le mot est palindrome


Sujet :

C

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut verification si le mot est palindrome
    Salut
    Je n’ai pas arrivé à résoudre un problème de 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
    voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include<stdio.h>
     
    int main()
    { char N,ch[30];
      int i,k,j,p,m;
      printf("tapez une chaine de caracteres 'caractere par caractere 'tapez N pour terminer:\n");
       j=0;
       for(i=0;ch[i]=='N'||i<=30;i++)
       {
     
      scanf("%c",&ch[i]);
      i=j;
    }
    i=0;
    k=j;
    m=3;
    if(j%2==0)
    {
    	for(i=0,j=k;i<=(k/2),j>(k/2);i++,j--)
    	{
    	if(ch[i]==ch[j])
    	{
    	    m=1;
       else
     
    m=0;
    }
    }
    }
     
    else
    {
    	for(i=0,j=k;i<=(k/2),(j>((k/2)+1),i++,j--)
    	{
          if(ch[i]==ch[j])
    {
    	m=1;
    }
    else
    {
    	m=0;
    }
    }
      if(m=1)
    {
       printf("la chaine est palindrome \n");
     }
       else
       {
       printf(" \n la chaine n'est pas palindrome");
       }
       return(0);
    }
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Bonjour,
    Pour ça, je conseille de calculer manuellement la longueur de la chaîne, puis la parcourir jusqu'à la moitié en partant des deux côtés.

    Quelques remarques:
    1. Ton code est très mal indenté
    2. Les noms de variables à un seul caractère, c'est à proscrire quand il n'y en a autant (six!).
    3. Les noms de variables en majuscules sont déconseillés, les majuscules étant traditionnellement réservées aux constantes.
    4. Sépare ton code en fonctions. Surtout, fait une fonction séparée pour déterminer si un mot passé en paramètre est palindrome.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par Echap Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	if(ch[i]==ch[j])
    	{
    	    m=1;
       else
     
    m=0;
    }
    Manque '}' et '{'.
    Citation Envoyé par Echap Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0,j=k;i<=(k/2),(j>((k/2)+1),i++,j--)
    manque ';' et ')' et ',' en trop.

    Voici le même code mieux indenté, mais pas encore fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include<stdio.h>
     
    int
    main (void)
    {
      char N, ch[30];
      int i, k, j, p, m;
      printf("tapez une chaine de caracteres 'caractere par caractere '"
             "tapez N pour terminer:\n");
      j = 0;
      /* la condition de la boucle de sortie est à revoir */
      for (i = 0; ch[i] == 'N' || i <= 30; i++)
        {
          scanf ("%c", &ch[i]);
          /* dès qu'on passe ici, on remet i à 0... on ne risque pas
             d'aller très loin dans la boucle for. */
          i = j;
        }
      i = 0;
      k = j;
      m = 3;
      if (j % 2 == 0)
        {
          for (i = 0, j = k; i <= (k / 2) || j > (k / 2); i++, j--)
            {
              if (ch[i] == ch[j])
                {
                  m = 1;
                }
              else
                {
                  m = 0;
                }
            }
        }
      else
        {
          for (i = 0, j = k;
               i <= (k / 2) || (j > ((k / 2) + 1)) /* -, +; */ ; i++, j--)
            {
              if (ch[i] == ch[j])
                {
                  m = 1;
                }
              else
                {
                  m = 0;
                }
            }
        }
      /* m = 1 ou m == 1 ? */
      if (m = 1)
        {
          printf ("la chaine est palindrome \n");
        }
      else
        {
          printf (" \n la chaine n'est pas palindrome");
        }
      return (0);
    }

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Bonjour,
    Pour ça, je conseille de calculer manuellement la longueur de la chaîne, puis la parcourir jusqu'à la moitié en partant des deux côtés.

    Quelques remarques:
    1. Ton code est très mal indenté
    2. Les noms de variables à un seul caractère, c'est à proscrire quand il n'y en a autant (six!).
    3. Les noms de variables en majuscules sont déconseillés, les majuscules étant traditionnellement réservées aux constantes.
    4. Sépare ton code en fonctions. Surtout, fait une fonction séparée pour déterminer si un mot passé en paramètre est palindrome.
    dsl vous avez raison
    Exemple d'un mot palindrome: Laval toujours ch[i]==ch[j]
    Nom des variable en majuscule : j'aipas trouvé une méthode pour déclarer la fin de la chaine de caractère qu'avec cette méthode
    Séparation en fonction : oui la résolution par la séparation en fonction plus facile mais je ne veux pas utiliser les utilisé pour des raisons


    merci pour votre réponse

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par mabu Voir le message

    Voici le même code mieux indenté, mais pas encore fonctionnel :
    Merci beaucoup j'vais le vérifier de nouveau

  6. #6
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    enfin j'ai trouvé ma faute pour que le code soit fonctionnel
    1: il faut scanf("%s",ch) car defaut chaque caractère prend une cellule de
    ch[30]
    2:la longeur de la chaine de caractères doit étre k=i-1
    merci pour vos reponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déterminer si un mot est un Palindrome
    Par alvanoto dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 28/05/2009, 13h37
  2. Retour a la ligne dans un textarea quand le mot est trop long
    Par avogadro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/11/2006, 15h35
  3. Réponses: 2
    Dernier message: 13/08/2006, 23h56
  4. [XSLT] vérification si une chaîne est une date
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/06/2006, 15h06
  5. Tester si un mot est palindrome
    Par imeys dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo