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 :

besoin de commentaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut besoin de commentaire
    Hello tout le monde.
    Dans le cadre de ma formation, j'ai un exercice où l'on me demande d'écrire un programme qui teste si la chaîne saisie au clavier par l'utilisateur est un palindrome. De ce point de vue là, grace à mon ami google, j'ai réussi à adapter des sources à ma convenance, le problème, c'est que je percute pas trop le mécanisme de comparaison de caractère.
    voici ma source
    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
    #include <stdio.h>
    #include <string.h>
     
    int main(void)
    {
      char ch[255];
      int indice, taille, moitie;
     
      // lecture du ch
      printf("entrez une chaîne : ");
      fgets(ch,255,stdin);
     
      /* on compare la 1ere lettre avec la derniere, la 2eme avec
      l'avant derniere, et ainsi de suite jusqu'a ce qu'on atteigne
      le milieu (fin de la comparaison), ou que les lettres comparees
      soient differentes (inutile de continuer ce n'est pas un palindrome) */
      taille = strlen(ch);
      moitie = taille / 2;
      indice = 0;
      while((indice < moitie) && (ch[indice] == ch[taille-indice-1]))
        indice++;
     
      if(indice == moitie) // si on a atteint le milieu c'est un palindrome
        printf("%s est un palindrome\n", ch);
      else   // deux lettres n'etaient pas identiques
        printf("%s n'est pas un palindrome\n", ch);
     
      return 0;
    }
    Voilà en faite, c'est cette boucle que je percute pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while((indice < moitie) && (ch[indice] == ch[taille-indice-1]))
    notament ceci (ch[indice] == ch[taille-indice-1]) pourquoi on lui dit -1.Merci de vos réponse. Et puis bonne fête de la musique

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Citation Envoyé par sk8trasher Voir le message
    pourquoi on lui dit -1
    Parcequ'en C les indices de tableaux vont de 0 à taille - 1

    donc tu compares les éléments en positions 0 et taille - 1, puis 1 et taille - 2 et ainsi de suite...

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    oui mais pourquoi -1, puisque l'on soustrait indice de taille, ça fait un décalage de 1 caractère; J'ai l'impression que l'on compare le 1er indice avec l'avant dernier caractère.

    Rha puis la le meilleur c'est qu'après deux trois tests, le programme compilé, il me retourne un résultat faux.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Citation Envoyé par sk8trasher Voir le message
    oui mais pourquoi -1, puisque l'on soustrait indice de taille, ça fait un décalage de 1 caractère; J'ai l'impression que l'on compare le 1er indice avec l'avant dernier caractère.
    tu n'as pas compris.
    Explications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ch[indice] == ch[taille-indice-1]
    Tu commences à indice =0, donc ça fait ch[0] == ch[taille-0-1].
    Tu compares donc le caractère d'incide 0 (donc le 1er) avec le caractère d'indice taille-1 (donc le dernier).
    Le coup d'après tu commences à indice =1, donc ça fait ch[1] == ch[taille-1-1].
    Tu compares donc le caractère d'incide 1 (donc le 2e) avec le caractère d'indice taille-2 (donc l'avant dernier).
    ....

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Si les résultats sont faux, c'est effectivement à cause du -1, il faut mettre... -2

    fgets conserve le caractère de retour à la ligne, du coup ça décale les comparaisons (la boucle serait tout à fait correcte si la valeur était récupérée avec un scanf, enfin c'est pas pour dire qu'il faut utiliser scanf à la place de fgets, c'est un exemple)

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 496
    Billets dans le blog
    1
    Par défaut
    Remarques judicieuses de Pythéas et mala92


    Dans le cadre de ma formation, j'ai un exercice où l'on me demande d'écrire un programme qui teste si la chaîne saisie au clavier par l'utilisateur est un palindrome. De ce point de vue là, grace à mon ami google, j'ai réussi à adapter des sources à ma convenance, le problème, c'est que je percute pas trop le mécanisme de comparaison de caractère.
    Je me mêle sûrement de ce qui ne me regarde pas, mais c'est une très mauvaise démarche. Si tu avais écrit toi-même le code, tu aurais vraiment réfléchis à pourquoi il faut mettre un -1, tu te serais rendu compte que fgets conserve le caractère '\n'. Le seul moyen de progresser est de faire marcher sa tête.

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Par défaut
    Citation Envoyé par pythéas Voir le message
    Si les résultats sont faux, c'est effectivement à cause du -1, il faut mettre... -2

    fgets conserve le caractère de retour à la ligne, du coup ça décale les comparaisons...

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 90
    Par défaut
    Merci pour vos commentaires. C'est sûr faut que je gamberge plus , et que j’arrête d'écrire mes sources avec des ctrl+c ctrl+v. En tous cas merci ce programme est plus clair maintenant.

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

Discussions similaires

  1. Un code bien écrit a-t-il besoin des commentaires ?
    Par Hinault Romaric dans le forum Débats sur le développement - Le Best Of
    Réponses: 485
    Dernier message: 11/01/2014, 08h17
  2. Un code bien écrit a-t-il besoin des commentaires ?
    Par Hinault Romaric dans le forum Actualités
    Réponses: 334
    Dernier message: 19/07/2013, 14h22
  3. Réponses: 1
    Dernier message: 29/05/2008, 14h16
  4. CMa Projet - besoin de commentaires
    Par cheveche4 dans le forum Vidéo
    Réponses: 1
    Dernier message: 12/06/2007, 11h16
  5. Application Serveur Unix // Besoin de commentaires
    Par sebounty dans le forum Réseau
    Réponses: 1
    Dernier message: 09/05/2007, 11h32

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