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 :

Test d'un Palindrome


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 34
    Points : 20
    Points
    20
    Par défaut Test d'un Palindrome
    Bonsoir à tous et merci de venir m'aider.

    J'ai un exercice en langage c++ que je dois réaliser dont voici la consigne : Ecrire la méthode bool Palindrome( ) qui renvoie vrai si le mot est un palindrome, ou faux s'il ne l'est pas.

    Il faut savoir que cette exercice fait partie d'une série d'exos dans un seul programme et que le mot en question qu'il faut tester est dans un tableau de caractères appelé tableau_modif.
    J'avais tenté un code mais le prof m'a dit qu'il fallait utiliser le fameux "bool" mais il ne nous a pas expliquer ce que cela signifiait.

    Pouvez vous me donner quelques pistes pour effectuer ce programme ? J'avais déjà une idée avec 2 pointeurs : 1 au début du mot et le 2e à la fin et je faisais un test d'égalité entre ses 2 lettres. Voici le fameux 1er test que j'avais fait.

    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
    int compteur, test;
        char palindrome[20];
        char*ptc;
        char*ptc2;
        compteur = 0;
        palindrome[20] = tabCarModif[compteur];
        ptc = strstr (tabCarModif, palindrome);
        ptc2 = strstr (tabCar, palindrome) + strlen (palindrome);
            if (ptc==ptc2)
            {
                ptc++;
                --ptc2;
                test=1;
            }
            else
            {
                test=0;
            }
        cout << test;
        if (test==1)
        {
            cout << "C'est un palindrome"<<endl;
        }
        else
        {
            cout << "Ce n'est pas un palindrome"<<endl;
        }
    Merci à tous pour votre aide et bonne soirée.

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Est-ce un exercice en langage C ou en C++? Car ton code est essentiellement du C.
    La fonction strstr() est à oublier en C, et plus encore en C++. Les seuls utilisateurs de tableaux de char en C++ sont les profs gâteux. Les pointeurs sont à éviter.

    Ton code:
    ligne 6 : palindrome[20] = tabCarModif[compteur]; n'a aucun sens car palindrome est composé de 20 caractères et ici tu écris dans le 21ième!
    ligne 7 et 8 : utilisation de strstr() qui n'a pas plus de sens. Difficile de voir ce que tu cherches à faire.
    Le if/else qui suit aurait une utilité si on comparait les valeurs pointées plutôt que les pointeurs et s'il était dans une boucle.
    ...

    Le type bool permet de stocker des booléens. Un booléen a 2 valeurs possibles : true ou false. La variable test que tu utilises pourrait être un bool plutôt qu'un int.

    Pour reprendre ton idée de rester en C et de comparer 2 pointeurs partant des extrémités pour se rejoindre au milieu du mot, on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // on pose que palindrome à été rempli avec le mot à tester
    const char *pteurDebut = palindrome;
    const char *pteurFin = palindrome + strlen( palindrome ) - 1;
    while ( pteurDebut < pteurFin ) // tant qu'on est pas au milieu
    {
       if ( *pteurDebut != *pteurFin ) // comparer les caractères pointés
          break;    // au moins 2 lettres symétriques non égales
       pteurDebut++;
       pteurFin--;
    }
    // si on atteint le milieu c'est un palindrome
    bool estPalindrome = pteurDebut >= pteurFin; // vaut true si le debut à atteint la fin

  3. #3
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Un palindrome est un forme syntaxique qui se lit dans les 2 sens, on est bien d accord?
    Tu as 2 facons de faire radicalement différentes de résoudre cette exercice (bourrin mais un poil tatillone, feignante mais un poil malin car tu ne fais pas la comparaison )

    Version bourrin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    bool recherchePalindromeBourrin(string const &phrase)
    {
       Tant que i < taille de phrase / 2
          Faire la comparaison du i-eme et du (i-taille-1)-eme element
          Si c est bon
             on continue
          Sinon
             on renvoie FAUX
          Fin si
       Fin tant que
    }
    Version smoothie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool recherchePalindromeMalin(string const &phrase)
    {
       string phraseInversee = "";
       for (int i = phrase.size()-1; i >= 0; i--)
       {
          phraseInversee += phrase[i];
       }
     
       if (phrase == phraseInversee)
          return ???;
       else
          return ???; // Je te laisse compléter mais tu as pigé :P
    }

  4. #4
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Merci dalfab pour ta réponse

    C'est ce que l'on me demande souvent, mais c'est bien du codage C++ que je dois faire mais je peux utiliser des termes C pour ces exercices.
    Malheureusement, cela signifie que mon prof est un prof gateux mdrr :p.

    Merci pour toutes les corrections que tu m'as donné et c'est vrai qu'en me relisant, c'est assez incohérent ce que j'ai écrit.

    Et encore merci pour le code mais je ne comprends pas la derniere ligne que tu as écrite : bool estPalindrome = pteurDebut >= pteurFin; // vaut true si le debut à atteint la fin

    Bonne journée

  5. #5
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ping599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool estPalindrome = pteurDebut >= pteurFin; // vaut true si le debut à atteint la fin
    Cela te permet de vérifier que les 2 pointeurs se sont rencontrés apres avoir vérifier que les lettres sont identiqes 2 a 2.
    C est équivalent a faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool estPalindrome;
    if (pteurDebut >= pteurFin)
       estPalindrome = true;
    else
       estPalindrome = false;

  6. #6
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Ah ok.

    J'ai tenté d'entrer le code suivant :
    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
        char palindrome=tabCarModif;
        const char *pteurDebut = palindrome;
        const char *pteurFin = palindrome + strlen( palindrome ) - 1;
        while ( pteurDebut < pteurFin ) // tant qu'on est pas au milieu
        {
           if ( *pteurDebut != *pteurFin ) // comparer les caractères pointés
              break;    // au moins 2 lettres symétriques non égales
           pteurDebut++;
           pteurFin--;
        }
        // si on atteint le milieu c'est un palindrome
        if (pteurDebut >= pteurFin)
           testPalindrome = true;
        else
           testPalindrome = false;
    Je dois initialiser palindrome et palindrome est un mot qui est dans un tableau de caracteres appelé tableau_modif mais lorsque je rajoute palindrome = tableau_modif j'ai une erreur. D'ailleurs, j'ai 6 erreurs qui apparaissent : Nom : test.jpg
Affichages : 1695
Taille : 37,7 Ko

    Pouvez vous m'aider ?

  7. #7
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ping599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        char palindrome=tabCarModif;
        const char *pteurDebut = palindrome;
        const char *pteurFin = palindrome + strlen( palindrome ) - 1;
    Je dois initialiser palindrome et palindrome est un mot qui est dans un tableau de caracteres appelé tableau_modif mais lorsque je rajoute palindrome = tableau_modif j'ai une erreur. D'ailleurs, j'ai 6 erreurs qui apparaissent : Nom : test.jpg
Affichages : 1695
Taille : 37,7 Ko
    Les erreurs te disent ("Tu as bu ou quoi?? Regarde par la!"):

    1 - "Tu essayes de me mettre tabCarModif de type tableau de char (ou char*) dans une variable palindrome de type char" => char* palindrome = tabCarModif ?
    2 - "Tu essayes de me mettre palindrome de type char (défini au dessus) dans une variable pteurDebut de type pointeur sur un char constant" => const char* palindrome = tabCarModif ?
    etc etc...

    Un conseil tiré des enseignements de M.Piéplu: "Pourquoi faire simple quand on peut faire compliqué?"
    => Comprends tu le code fourni par Dalfab? Si tu as des réserves, utilises une syntaxe facile a comprendre et pour toi et pour ton apprentissage

  8. #8
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par ping599 Voir le message
    Et encore merci pour le code mais je ne comprends pas la derniere ligne que tu as écrite : bool estPalindrome = pteurDebut >= pteurFin; // vaut true si le debut à atteint la fin
    Comprends tu mieux en utilisant cette forme ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool estPalindrome;
    if ( pteurDebut >= pteurFin )
       estPalindrome = true;
    else
       estPalindrome = false;

  9. #9
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Oui je comprends son programme et j'ai modifié en écrivant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        const char *pteurDebut = tabCarModif;
        const char *pteurFin = tabCarModif + strlen( tabCarModif ) - 1;
        while ( pteurDebut < pteurFin ) // tant qu'on est pas au milieu
        {
           if ( *pteurDebut != *pteurFin ) // comparer les caractères pointés
              break;    // au moins 2 lettres symétriques non égales
           pteurDebut++;
           pteurFin--;
        }
        // si on atteint le milieu c'est un palindrome
        bool testPalindrome = pteurDebut >= pteurFin;
    Maintenant, lorsque je lance mon programme, et que je fais le test, je n'ai rien comme résultat (je rajoute un system("pause").
    C'est le "bool testPalindrome = pteurDebut >= pteurFin;" qui ne rend aucune valeur ?

  10. #10
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Citation Envoyé par ping599 Voir le message
    C'est le "bool testPalindrome = pteurDebut >= pteurFin;" qui ne rend aucune valeur ?
    testPalindrome est une variable booléenne. Relis soigneusement ton cours et essaie d'ajouter return testPalindrome;.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Le soucis, c'est que je n'ai pas le cours sur les variables bool vu que l'on ne la pas travailler, c'est n'importe quoi mais voila :p.

  12. #12
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par ping599 Voir le message
    Le soucis, c'est que je n'ai pas le cours sur les variables bool vu que l'on ne la pas travailler, c'est n'importe quoi mais voila :p.
    La réponse est juste au-dessus dans un poste de Dalfab si je ne me trompe pas et la notion est tres simple a saisir.
    Un bool est un type rajouté en C++ pour désigner 2 états uniquement pour une assertion donnée: vrai ou faux

    Admettons un exemple trivial:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bool estGentilAvecLesDebutants = true; // Je pense quand meme un peu
    if (estGentilAvecLesDebutants && jeMeRepeteTropSouvent)
    {
       estGentilAvecLesDebutants = false;
    }
     
    bool jeComprendsRienAuBooleen = "12"; // Le compilo va t engueuler!
    Donc tous les tests que tu peux faire renvoient un type booléen en C++.
    Par exemple, la comparaison de 2 chaines de caracteres (s1 == s2) renvoie true ou false.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    C'est bon, j'ai compris et ça fonctionne nickel !!

    Merci à vous pour votre aide

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

Discussions similaires

  1. Test Palindrome tableau de char
    Par stansoad0108 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 02/10/2008, 09h13
  2. [Debutant] Programme de test de palindrome
    Par lala_ dans le forum Assembleur
    Réponses: 5
    Dernier message: 13/02/2005, 15h48
  3. Script test de deux chaine avec if
    Par kacedda dans le forum Linux
    Réponses: 6
    Dernier message: 02/05/2003, 15h38
  4. [XMLRAD] test de nullité
    Par Pm dans le forum XMLRAD
    Réponses: 5
    Dernier message: 29/11/2002, 10h57
  5. test collisions
    Par tatakinawa dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/06/2002, 06h03

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