You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
5.4 KiB
244 lines
5.4 KiB
/**
|
|
* @file EnsembleDouble.h
|
|
* @author Sebastien Fourey
|
|
* @date Thu Nov 18
|
|
*
|
|
* @brief Declaration de la classe EnsembleDouble.
|
|
*
|
|
*/
|
|
#ifndef ENSEMBLEDOUBLE_H
|
|
#define ENSEMBLEDOUBLE_H
|
|
|
|
#include <iostream>
|
|
#include <ostream>
|
|
using namespace std;
|
|
|
|
/**
|
|
* Classe permettant de representer un ensemble de
|
|
* double en utilisant uniquement la notion d'egalite entre
|
|
* double. Aucune relation d'ordre n'est utilisee (par exemple
|
|
* pour avoir un representation ordonnee en memoire qui accelererait
|
|
* les recherches).<br>
|
|
* Seul l'operateur == est utilise pour tester l'egalite de deux
|
|
* elements.
|
|
*/
|
|
class EnsembleDouble {
|
|
|
|
class Noeud {
|
|
double valeur;
|
|
Noeud * suivant;
|
|
public:
|
|
Noeud(double valeur, Noeud * suivant=0):valeur(valeur),suivant(suivant) { }
|
|
~Noeud() { delete suivant; }
|
|
double getValeur() { return valeur; }
|
|
Noeud * getSuivant() { return suivant; }
|
|
void setSuivant(Noeud * suivant) { Noeud::suivant = suivant; }
|
|
};
|
|
|
|
Noeud * liste;
|
|
|
|
public:
|
|
|
|
/**
|
|
* Construit un ensemble vide.
|
|
*/
|
|
EnsembleDouble():liste(0) { }
|
|
|
|
/**
|
|
* Construit un singleton.
|
|
*/
|
|
EnsembleDouble(double x) { liste = new Noeud(x); }
|
|
|
|
/**
|
|
* Destructeur.
|
|
*/
|
|
~EnsembleDouble();
|
|
|
|
/**
|
|
* Test si l'ensemble est vide.
|
|
*
|
|
* @return true si l'ensemble est vide, sinon false.
|
|
*/
|
|
bool estVide() { return liste == 0; }
|
|
|
|
/**
|
|
* Envoie tous les elements dans un flot de sortie.
|
|
*
|
|
* @param out un flot de sortie.
|
|
*
|
|
* @return le flot de sortie donne en parametre.
|
|
*/
|
|
ostream & flush(ostream & out) const;
|
|
|
|
/**
|
|
* Test l'appartenance d'un element a l'ensemble.
|
|
*
|
|
* @param x un double.
|
|
*
|
|
* @return true sie est dans l'ensemble, false sinon.
|
|
*/
|
|
bool contient(double x) const;
|
|
|
|
/**
|
|
* Test l'inclusion dans un autre ensemble.
|
|
*
|
|
* @param e un ensemble
|
|
*
|
|
* @return true si "je" suis inclus dans e, false sinon.
|
|
*/
|
|
bool estInclusDans(const EnsembleDouble & autre) const;
|
|
|
|
/**
|
|
* Ajoute un "objet" a l'ensemble.
|
|
*
|
|
* @param e un double a ajouter � l'ensemble.
|
|
*/
|
|
void ajoute(double x);
|
|
|
|
/**
|
|
* Retire un double de l'esemble.
|
|
*
|
|
* @param x un double a retirer.
|
|
*/
|
|
void retire(double x);
|
|
|
|
|
|
/**
|
|
* Ajoute tous les elements dans un autre ensemble.
|
|
*
|
|
* @param e un ensemble
|
|
*/
|
|
void ajouteDans(EnsembleDouble & e) const;
|
|
|
|
/**
|
|
* Retire tous les elements dans un autre ensemble.
|
|
* Apres a.enleveDe(b), b vaut b - a (- ensembliste)
|
|
*
|
|
* @param e un ensemble dont il faut retirer des elements.
|
|
*/
|
|
void retireDe(EnsembleDouble & e) const;
|
|
|
|
|
|
/**
|
|
* Operateur d'affectation d'un ensemble.
|
|
*
|
|
* @param e un ensemble
|
|
*
|
|
* @return une reference a moi-meme
|
|
*/
|
|
EnsembleDouble & operator=(const EnsembleDouble & e);
|
|
|
|
|
|
/**
|
|
* Constructeur par recopie.
|
|
*
|
|
* @param e un ensemble
|
|
*/
|
|
EnsembleDouble(const EnsembleDouble & e);
|
|
|
|
private:
|
|
|
|
/**
|
|
* Methode recursive de suppression d'un element dans
|
|
* une liste chainee.
|
|
*
|
|
* @param liste une liste.
|
|
* @param x un element.
|
|
*
|
|
* @return le liste sans l'element.
|
|
*/
|
|
Noeud * retireRec(Noeud * liste, double x);
|
|
|
|
};
|
|
|
|
/**
|
|
* Operateur << pour les enembles de double.
|
|
*
|
|
* @param out un flot de sortie.
|
|
* @param e un ensemble de doubles.
|
|
*
|
|
* @return le flot de sortie donne en argument.
|
|
*/
|
|
ostream & operator<<(ostream & out, const EnsembleDouble & e);
|
|
|
|
|
|
/**
|
|
* Creation d'un singleton.
|
|
*
|
|
* @param x un double
|
|
*
|
|
* @return le singleton {x}
|
|
*/
|
|
EnsembleDouble singleton(double x);
|
|
|
|
/**
|
|
* Creation d'un ensemble vide.
|
|
*
|
|
* @param x un double
|
|
*
|
|
* @return le singleton {x}
|
|
*/
|
|
EnsembleDouble ensembleVide();
|
|
|
|
/**
|
|
* Teste l'egalite de deux ensembles.
|
|
*
|
|
* @param a un ensemble.
|
|
* @param b un ensemble.
|
|
*
|
|
* @return true si a=b (i.e., a est inclus dans b et b est inclus dans a),
|
|
* sinon false.
|
|
*/
|
|
bool egale(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
bool operator==(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
bool operator<(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
bool operator>(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
|
|
|
|
/**
|
|
* Union de deux ensembles de doubles.
|
|
*
|
|
* @param a un ensemble de doubles.
|
|
* @param b un ensemble de doubles.
|
|
*
|
|
* @return a union b.
|
|
*/
|
|
EnsembleDouble reunion(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
EnsembleDouble operator+(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
EnsembleDouble operator|(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
|
|
/**
|
|
* Difference de deux ensembles.
|
|
*
|
|
* @param a un ensemble de doubles.
|
|
* @param b un ensemble de doubles.
|
|
*
|
|
* @return a prive de b.
|
|
*/
|
|
EnsembleDouble difference(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
EnsembleDouble operator-(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
|
|
/**
|
|
* Difference symetrique entre deux ensembles de doubles.
|
|
*
|
|
* @param a un ensemble de doubles.
|
|
* @param b un ensemble de doubles.
|
|
*
|
|
* @return (a prive de b) union (b prive de a)
|
|
*/
|
|
EnsembleDouble diffSymetrique(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
EnsembleDouble operator^(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
|
|
|
|
/**
|
|
* Intersection entre deux ensembles de doubles.
|
|
*
|
|
* @param a un ensemble de doubles.
|
|
* @param b un ensemble de doubles.
|
|
*
|
|
* @return l'intersection de a et b.
|
|
*/
|
|
EnsembleDouble intersection(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
EnsembleDouble operator&(const EnsembleDouble & a, const EnsembleDouble & b);
|
|
|
|
#endif
|
|
|