Ceci est une ancienne révision du document !
Chapitre précédent | Sommaire principal | Chapitre suivant |
---|
En mathématique, un intervalle est l'ensemble des variables compris entre deux valeurs. Par exemple, l'intervalle des entiers [1, 5[ (fermé à gauche et ouvert à droite) correspond aux valeurs 1, 2, 3, 4.
Le but de ces exercices va être d'écrire une représentation d'ensemble d'intervalles. Par exemple l'ensemble [0, 5[ U [10, 15[ correspond aux valeurs 0, 1, 2, 3, 4, 10, 11, 12, 13, 14.
Note : par symétrie avec les conteneurs standards, nous allons travailler sur des intervalles fermés à gauche et ouvert à droite.
En particulier, il faudra pouvoir gérer les unions et intersections d'intervalles :
Ecrire une classe permettant de gérer un intervalle simple.
Construction et affectation
Opérations de base
Idem, mais ajout de l'union d'intervalles. Il n'est plus possible de conserver uniquement deux valeurs correspondant aux bornes.
Première version : utiliser un conteneur pouvant recevoir plusieurs Intervalle définie précédemment. Il faut en particulier s'assurer de la cohérence et la simplification des données (l'union de deux intervalles peut produire deux intervalles ou un seul).
Utiliser un vector pour contenir les intervalles.
Seconde version : utiliser un conteneur associatif (std::set) pour trier les intervalles. Note : deux intervalles disjoints sont ordonnables, deux intervalles non disjoints doivent être fusionné pour former un seul intervalle.
Changement de représentation interne. Au lieu de conserver des paires de valeurs pour représenter des intervalles, utiliser un tableau de valeurs avec l'état courant
Seconde partie. Idem, mais utiliser d'autres types que bool. Par exemple avec char :
interval<char> i; // [-inf, +inf[ = '' i[0] = 'A'; // [-inf, 0[ = '', [0, +inf[ = 'A' i[10] = 'B'; // [-inf, 0[ = '', [0, 10[ = 'A', [10, +inf[ = 'B' cout << i[5] << std::endl; // 'A'
Ecrire la classe correspondante :
Chapitre précédent | Sommaire principal | Chapitre suivant |
---|