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.