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 :

échange de valeur dans une pile


Sujet :

C++

  1. #1
    Membre confirmé Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Par défaut échange de valeur dans une pile
    Bonjour à tous,

    Je vous présente mon problème : il faut que j'écrive une fonction en langage C qui échange la valeur au sommet de la pile avec celle du dessous. Par exemple si j'ai comme valeur 2 et 3, après l'éxécution on aura 3 et 2.

    Voici la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Pile{
         public : 
              int *Ptr;
              int Taille;
              int Sommet;
     
              Pile(void);
              Pile(int Taille);
              ~Pile(void);
              bool Empiler(int data);
              bool Depiler(int *ptr);
    }
    Essayez de m'aider s'il vous plait

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    En langage C ??

    Sinon en C++ on peut s'en sortir aussi (si le sommet est en haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int a, b;
    pile.Depiler(&a);
    pile.Depiler(&b);
    pile.Empiler(a);
    pile.Empiler(b);

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum...

    Alors, déjà, ici, c'est le forum C++... Si tu le souhaite, on peut déplacer le thread vers le forum C ... Mais, si tu parles de classes, c'est sans doute que tu veux programmer en C++

    ensuite, il faut savoir qu'il est impossible de déplacer les éléments d'une pile, parce que... la sémantique du terme pile l'interdit...

    Il faut savoir qu'il existe trois types de structures fort semblables, et qu'il fournissent des comportements particuliers:
    1. La pile est ce que tu obtiens quand tu range les assiettes dans une armoire: il est impossible de récupérer une des assiettes sans avoir au préalable... retiré toutes celles qui ont été placée dans la pile après celle que tu veux sous peine de te les ramasser sur la figure. Le système de fonctionnement est LIFO (Last In First Out: le dernier insérer est d'office le premier à partir)
    2. La file est ce que tu observe dans les magasins pour le passage aux caisses: Le premier arrivé sera le premier à passer à la caisse. Le sytème de foncitonnement est le FIFO (First In, First Out: le premier arrivé est d'office le premier à partir)
    3. La liste, enfin, qui permet de déplacer les éléments, pour les trier, par exemple. L'accès à ses éléments peut soit se faire uniquement du premier au dernier, soit se faire dans les deux sens (permettre d'accéder à l'élément qui suit ou à l'élément qui précède l'élément sur lequel tu te trouve)

    Dans le cas qui t'intéresse, il s'agit donc d'utiliser une liste (simplement ou doublement chaînée, selon tes besoins).

    Mais, dés lors, ce ne seront plus les méthodes "empiler" et "dépiler" qu'il faudra envisager, mais, plutôt "ajouter/insérer" et "retirer"

    Et, sinon, l'algorithme est relativement simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a <-- premier element
    b <-- deuxieme element
    a->suivant <-- b->suivant
    b->suivant <-- a
    debut liste <-- b
    A toi de jouer

    Et, si tu te dis que je pinailles en te parlant de sémantique, dis toi que tu ne risque pas de comprendre que mon chat, qui est en réalité un chien, puisse faire 60 cm au garot et 35 kg
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    je suppose que c'est un TD, non?
    alors, as tu commencé a codé??
    c'est juste une histoire de dépilage et de ré-empilage ton problème.
    Essaie de faire un peu de code et demande quand tu bloque.
    Un dernier indice : une pile temporaire...

    bon codage

  5. #5
    Membre confirmé Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour,
    je suppose que c'est un TD, non?
    alors, as tu commencé a codé??
    c'est juste une histoire de dépilage et de ré-empilage ton problème.
    Essaie de faire un peu de code et demande quand tu bloque.
    Un dernier indice : une pile temporaire...

    bon codage
    Merci de vos réponses et je voulais effectivement parler de C++. Sinon j'ai déjà commencer à coder en créant bien entendue, la déclaration déportée du constructeur de copie de la class étant donné que cela m'était demandé également, ainsi que les fonctions empiler et dépiler comme l'indique la class.

    Encore merci !

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est de l'algo de base, pas du C++.

    Faut faire une deuxième pile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Pile 1   Pile 2
    -----   -----
    a
    b
    c
    d
    Tu dépiles pile 1 et empiles sur pile 2 sauf a et d que tu mémorises.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Pile 1   Pile 2
    -----   -----
              c
              b
    T'empiles a dans pile 1, tu dépiles pile 2 et tu rempiles sur pile 1, et t'empiles d

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Pile 1   Pile 2
    -----   -----
    d
    b
    c
    a

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Si j'étais toi, mais bon, je te déconseille quand même de faire le coup au prof, je lui remettrais juste la définition de la classe, en lui disant que son problème est impossible à résoudre, du fait des incohérences sémantiques que je t'ai indiquées... (et en lui parlant de ... mon chat de 35 kg)

    Puis, je lui fournirais une classe liste qui lui présenterait la solution demandée

    Mais bon, ce genre de réaction ne doit être entreprise qu'avec les profs dont on est ( à peu près ) certains qu'ils réagiront favorablement, et donc, je le répète, ce n'est sans doute pas la meilleure idée à avoir
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    une fonction qui échange la valeur au sommet de la pile avec celle du dessous. Par exemple si j'ai comme valeur 2 et 3, après l'éxécution on aura 3 et 2.
    Ah zut, j'avais pas compris comme tout le monde...
    "Celle du dessous" est celle qui est sous le sommet ou sous toute la pile?

    J'ai jamais eu de TD d'info donc je sais pas ce qu'on demande dans ces cas-là!

    Si c'est échanger le sommet avec la valeur juste au-dessous, pas besoin de deux piles, pas besoin de liste, et pas besoin de se fâcher avec le prof

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Et pourtant, je l'ai fait

    En plus j'ai commencé par "Eh, apprend à donner cours..."

    Et cela ne m'a pas fâché avec le prof

    Cela a eu pour effet que tous les élèves m'ont regarder avec les yeux ronds...

    Et, pour être tout à fait honnête, le prof savait que je ne le raterais pas au tournant (il était venu me voir, après m'avoir taquiné pendant un cours, en me disant que s'il passait les limites acceptables, je devais le lui signaler... et je lui avais répondu que tout serait mis à son crédit, et que, si j'avais la possibilité de lui rendre la pareille, je ne m'en priverais pas ) et la notion de "discipline" dans les cours du soir est bien plus... souple que celle appliquée dans les cours de plein exercice
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    Tu as eu bien raison, et une réaction de sage pour un jeune étudiant que tu étais à l'époque (si ça c'est passé à une époque où tu étais jeune étudiant ).

  11. #11
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Biozic Voir le message
    Tu as eu bien raison, et une réaction de sage pour un jeune étudiant que tu étais à l'époque (si ça c'est passé à une époque où tu étais jeune étudiant ).
    heu... je ne suis pas sur que, de tête, l'année 2005 puisse être considérée comme "à l'époque" ni même qu'à l'époque le vocable "jeune étudiant" soit le mieux adapté à mon age... canonique
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    lol Koala !
    Par contre, je crois deviner que le prof ici voulait juste que les étudiants comprennent bien ce qu'est une pile et pense à tout dépiler dans une pile temporaire pour changer la première valeur... C'est effectivement un peu bizarre pour une pile, mais ce n'est qu'un exercice, auquel Loufoque a très bien répondu.

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par poukill Voir le message
    lol Koala !
    Par contre, je crois deviner que le prof ici voulait juste que les étudiants comprennent bien ce qu'est une pile et pense à tout dépiler dans une pile temporaire pour changer la première valeur... C'est effectivement un peu bizarre pour une pile, mais ce n'est qu'un exercice, auquel Loufoque a très bien répondu.
    +1
    [edit]
    mais un peu trop vite. peut etre....
    cela ne laisse pas le temps à yohan0262 d'y réfléchire...

  14. #14
    Membre confirmé Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Par défaut
    Je vois que beaucoup de réponses ont été apportées c'est vraiment simpa ! En effet notre prof nous avais donner ça a faire en TP, un premier exercice pour voir si nous avions bien compris ce qu'était une pile.
    Sinon j'ai codé ma fonction en me référant aux tutoriels et en utilisant les pointeurs:

    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
     
     
    bool Pile :: Swap(void){
     
    bool flag;
    flag = false;
    int *ptr;
     
    if(Sommet != -1){
         *ptr3 = *(Ptr + Sommet-1);
         *(Ptr + Sommet-1) = *(Ptr+Sommet);
         *(Ptr + Sommet) = *ptr3;
         flag = true;
    }
    return flag;
    }
    Merci à tous pour vos réponses !

  15. #15
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    c'est pour swapper le haut du bas??
    ben si t'as accés à tous tes éléments c'est plus simple que de dépiler et ré empiler.
    Par contre juste une remarque, ton code n'est pas trés lisible, tu utilise des pointeur bizzare comm ptr3, ou alors tu as Ptr et ptr...

    Un autre conseil, tu devrait utiliser un vector pour implémenter ta pile.
    Ton swap deviendrai :
    avec myBuffer un vector représentant le contenaire des éléments de ta pile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bool Pile :: Swap(void)
    {
    if(Sommet != -1) return false;
    std::iter_swap(myBuffer.begin(),myBuffer.end()-1);//utilise la meilleur méthode pour swapper.
    return flag;
    }

  16. #16
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par yohan0262 Voir le message
    Je vois que beaucoup de réponses ont été apportées c'est vraiment simpa ! En effet notre prof nous avais donner ça a faire en TP, un premier exercice pour voir si nous avions bien compris ce qu'était une pile.
    Sinon j'ai codé ma fonction en me référant aux tutoriels et en utilisant les pointeurs:
    <sniped code>
    Merci à tous pour vos réponses !
    Si je comprend bien, c'est moi qui avais raison: il fallait lui demander s'il avait bu
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Test d'existence d'une valeur dans une table
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 29/12/2004, 10h38
  2. [ Struts ] recuperer une valeur dans une url?
    Par njac dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2004, 14h24
  3. [C#] Recuperation de valeur dans une autre page
    Par kenzo080 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 02/06/2004, 10h32
  4. Réponses: 3
    Dernier message: 28/01/2004, 14h55
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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