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 :

Trouvez-vous des erreurs


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 32
    Points
    32
    Par défaut Trouvez-vous des erreurs
    J'ai des erreurs de compilation, huit erreurs sur ce bout de code, je crois
    avec microsoft visual edition 2008 C++, vous auriez une idée d'ou trouver cela?



    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
    bool Tour_Depart_Valide(const Hanoi& jeu,
                            int tour_depart)
    {
      if ( (tour_depart < 0) or  (tour_depart > 2) )
      {
        return false;
      }
      return jeu.tours[tour_depart].nb_disques > 0;
    }
    bool Tour_Arrivee_Valide(const Hanoi& jeu,
                             int tour_depart,
                             int tour_arrivee)
    {
      if ( (tour_arrivee < 0) or
           (tour_arrivee > 2) )
      {
        return false;
      }

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 536
    Points : 6 727
    Points
    6 727
    Par défaut
    Bonjour,

    si vous ne comprenez pas les erreurs produites pas le compilateur le mieux aurait été de les donner pour qu'on les explique.

    sur ce que vous fournissez pas d'erreur de syntaxe à priori, mais on ne sait pas ce qu'est Hanoi, donc pas possible de valider le code qui l'utilise

    par contre il est vraiment bizarre que les deux fonctions ne soient pas symétrique car Tour_Arrivee_Valide connait la tour de départ, pourquoi ?

    autre remarque : pourquoi avoir deux fonctions de validation alors que les vérification à faire sont exactement les même dans les deux cas (entre 0 et 2 et pas vide) ?

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Comme dit Bruno, difficile de trouver des erreurs sur si peu de code et encore plus ardu sans les messages du compilateur.

    Une remarque : l'utilisation de or (and, xor, etc.) à la place des opérateurs || (&&, ^, etc.) est assez rare mais conforme à la norme C++. Visual produit une erreur de compilation sur l'utilisation de ces mot-clés alternatifs si les extensions de langages ne sont pas désactivées. Pour supprimer cette erreur, il faut modifier l'option de compilation 'Désactivation des extensions de langage' (C/C++, Langage) de Non à Oui.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 32
    Points
    32
    Par défaut autre problème
    Pour répondre aux questions qui m'on été posées
    Hanoi est une structure jeu
    J'ai coupé la fin du code de BOOL TOUR D ARRIVEE VALIDE
    Les fonctions sont pas les memes car c'est un jeu des tours de hanoi
    Les deux fonctions connaissent les tours de départ et d'arrivée on les demande au joueur, dans la tour de départ il faut s'assurer que ce sont bien les tours 0, ou 1 ou 2, et qu'il y a des disques sur cette tour, dans tour d'arrivée, il doit s'assurer que les tours d'arrivée sont bien 0, 1 ou 2 plus d'autres choses qui ne sont pas montrées ici car j'ai coupé le code à cet endroit

    oui, j'ai remplacé les or par des || et || et mes huit erreurs de compilation sont parties mais une autre survient, la compilation c'est alors ok, c'est un truc par rapport à vector qui deviendrait dépassé.
    Voilà ma copie d'écran du bug
    Nom : bug.jpg
Affichages : 88
Taille : 37,7 Ko
    parce que j'utilise des structure à la place de classes qui ont un comportement objet puisqu'un constructeur.

    voilà

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 536
    Points : 6 727
    Points
    6 727
    Par défaut
    vous n'avez toujours pas compris nos remarques, comment voulez-vous qu'on vous aide à partir de rien ?

    si je vous demande pourquoi mon programme affiche 12 au lieu de 45, qu'est-ce que vous répondez ?

    donc la réponse à la question pourquoi un code que je ne donne pas sort en erreur ne peut qu'être ... on n'a pas de boule de cristal

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    On va essayer de jouer à la devinette

    Donc, le code maintenant il compile si j'ai bien compris. Mais à l'exécution il plante. Et d'après le message à l'écran il plante à la ligne 779 de <vector>, dans la fonction membre operator[] (merci le mode debug )
    Si ça plante dans le bout de code posté au début, c'est exactement ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return jeu.tours[tour_depart].nb_disques > 0;
    Cela veut dire que la valeur de tour_depart est trop grande.

    Si ça plante en dehors de ce bout de code alors...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Points : 32
    Points
    32
    Par défaut suite
    bonjour

    voici l'intégralité de 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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    #include <iostream>
    #include <vector>
    #include <string>
    struct Tour
    {
      int nb_disques;
      std::vector<int> disques;
      Tour(int taille_max):
        nb_disques(0),
        disques(0, taille_max)
      {
      }
    };
    struct Hanoi
    {
      int hauteur;
      std::vector<Tour> tours;
      Hanoi(int hauteur_max):
        hauteur(hauteur_max),
        tours(3, Tour(hauteur_max))
      {
        for(int etage = 0; 
            etage < hauteur_max; 
            ++etage)
        {
          this->tours[0].disques[etage] = 
              hauteur_max - etage;
        }
        this->tours[0].nb_disques = hauteur_max;
      }
    };
    std::string Chaine_Etage(int taille,
                             int largeur)
    {
      std::string 
        espace(largeur-taille, ' ');
      std::string chaine;
      if ( taille > 0 )
      {
        std::string disque(taille, '=');
        chaine = espace + "<" + 
            disque + "!" + 
            disque + ">" + espace;
      }
      else
      {
        chaine = espace + " ! " + espace;
      }
      return chaine;
    }
    void Afficher_Jeu(const Hanoi& jeu)
    {
      for(int etage = jeu.hauteur-1;
          etage >= 0;
          --etage)
      {
        for(int colonne = 0;
            colonne < 3;
            ++colonne)
        {
          int taille =
            jeu.tours[colonne].disques[etage];
          std::cout << " "
            << Chaine_Etage(taille,
                           jeu.hauteur)
            << " ";
        }
        std::cout << std::endl;
      }
    }
    bool Est_Fini(const Hanoi& jeu)
    {
      return jeu.tours[2].nb_disques == jeu.hauteur;
    }
    bool Tour_Depart_Valide(const Hanoi& jeu,
                            int tour_depart)
    {
      if ( (tour_depart < 0) ||  (tour_depart > 2) )
      {
        return false;
      }
      return jeu.tours[tour_depart].nb_disques > 0;
    }
    bool Tour_Arrivee_Valide(const Hanoi& jeu,
                             int tour_depart,
                             int tour_arrivee)
    {
      if ( (tour_arrivee < 0) ||
           (tour_arrivee > 2) )
      {
        return false;
      }
      int nb_disques_arrivee =
        jeu.tours[tour_arrivee].nb_disques;
      if ( nb_disques_arrivee == 0 )
        return true;
      int disque_arrivee = 
        jeu.tours[tour_arrivee].
          disques[nb_disques_arrivee-1];
      int nb_disques_depart = 
        jeu.tours[tour_depart].nb_disques;
      int disque_depart = 
        jeu.tours[tour_depart].
          disques[nb_disques_depart-1];
      return disque_arrivee > disque_depart;
    }
    int Demander_Tour_Depart(const Hanoi& jeu)
    {
      int tour_depart;
      std::cout << "Tour de départ ? ";
      std::cin >> tour_depart;
      return tour_depart - 1;
    }
    int Demander_Tour_Arrivee(const Hanoi& jeu)
    {
      int tour_arrivee;
      std::cout << "Tour d'arrivée ? ";
      std::cin >> tour_arrivee;
      return tour_arrivee - 1;
    }
    void Deplacer_Disque(Hanoi& jeu,
                         int depart,
                         int arrivee)
    {
        int nb_disques_depart = 
          jeu.tours[depart].nb_disques;
        int nb_disques_arrivee =
          jeu.tours[arrivee].nb_disques;
        int disque_depart = 
          jeu.tours[depart].
            disques[nb_disques_depart-1];
        jeu.tours[arrivee].
          disques[nb_disques_arrivee] = disque_depart;
        jeu.tours[depart].
            disques[nb_disques_depart-1] = 0;
        jeu.tours[depart].nb_disques -= 1;
        jeu.tours[arrivee].nb_disques += 1;
    }
    int main(int argc, char* argv[])
    {
      int hauteur_max;
      std::cout << "Nombre de disques ? ";
      std::cin >> hauteur_max;
      Hanoi le_jeu(hauteur_max);
      int nb_mouvements = 0;
      while ( ! Est_Fini(le_jeu) )
      {
        Afficher_Jeu(le_jeu);
        int tour_depart =
          Demander_Tour_Depart(le_jeu);
        if ( Tour_Depart_Valide(le_jeu, 
                                tour_depart) )
        {
          int tour_arrivee =
            Demander_Tour_Arrivee(le_jeu);
          if ( Tour_Arrivee_Valide(le_jeu, 
                                   tour_depart,
                                   tour_arrivee) )
          {
            Deplacer_Disque(le_jeu, 
                            tour_depart,
                            tour_arrivee);
            ++nb_mouvements;
          }
          else
          {
            std::cout << "Arrivée invalide !\n";
          }
        }
        else
        {
          std::cout << "Départ invalide !\n";
        }
      }
      Afficher_Jeu(le_jeu);
      std::cout << "Résolu en "
          << nb_mouvements
          << " mouvements.\n";
      return 0;
    }
    c'est un peu objet avec des structures et pas des classes, les ligne 774, c'est dans un fichier qui n'appartient pas au code qui est de je ne sais ou mais je travaille sur visual C++ express 2008
    Voilà si vous pouviez trouver pourquoi ce code plante à l'exécution.

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 536
    Points : 6 727
    Points
    6 727
    Par défaut
    Bonjour,

    dans le constructeur de Tour il faut remplacer disques(0, taille_max) par disques(taille_max, 0), sinon la tour est de hauteur 0

  9. #9
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 536
    Points : 6 727
    Points
    6 727
    Par défaut
    jbs106 : une structure est une classe ou les membres sont public par défaut

    zezee : maintenant que le plantage est résolu, seriez-vous intéressé par nos commentaires sur le code ?

    [edit]tient, la question de jbs106 à disparue ...[/edit]

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

Discussions similaires

  1. Réponses: 61
    Dernier message: 12/04/2011, 11h24
  2. Que pensez-vous des générateurs de doc PHP ?
    Par Nonothehobbit dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 64
    Dernier message: 10/07/2007, 11h17
  3. [IMPORTANT] Aidez vous des [Tag's]
    Par NoisetteProd dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/02/2005, 16h23
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 18h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 23h41

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