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 :

Vecteur ou compteur?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Paulinho
    Invité(e)
    Par défaut Vecteur ou compteur?
    J'ai fait 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
    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
     
    #include <iostream>
    #include <cmath>
     
    using namespace std;
     
    class Pair {
     
    private: 
        double left;
        double right;
     
    public:
        Pair() {left = 0; right = 0;}
        Pair(double l, double r) {left = l; right = r;}
     
        void set_left(double n) {left = n;}
        void set_right(double n) {right = n;}
        double get_left() const {return left;}
        double get_right() const {return right;}
        virtual void print() const {
        	cout << "(" << get_left() << "," << get_right() << ")" << endl;}
    };
     
    class Point: public Pair {
     
    public:
        Point():Pair() {};
        Point(double x, double y):Pair(x,y) {};
     
        void set_abc(int x) {set_left(x);}
        void set_ord(int y) {set_right(y);}
        double get_abc() {return get_left();}
        double get_ord() {return get_right();}
        virtual void print() const {
        	cout << "(" << get_left() << "," << get_right() << ")" << endl;}
    };
     
    template <class C, int I>
     
    class Pille
    {
    private:
        typedef struct pille_node
      { 
      	C  elem;
        struct pille_node * next;
      } Pille_node, * Pille_node_ptr;
     
      Pille_node_ptr pille;
     
     
    public:
        Pille() {pille = NULL;}
        int count;  
     
        virtual C pop(){
         if (pille == NULL) {cout << " Pille vide " << endl;}
         else {Pille_node_ptr aux = pille;
         pille = pille -> next;
         delete aux;  	
         }
        }; 
     
        void push(C i) 
        { 
          Pille_node_ptr aux = new Pille_node;
          aux -> elem = i;
          aux -> next = pille;
          pille = aux;
          }
     
        virtual void printpille() const
         {
         	Pille_node_ptr aux = pille;
         	while (aux != NULL)
                {aux -> elem.print();
                 aux = aux -> next;}
         }
    };
     
    int main()
    { 
      int j = 1;
      int k = 1;
      int l = 1;
      int a, b;
      int x, y;
      int count = 1;
      Pille<Pair, 10> pp;
      while (j != 0) {
      	cout << " Voulez-vous insérer ou éliminer un object da pille? " << endl;
      	cout << " 1. Insérer " << endl;
      	cout << " 2. Éliminer " << endl;
      	cout << " 0. Sortie " << endl;
      	cin >> j;
      	if (j == 1) {
      		cout << " Chosis l'object que vous voulez insérer: " <<endl;	                cout << " 1. Object de la class Pair " << endl;
      		cout << " 2. Object de la class Point " << endl;
      		cout << " 0. Sortie" << endl;
      		cin >> k;
      		switch(k) {
      		case 1: {cout << " Introduit l'élément gauche: ";
      		         cin >> a;
      		         cout << " Introduit ´l'élément droite: ";
      		         cin >> b;
      		         Pair p(a,b);
      		         pp.push(p);
      		         count = count++;
      		         pp.printpille();
      		         cout << "Pour continuer presse dans une touche númerique ";
      		         cin >> l;
      		         break;}
            case 2: {cout << " Introduit l'abcisse du point: ";
      		         cin >> x;
      		         cout << " Introduit l'ordénné du point: ";
      		         cin >> y;
      		         Point p(x,y);
      		         pp.push(p);Pour continuer presse dans une touche númerique ";
     
      		         count = count++;
      		         pp.printpille();
      		         cout << "
      		         cin >> l;
      		         break;}
      		         j=0;
      	}}
        if (j == 2) {pp.pop(); pp.printpille(); count=count--;break;j=0;}
      	if (j == 0) {cout << "Merci" << endl;}
      }
     
     
     
    };
    Le code compile bien sauf que je peut retirer seulement un élément de Pille et je pense que pour avoir une pille de taille 10 je besoin d'un vecteur. J'aurais besoin demodifier pop, push et printpille? Ou je peut mettre un compteur pour empecher plus de 10 éléments? Comme declarer le vecteur en Pille?

    Merci d'avance!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    tu as déjà une variable count dans ta classe Pille.

    Tu dois simplement modifier tes fonctions internes pour initialiser count à zéro au début, l'incrémenter lors d'un push() et le décrémenter lors d'un pop()...

    Alors, tu pourras modifier push() pour refuser d'empiler si le compteur a sa taille maximale... (même si l'avantage principal d'une pile est d'être supposée infinie...)
    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
    Paulinho
    Invité(e)
    Par défaut
    Je fais cela mais il accepte encore plus de 10 éléments...

    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
     
    #include <iostream>
    #include <cmath>
     
    using namespace std;
     
    class Par {
     
    private: 
        double left;
        double right;
     
    public:
        Par() {left = 0; right = 0;}
        Par(double l, double r) {left = l; right = r;}
     
        void set_left(double n) {left = n;}
        void set_right(double n) {right = n;}
        double get_left() const {return left;}
        double get_right() const {return right;}
        virtual void print() const {
        	cout << "(" << get_left() << "," << get_right() << ")" << endl;}
    };
     
    class Ponto: public Par {
     
    public:
        Ponto():Par() {};
        Ponto(double x, double y):Par(x,y) {};
     
        void set_abc(int x) {set_left(x);}
        void set_ord(int y) {set_right(y);}
        double get_abc() {return get_left();}
        double get_ord() {return get_right();}
        virtual void print() const {
        	cout << "(" << get_left() << "," << get_right() << ")" << endl;}
    };
     
    template <class C, int I>
     
    class Pilha
    {
    private:
        typedef struct pilha_node
      { 
      	C elem;
        struct pilha_node * next;
      } Pilha_node, * Pilha_node_ptr;
     
      Pilha_node_ptr pilha;
     
    public:
        Pilha() {pilha = NULL; count = 0;}
        int count;
     
        virtual C pop(){
         if (pilha == NULL) {cout << " Pilha vazia " << endl;}
         else {Pilha_node_ptr aux = pilha;
         pilha = pilha -> next;
         delete aux; 
         count = count--; 	
         }
        }; 
     
        void push(C &i) 
        { 
          Pilha_node_ptr aux = new Pilha_node;
          aux -> elem = i;
          aux -> next = pilha;
          pilha = aux;
          count = count++;
          };
     
        virtual void printpilha() const
         {
         	Pilha_node_ptr aux = pilha;
         	while (aux != NULL)
                {aux -> elem.print();
                 aux = aux -> next;}
         };
    };
     
    int main()
    { 
      int j = 1;
      int k = 1;
      int l = 1;
      double a, b;
      double x, y;
      int count = 0;
      Pilha<Par, 10> pp;
      while (j != 0) {
      	cout << " Escolha se pretende inserir ou retirar um objecto da pilha: " << endl;
      	cout << " 1. Inserir " << endl;
      	cout << " 2. Retirar " << endl;
      	cout << " 0. Saída " << endl;
      	cin >> j;
      	if (j == 1) {if (count > 10) {cout << "Pilha cheia." << endl;} else {
      		cout << " Escolha o tipo de objecto que pretende inserir: " << endl;
      		cout << " 1. Objecto da classe Par " << endl;
      		cout << " 2. Objecto da classe Ponto " << endl;
      		cout << " 0. Saída " << endl;
      		cin >> k;
      		switch(k) {
      		case 1: {cout << " Introduza o elemento da esquerda do par: ";
      		         cin >> a;
      		         cout << " Introduza o elemento da direita do par: ";
      		         cin >> b;
      		         Par p(a,b);
      		         pp.push(p);
      		         pp.printpilha();
      		         cout << " Para continuar carregue numa tecla numérica. ";
      		         cin >> l;
      		         break;}
            case 2: {cout << " Introduza a abcissa do ponto: ";
      		         cin >> x;
      		         cout << " Introduza a ordenada do ponto: ";
      		         cin >> y;
      		         Ponto q(x,y);
      		         pp.push(q);
      		         pp.printpilha();
      		         cout << " Para continuar carregue numa tecla numérica. ";
      		         cin >> l;
      		         break;}
      		         j = 0;}
      		         };}
        if (j == 2) {
        	pp.pop(); 
            pp.printpilha(); 
            cout << " Para continuar carregue numa tecla numérica. ";
            cin >> l;
            break; 
            j = 0;}
     
      	if (j == 0) {cout << "Obrigado" << endl;}
     
      };
     
     
    };
    J'ai debouté count = 0 dans la classe Pilha. Pourquoi ça ne marche pas?

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    je n'ai pas vu à quoi sert le I dans la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class C, int I> 
    class Pilha 
    {
    }
    le 10 ne sert à rien.
    il accepte encore plus de 10 éléments...
    Ou est le code lui interdisant d'en prendre un nombre limité ?

  5. #5
    Paulinho
    Invité(e)
    Par défaut
    C'est pour ça ( int I ) que je pense qu'il serait meilleur de créer un vecteur dans Pilha.

    Le compteur est là:
    {if (count > 10) {cout << "Pilha cheia." << endl;}
    La classe Pilha doit être comme ça Pilha<Class C, int I> (est un exercice).

    Merci à tous!

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         if (j == 1) {if (count > 10) {cout << "Pilha cheia." << endl;} else { 
            cout << " Escolha o tipo de objecto que pretende inserir: " << endl;
    Mais ce count n'a rien à voir avec celui de la classe Pilha: c'est une variable locale à la fonction main, ce n'est pas pp.count

  7. #7
    Paulinho
    Invité(e)
    Par défaut
    Ok. Je fait cela:
    {if ( pp.count > 10) {cout << "Pilha cheia." << endl;}
    mais rien a changé...

  8. #8
    Paulinho
    Invité(e)
    Par défaut
    Je pense que count ne sort pas de Pille, c'est pour ça que le condition if ne marche pas. Mais comment le faire sortir? Je tentais int count() {return count;} et modifier dans pop e push, count pour count() mais cela est pire encore. Le compilateur ne le permet pas!

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        virtual C pop(){ 
    ...
         count--;     
         } 
        }; 
     
        void push(C &i) 
        { 
    ...
          count++; 
          };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            switch(k) { 
            case 1: {...
                     break;}
            case 2: {...
                     break;}
                     j = 0;}
    j=0 n'est pas exécutable en dehors d'un case
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        if (j == 2) { 
           pp.pop();
    ....
            break;
            j = 0;}
    j= 0 ne sera jamais exécuté : on sort avec le break;

Discussions similaires

  1. [math] somme de plusieurs vecteurs à 3 dimensions
    Par teska dans le forum Mathématiques
    Réponses: 5
    Dernier message: 04/06/2003, 21h40
  2. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 11h51
  3. Migration Access > SQL Server (suite) : Compteur
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2003, 14h08
  4. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40
  5. matrices * vecteur
    Par delire8 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 07/09/2002, 14h15

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