19 Fév2016
Classe Ensemble d'entiers
Objectifs:
- Comprendre la notion de classe et objet
- Instancier des objets
- Définir et appeler des fonctions membres
- Gérer les tableaux statiques
Énoncé:
Réalisez une classe qui gère un ensemble d’entiers (int) à l’aide d’un tableau de taille fixe (un ensemble contient une liste non ordonnée d’éléments, et se caractérise par le fait que chaque élément est unique : on ne doit pas trouver deux fois la même valeur dans le tableau).
Les opérations à implémenter sont les suivantes :
- La fonction remplir( ) réalise le remplissage de l’ensemble.
- La fonction afficher( ) réalise l’affichage formaté de l’ensemble.
- La fonction est_membre() renvoie une valeur booléenne (logique) qui indique si l’ensemble contient un élément (entier) donné.
- La fonction ajouter( ) ajoute un entier à l’ensemble.
- La fonction supprimer( ) retire un entier de l’ensemble
- La fonction copier( ) recopie un ensemble dans un autre.
- La fonction est_egal( ) renvoie une valeur booléenne indique si un ensemble est égal à un autre.
- La fonction vider( ) vide l’ensemble.
Ecrire un programme qui teste les différentes méthodes de cette classe.
Exemple d’exécution :
Entrer la taille de l'ensemble: 4
Remplissage de l'ensemble
5
3
8
9
5 3 8 9
Donner l'entier a rechercher : 5
le nombre 5 appartient a l'ensemble
Donner l'entier a ajouter : 4
Affichage apres ajout :
5 3 8 9 4
Donner l'entier a supprimer : 3
Affichage apres suppression :
5 8 9 4
Creation d'un deuxieme ensemble
5 8 9 4
Les deux ensembles sont egaux
#include<iostream> #include<cmath> #define MAX 50 using namespace std; class Ensemble { int t[MAX]; int n; public: Ensemble(int taille){ if(taille > MAX){ taille = MAX; } else{ n = taille; } } void remplir(){ //On ne peut pas utiliser la fonction est_membre //puisque le tableau n'est pas encore rempli totalement for(int i=0;i<n;i++){ cin >> t[i]; for(int j=0; j<i; j++){ if(t[j] == t[i]) { cout << "Element existe!" << endl; i--; break; } } } } void afficher(){ for(int i=0;i<n;i++) cout << t[i] << " "; } bool est_membre(int x){ for(int i=0;i<n;i++){ if(t[i] == x) return true; } return false; } void ajouter(int x){ //Test si le tableau est plein if(n == MAX){ cout << "Erreur : Tableau plein!" << endl; } else if (est_membre(x)){ cout << "Erreur : Element existe!" << endl; } else{ t[n]=x; n++; } } void supprimer(int x){ //Quitter la fonction si l'element à supprimer n'existe pas if (!est_membre(x)) return; for(int i=0; i<n; i++){ if(t[i] == x){ for(int j=i; j<n-1; j++){ t[j] = t[j+1]; } n--; } } } void copier(const Ensemble & e){ for(int i=0; i<n; i++){ t[i] = e.t[i]; } n = e.n; } bool est_egal(const Ensemble & e){ if(n == e.n){ for(int i=0; i<n; i++){ if(!est_membre(e.t[i])) return false; } return true; } //Si les deux ensembles non pas la même taille return false; } void vider(){ n=0; } }; int main() { int n, x; cout<<"Entrer la taille de l'ensemble: "; cin >> n; Ensemble E(n); cout<<"Remplissage de l'ensemble "<<endl; E.remplir(); E.afficher(); cout<<endl; cout<<"Donner l'entier a rechercher : "; cin >> x; if(E.est_membre(x)) cout<<"le nombre "<< x << " appartient a l'ensemble"<<endl; else cout<<"le nombre "<< x << " n'appartient pas a l'ensemble"<<endl; cout<<"Donner l'entier a ajouter : "; cin >> x; E.ajouter(x); cout << "Affichage apres ajout : " << endl; E.afficher(); cout<<endl; cout<<"Donner l'entier a supprimer : "; cin >> x; E.supprimer(x); cout << "Affichage apres suppression : " << endl; E.afficher(); cout<<endl; cout << "Creation d'un deuxieme ensemble" << endl; Ensemble E2(n); E2.copier(E); E2.afficher(); cout<<endl; if(E2.est_egal(E)) cout<<"Les deux ensembles sont egaux "<<endl; E.vider(); E.afficher(); }