Outils d'utilisateurs

Outils du Site


intervalle

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

intervalle [2015/10/18 19:25]
gbdivers
intervalle [2015/10/18 22:11] (Version actuelle)
winjerome
Ligne 4: Ligne 4:
 ====== Gérer des intervalles de valeurs ====== ====== Gérer des intervalles de valeurs ======
  
-En mathématique, un [[https://fr.wikipedia.org/wiki/Intervalle_(math%C3%A9matiques)|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.+En mathématiques, un [[https://fr.wikipedia.org/wiki/Intervalle_(math%C3%A9matiques)|intervalle]] est l'ensemble des variables comprises 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. 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.+Note : par symétrie avec les conteneurs standards, nous allons travailler sur des intervalles fermés à gauche et ouverts à droite.
  
 En particulier, il faudra pouvoir gérer les unions et intersections d'intervalles : En particulier, il faudra pouvoir gérer les unions et intersections d'intervalles :
  
-  * [0, 5[ U [2, 7[ = [0, 7[ ; +  * [0, 5[ U [2, 7[ = [0, 7[ 
-  * [0, 5[ I [2, 7[ = [2, 5[ ;+  * [0, 5[ I [2, 7[ = [2, 5[
  
  
Ligne 20: Ligne 20:
 **Première version**  **Première version** 
  
-Ecrire une classe Interval_1 permettant de gérer un intervalle simple d'entiers (int).+Écrire une classe ''Interval_1'' permettant de gérer un intervalle simple d'entiers (''int'').
  
 Construction et affectation Construction et affectation
  
-  * construction à partir de deux valeurs +  * construction à partir de deux valeurs ; 
-  * assertion que les deux valeurs sont ordonnées +  * assertion que les deux valeurs sont ordonnées ; 
-  * sémantique de valeur : copiable, déplaçable (move)+  * sémantique de valeur : copiable, déplaçable (move).
  
 Opérations de base Opérations de base
  
-  * intersection d'intervalle +  * intersection d'intervalle ; 
-  * tester si une valeur appartient à un intervalle+  * tester si une valeur appartient à un intervalle.
  
 <code cpp> <code cpp>
Ligne 44: Ligne 44:
 **Seconde version** **Seconde version**
  
-Idem, avec template au lieu de int.+Idem, avec template au lieu de ''int''.
  
 <code cpp> <code cpp>
Ligne 60: Ligne 60:
 **Première version**  **Première version** 
  
-Idem, écrire une classe Interval_2, mais ajout de l'union d'intervalles. Il n'est plus possible de conserver uniquement deux valeurs correspondant aux bornes.+Idem, écrire une classe ''Interval_2'', mais ajout de l'union d'intervalles. Il n'est plus possible de conserver uniquement deux valeurs correspondant aux bornes.
  
-Utiliser un vector 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 pouvant recevoir plusieurs ''Interval_1'' défini 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).
  
 <code cpp> <code cpp>
Ligne 68: Ligne 68:
     ...     ...
 private: private:
-    std::vector<Interval_1> m_intervals{}+    std::vector<Interval_1> m_intervals{};
 }; };
 </code> </code>
Ligne 74: Ligne 74:
 **Seconde version**  **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.+Utiliser un conteneur associatif (std::set) pour trier les intervalles. Note : deux intervalles disjoints sont ordonnables, deux intervalles non disjoints doivent être fusionnés pour former un seul intervalle.
  
 <code cpp> <code cpp>
Ligne 80: Ligne 80:
     ...     ...
 private: private:
-    std::set<Interval_1> m_intervals{}+    std::set<Interval_1> m_intervals{};
 }; };
 </code> </code>
Ligne 88: Ligne 88:
 **Première version**  **Première version** 
  
-Ecrire une classe Interval_3, en changeant 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+Écrire une classe ''Interval_3'', en changeant 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.
  
-  * l'intervalle [-inf, inf[ sera représenté en interne par un tableau vide +  * l'intervalle [-inf, inf[ sera représenté en interne par un tableau vide ; 
-  * l'intervalle [0, inf[ sera représenté en interne par la valeur {0, true} +  * l'intervalle [0, inf[ sera représenté en interne par la valeur {0, true} ; 
-  * l'intervalle [0, 1[ sera représenté en interne par les valeurs {{0, true}, {1, false}} +  * l'intervalle [0, 1[ sera représenté en interne par les valeurs {{0, true}, {1, false}} ; 
-  * l'ensemble [0, 1[ U [2, 3[ sera représenté en interne par les valeurs  {{0, true}, {1, false}, {2, true}, {3, false}}+  * l'ensemble [0, 1[ U [2, 3[ sera représenté en interne par les valeurs  {{0, true}, {1, false}, {2, true}, {3, false}}.
  
 <code cpp> <code cpp>
Ligne 99: Ligne 99:
     ...     ...
 private: private:
-    std::vector<pair<int, bool>> m_intervals{}+    std::vector<pair<int, bool>> m_intervals{};
 }; };
 </code> </code>
Ligne 105: Ligne 105:
 **Deuxième version**  **Deuxième version** 
  
-Idem, mais utiliser d'autres types que bool. Par exemple avec char :+Idem, mais utiliser d'autres types que ''bool''. Par exemple avec ''char'' :
  
 <code cpp> <code cpp>
Ligne 114: Ligne 114:
 </code> </code>
  
-Ecrire la classe correspondante :+Écrire la classe correspondante :
  
-  * sémantique de valeur +  * sémantique de valeur ; 
-  * ajouter des valeurs +  * ajout de valeurs ; 
-  * union et intersection +  * union et intersection ; 
-  * tester une valeurs+  * tester une valeur.
  
 <code cpp> <code cpp>
Ligne 125: Ligne 125:
     ...     ...
 private: private:
-    std::vector<pair<int, char>> m_intervals{}+    std::vector<pair<int, char>> m_intervals{};
 }; };
 </code> </code>
Ligne 139: Ligne 139:
     ...     ...
 private: private:
-    std::vector<pair<T, U>> m_intervals{}+    std::vector<pair<T, U>> m_intervals{};
 }; };
 </code> </code>
  
 ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^
intervalle.1445189144.txt.gz · Dernière modification: 2015/10/18 19:25 par gbdivers