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
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 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(); };
Après quelques tests, a priori pas de souci avec l'échange, l'inversion, l'affichage, la saisie et la mise a zéro.
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; }
Mais ça se corse avec ma méthode pairs().
Lorsque je fais ceci dans mon main :
Pas d'erreur à la compilation, mais le programme plante lors de la saisie de mes valeurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Tableau tab(5); tab.saisir(); tab.pairs().afficher();
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.
Partager