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 d aide


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut Besoin d aide
    J aurai besoin qu une ame charitable m aide afin de mener a bien ce projet.
    Je dois livrer les fichiers qui sont indiqués...
    Un bout de code serait le bienvenu
    Merci d avance

    Le thème général consiste à créer une classe "IntStack" pour gérer une structure classique :
    la pile (LIFO), contenant ici des entiers. Les fonctions demandées pour cette classe sont celles de la
    classe stack de la STL. Il s'agit ici d'un sujet d'école :
    pas utiliser les fonctions de la classe stack standard.
    II. La déclaration de la classe IntStack
    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
    class IntStack {
    private :
    vector<int> m_pile;
    int m_index;
    public:
    // Constructeurs
    //===============
    // Constructeur sans arguments : pile vide
    IntStack ();
    // Constructeur de recopie
    IntStack ( const IntStack &);
    // Surcharge d'opérateurs
    //=======================
    // Opérateur d'affectation =
    IntStack & operator = ( const IntStack & );
    // Autres fonctions
    //=================
    // Hauteur (taille) de la pile (nbre d'élements)
    int size() const;
    // True si longueur = 0
    bool empty () const;
    // Renvoie l'élément au sommet de la pile (sans le dépiler)
    int top() const;
    // Dépile l'élément au sommet de la pile (sans en renvoyer la valeur)
    void pop();
    // Empile un élément au sommet de la pile
    void push ( int );
    };
    Les deux membres « données » de cette classe sont :
    o Le tableau dynamique m_pile, qui utilise la classe standard "vector".
    La classe "vector" facilite grandement la programmation : vous n'avez en effet pas besoin de
    gérer les allocations mémoire, car la classe "vector" le fait automatiquement et, de plus, elle
    possède des fonctions prédéfinies qui permettent d'implémenter facilement les fonctions
    demandées (cf. remarques en bas de la page 2).
    o La taille de la pile, de type entier, m_index. Cette valeur correspond à l’indice du tableau qui
    pointe au-dessus du dernier élément de la pile : quand la pile est vide, m_index vaut 0, si elle
    contient 2 éléments, m_index vaut 2. m_index doit être décrémenté par pop() et incrémenté
    par push().
    III. Les fonctions membres de la classe IntStack
    Les constructeurs
    · Le constructeur sans arguments : il construit une pile "vide", de taille 0. Aucune initialisation n’est
    nécessaire pour la variable membre m_pile.
    · Le constructeur de recopie : il construit une pile en recopiant une pile déjà existante. N.B. : il n’y a
    ici aucune allocation mémoire à faire.
    La rédéfinition d’opérateurs
    Le seul opérateur demandé est l'opérateur d'affectation (operator =). Il réalise l’affectation d’une pile à
    partir d’une autre pile.
    Les autres fonctions
    Les autres fonctions demandées : size(), empty(), top(), pop(), push(), sont des fonctions classiques
    des piles, le commentaire dans la déclaration présentée plus haut précisant ce qu’elles font.
    IV. Le main()
    Le main() sera dans un fichier à part. Il devra tester :
    - La déclaration d’une pile vide,
    - la construction d’une pile à partir d’une pile existante,
    - l'empilement de quelques valeurs dans une pile,
    - la lecture de la valeur du haut de la pile ( avec top() ), puis son dépilement ( avec pop() ), dans
    une boucle qui dépile toutes les valeurs successivement.
    - l'affectation d'une pile à une autre pile.
    Les anomalies (ex : vouloir dépiler une pile vide) seront gérées à l’aide du mécanisme throw-try-catch.
    V. Fichiers à livrer :
    - IntStack.h
    - IntStack.cpp ( pas obligatoire si vous définissez toutes les fonctions « inline »).
    - main.cpp
    - makefile

    Remarques importantes :
    Rappelons que de la classe standard "vector" réalise un tableau dynamique d’éléments de type
    indiqué. Ex : vector<int> tab; déclare tab en tant que tableau d’entiers.
    Voici quelques fonctions de la classe "vector" particulièrement utiles :
    · size() : cette fonction, que vous avez déjà vue dans le TP4, renvoie la taille (=nombre d’éléments)
    du tableau.
    · push_back(valeur) : cette fonction, que vous avez aussi déjà vue dans le TP4, permet d’ajouter
    valeur à la fin du tableau.
    · pop_back() : cette fonction permet de supprimer le dernier élément du tableau.
    · back() : cette fonction renvoie le dernier élément du tableau (sans le supprimer).


    balise [code] rajoutée par r0d. Merci d'y penser la prochaine fois.
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  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
    Ben, c'est tout simple, c'est pratiquement juste un mapping de chaque fonction sur une fonction de std::vector...

    Quelques remarques:
    1. On est sur www.developpez.com et non pas www.onfaitvosdevoirs.com. Ici, tu postes ton codes et on t'aide à corriger tes erreurs. Mais on ne pondra pas du code pour toi, surtout un truc aussi simple.
    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
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut ok
    ok merci
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  4. #4
    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
    Tiens, je suis gentil:
    Constructeur : tout simple
    copie : copie
    affectation: affectation
    size() : size()
    top() : back()
    push() : push_back()
    pop() : pop_back()
    En fait, je ne vois même pas l'intéret pédagogique de ce genre d'exercice.
    Ouéééé, on apprend à faire un wrapper... Et on ne nous dit même pas comment ça s'appelle...
    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.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut merci
    j t avoue ke je ne vois pas le but non plus
    on nous explique pas grand chose et on nous demande de faire ça!!
    mais merci beaucoup en tout cas
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  6. #6
    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
    Au fait, j'oubliais:
    "besoin d'aide" est un trèèèès mauvais titre. Sois plus précis à l'avenir. Et n'oublie pas de cliquer sur
    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.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut qu en pensez vous?
    j ai fait une partie du point cpp mais
    je ne vois pas du tout comment faire le top, pop et push

    voila le code deja tapé...s il y a quelques fautes...hesitez pas




    #include "IntStack.h"
    #include <stdexcpet>



    //Constructeurs
    //=============
    //Constructeur à partir d une pile
    IntStack::IntStack()
    {
    m_index=0;
    }


    //Constructeur de recopie
    IntStack::IntStack (const IntStack & str)
    {
    m_pile=NULL;
    strcpy (m_pile,str.m_pile);
    }

    //Surcharge d operateurs
    //=======================
    //Opérateur d affectation
    IntStack & IntStack::operator = (const IntStack & str)
    {
    if (this == &str) return *this;

    strcpy (m_pile, str.m_pile);
    return *this;
    }

    // Autres fonctions
    //=================
    // Hauteur (taille) de la pile (nbre d'élements)
    int IntStack::size() const
    {
    return m_pile;
    }

    // True si longueur = 0
    bool IntStack::empty () const
    {
    if (m_index==0)
    {
    return true;
    }
    else
    {
    return false;
    }
    }

    // Renvoie l'élément au sommet de la pile (sans le dépiler)
    int IntStack::top() const;
    {
    back(
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    au fait pourquoi utiliser un vector, et non pas un deque ??

    std::stack est bâtie sur un deque par défaut, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<class T,
        class Cont = deque<T> >
    @+

  9. #9
    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

    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
    #include "IntStack.h"
     
     
    //Constructeurs
    //=============
    //Constructeur à partir d une pile
    IntStack::IntStack(void)
     : m_index(0)
    {
    }
     
     
    //Constructeur de recopie
    IntStack::IntStack(const IntStack & src) : m_pile(src.m_pile), m_index(src.m_index)
    {
    }
     
    //Surcharge d operateurs
    //=======================
    //Opérateur d affectation
    IntStack & IntStack::operator = (const IntStack & src)
    {
    if (this == &src) return *this;
     
    m_pile = src.m_pile;
    m_index = src.m_index;
     
    return *this;
    }
     
    // Autres fonctions
    //=================
    // Hauteur (taille) de la pile (nbre d'élements)
    int IntStack::size(void) const
    {
    return m_index;
    }
     
    // True si longueur = 0
    bool IntStack::empty(void) const
    {
    return (m_index==0);
    }
     
    // Renvoie l'élément au sommet de la pile (sans le dépiler)
    int IntStack::top(void) const;
    {
    return m_pile.back();
    }
     
    void IntStack::push(int i)
    {
    m_pile.push_back(i);
    ++m_index;
    }
     
    void IntStack::pop(void)
    {
    if(m_index==0)
    	{
    	// traiter l'erreur en lançant une exception
    	}
    m_pile.pop_back();
    --m_index;
    }
    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.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut
    Un Grand Merci
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ici, grâce au vecteur sous-jacent, aucun intérêt de spécifier les 2 opérations de copie. Surtout pour avoir un opérateur d'affectaton qui repose sur un contre idiome, qui plus est utilisé là où il n'apporte rien.

    m_index est redondant avec m_pile.size(), non ?

    strcpy() n'a aucun rapport avec ce que tu cherches à faire. Cette fonction de la libc sert à copier des chaines 0-terminées. Or tu manipules des int qui sont dans vecteur... pas des chaines.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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