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:
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:
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:
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.