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 :

Classe Tableau, tris, et GTK+


Sujet :

C++

  1. #1
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Points : 81
    Points
    81
    Par défaut Classe Tableau, tris, et GTK+
    Bonjour à tous,

    Alors voila, j'ai un mini projet à réaliser en C++.
    Je vais devoir programmer quelques tris, à savoir les tris par sélection, par fusion et par tas. Et par la suite les implémenter sur GTK+.

    Mais j'en suis encore loin... Je dois d'abord créer une classe pour un tableau d'entiers avec pour attributs :
    - la valeur max du tableau
    - le nombre d'éléments du tableau
    et pour méthodes publiques :
    - échange de deux éléments
    - inversion de l’ordre des éléments
    - impression du tableau (impression = affichage ??? c'est ce que j'en ai déduit...)
    - la mise à zéro
    - l’extraction d’un tableau de la même classe contenant les éléments impairs
    - pareil pour les éléments pairs.

    Mon fichier Tableau.h

    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
    class Tableau{
     
        private:
            int* T;
            int max; // la valeur maximum des elements du tableau
            int taille; // le nombre d'elements du tableau
     
        public :
            Tableau(int taille);
            void echange(int, int);
            void inversion();
            void afficher() const;
            void saisir();
            void miseAZero();
            Tableau pairs();
            Tableau impairs();
     
    };
    Mon fichier Tableau.cpp

    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
    #include "Tableau.h"
    #include <iostream>
     
    using namespace std;
     
    Tableau::Tableau(int taille) {
       this->taille = taille;
       int T[taille];
     
       int m = -1;
       for (int i=0 ; i < taille ; i++) {
           if (T[i] > m) {
               m = T[i];
            }
       }
       max = m;
    }
     
    void Tableau::echange(int i, int j) {
        int temp;
        temp = T[i];
        T[i] = T[j];
        T[j] = temp;
    }
     
    void Tableau::inversion() {
        int mil;
        mil = taille / 2;
     
        if (taille % 2 == 0) {
            mil = mil - 1;
        }
        for (int i=0 ; i <= mil ; i++) {
            echange(i,taille-i-1);
        }
    }
     
    void Tableau::afficher() const {
        for (int i=0 ; i < taille ; i++) {
            cout << T[i] << " ";
        }
        cout << endl;
    }
     
    void Tableau::saisir() {
        for (int i=0 ; i < taille ; i++) {
            cout << "Saisissez la valeur de l'indice " << i << " du tableau" << endl;
            cin >> T[i];
        }
    }
     
    void Tableau::miseAZero() {
       for (int i=0 ; i < taille ; i++) {
            T[i] = 0;
        }
    }
     
    Tableau Tableau::pairs() {
        // On compte le nombre d'entiers pairs dans T (l'instance courante)
        int cpt = 0;
        for (int i=0 ; i < taille ; i++) {
            if (T[i] % 2 == 0) {
                cpt += 1;
            }
        }
     
        // On crée un objet Tableau P et on met les éléments pairs dans son tableau T
        Tableau P(cpt);
        int j = 0;
        for (int i=0 ; i < taille ; i++) {
            if (T[i] % 2 == 0) {
                P.T[j] = T[i];
                j++;
            }
        }
     
        return P;
    }
    Après quelques tests, a priori pas de souci avec l'échange, l'inversion, l'affichage, la saisie et la mise a zéro.
    Mais ça se corse avec ma méthode pairs().

    Lorsque je fais ceci dans mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Tableau tab(5);
        tab.saisir();
        tab.pairs().afficher();
    Pas d'erreur à la compilation, mais le programme plante lors de la saisie de mes valeurs.
    Du coup, un petit coup de main serait donc le bienvenue.
    Si vous voyez des améliorations a faire, n'hésitez pas non plus.

    Merci beaucoup.

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par Jéjé34 Voir le message
    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
    #include "Tableau.h"
    #include <iostream>
     
    using namespace std;
     
    Tableau::Tableau(int taille) {
       this->taille = taille;
       int T[taille];
     
       int m = -1;
       for (int i=0 ; i < taille ; i++) {
           if (T[i] > m) {
               m = T[i];
            }
       }
       max = m;
    }
    Hello,

    Ton constructeur n'alloue pas la mémoire pour T, il déclare juste une autre variable T.
    A la place de int T[taille]; tu devrais avoir T = new int[taille]; (avec le delete qui va bien dans le destructeur)

    Actuellement tu lis et écris quelque part en mémoire sans savoir ou, d'ou les erreurs à la saisie (tu écris dans une zone mémoire non réservée par ton programme).

    Pense aussi à utiliser la liste d'initialisation du constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tableau::Tableau(int t):
       taille(t)
       , T(new int[t])
    {
     ...
    }
    Sinon "T" n'est pas un nom commun pour une variable, c'est un nom utilisé en général avec des templates.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/01/2006, 14h23
  2. tableau trié
    Par devdébuto dans le forum C
    Réponses: 3
    Dernier message: 07/11/2005, 18h00
  3. tabeau de classe = tableau de classe
    Par Bason_sensei dans le forum C++
    Réponses: 25
    Dernier message: 12/10/2005, 13h01
  4. [Tableau][TRI] Tri d'un String[]
    Par zakir dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/03/2005, 17h31
  5. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 17h21

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