Génie Logiciel I. Cours VII - La S.T.L. et les conteneurs. Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M. 2ème année - 08/09

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimension: px
Commencer à balayer dès la page:

Download "Génie Logiciel I. Cours VII - La S.T.L. et les conteneurs. Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M. 2ème année - 08/09"

Transcription

1 Génie Logiciel I Cours VII - La S.T.L. et les conteneurs Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M. 2ème année - 08/09 Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 1 / 37 Plan du cours 1 Généralités sur la S.T.L. 2 Les conteneurs séquentiels 3 Les conteneurs associatifs Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 2 / 37

2 Généralités sur la S.T.L. La S.T.L. Definition (S.T.L.) La S.T.L. ou Standard Template Library est la grande nouveauté de la bibliothèque standard intégrée à la norme C++. Elle contient un ensemble de patrons de classes permettant de manipuler simplement les éléments du C++. Ex : les classes de flots, la classe string, la classe type info, la classe exception et ses dérivées, La S.T.L. introduit de nouvelles notions : les conteneurs; les itérateurs; les algorithmes; les prédicats. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 3 / 37 Généralités sur la S.T.L. Les conteneurs Definition (Les conteneurs) Les conteneurs sont des classes permettant de représenter les structures de données les plus répandues : listes, vecteurs, ensembles, tableaux associatifs, Ce sont des patrons de classes paramétrés par le type de leurs éléments. Chacune de ces classes dispose de fonctionnalités appropriées et en tant que patrons, peuvent être instanciées pour n importe quel paramètre, y compris un paramètre de type classe défini par l utilisateur. Beaucoup de fonctionnalités sont communes à différents conteneurs. Il existe deux types de conteneurs : les conteneurs séquentiels : ce sont des conteneurs dont les éléments sont ordonnés. On peut parcourir le conteneur suivant cet ordre et insérer ou supprimer un élément en un endroit explicitement choisi; les conteneurs associatifs : ce sont des conteneurs dont les éléments sont identifiés par un clé et ordonnés suivant celle-ci. Pour insérer un élément, il n est en théorie plus utile de préciser un emplacement. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 4 / 37

3 Généralités sur la S.T.L. Les itérateurs : rappels sur les pointeurs Parcours classique d un tableau double p t r [ 6 ] ; f o r ( i n t j =0; j <6; j ++) { cout << p t r [ j ] << e n d l ; Parcours d un tableau avec pointeur double p t r [ 6 ] ; double i=new double ( ) ; f o r ( i=&p t r ; i!=& p t r +6; i ++) { cout << i << e n d l ; i ptr[0] ptr[1] ptr[2] ptr[3] ptr[4] ptr[5] Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 5 / 37 Généralités sur la S.T.L. Les itérateurs Definition (itérateur) Un itérateur est un objet défini par la classe conteneur concernée. Il généralise la notion de pointeur : à un instant donné, un itérateur possède une valeur qui désigne un élément donné du conteneur. On dit qu un itérateur pointe vers un élément du conteneur; un itérateur peut être incrémenté par l opérateur ++, de manière à pointer vers l élément suivant du conteneur; un itérateur peut être déréférencé, comme un pointeur, à l aide de l opérateur *. Par exemple, si it est un itérateur sur une liste de points, *it désigne un point de la liste; deux itérateurs sur un même conteneur peuvent être comparés par égalité ou inégalité. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 6 / 37

4 Généralités sur la S.T.L. Les itérateurs Il existe 3 principaux types d itérateurs : les itérateurs unidirectionnels : ce sont des itérateurs qui ne peuvent qu être incrémentés (++); les itérateurs bidirectionnels : ce sont des itérateurs qui peuvent être incrémentés (++) et décrémentés ( ); les itérateurs à accès direct : ce sont des itérateurs bidirectionnels pour lesquels les expressions de la forme it+i ont un sens. Dans ce cas, on surdéfinit souvent l opérateur []. Les itérateurs à accès direct peuvent être comparés par inégalité. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 7 / 37 Généralités sur la S.T.L. Utilisation des itérateurs Pour parcourir un conteneur avec un itérateur, on dispose de deux fonctions begin() et end() retournant une valeur de type itérator pour un parcours direct, et de deux fonctions rbegin() et rend() retournant une valeur de type reverse iterator pour un parcours inverse (pour les itérateurs au moins bidirectionnels) : Exemple l i s t <p o i n t > l p ; // i t é r a t e u r s u r l i s t e de p o i n t s l i s t <p o i n t >:: i t e r a t o r i t ; f o r ( i t=l p. b e g i n ( ) ; i t!= l p. end ( ) ; i t ++) { // i t é r a t e u r i n v e r s e s u r l i s t e de p o i n t s l i s t <p o i n t >:: r e v e r s e i t e r a t o r r i t ; f o r ( r i t =l p. r b e g i n ( ) ; r i t!= l p. rend ( ) ; r i t ++) { Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 8 / 37

5 Généralités sur la S.T.L. Les intervalles d itérateurs Comme nous l avons précisé, tous les conteneurs sont ordonnés, de sorte que l on peut toujours les parcourir d un début jusqu à une fin. Definition (intervalle d itérateur) On appelle intervalle d itérateur d un conteneur un couple de valeurs de deux itérateurs it1 et it2 précisant les bornes. On le note [it1,it2). Cela signifie qu à partir de l élément du conteneur pointé par it1, on peut atteindre l élément pointé par it2 à l aide d un certain nombre d incrémentations. L intervalle d itérateur [it1,it2) contiendra la séquence des éléments pointés durant le parcours, de l élément pointé par it1 inclus à l élément pointé par it2 exclu. Cette notion d intervalle d itérateur sera très utilisée dans les algorithmes. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 9 / 37 Généralités sur la S.T.L. Les algorithmes La notion d algorithme est tout aussi originale que les deux précédentes. Elle se fonde sur le principe suivant : Par le biais des itérateurs, beaucoup d opérations peuvent être appliquées à un conteneur quels que soient sa nature et le type de ses éléments. Par exemple, on peut trouver le premier élément ayant une valeur donnée aussi bien dans une liste que dans un vecteur ou un ensemble. Le seul besoin est que l égalité entre deux éléments soit convenablement définie. De même, on peut trier un conteneur de type quelconque, y compris un type classe défini par l utilisateur, à la condition que le conteneur en question dispose d un itérateur à accès direct et que la relation d ordre < soit convenablement définie. Definition (algorithme) Un algorithme est un patron de fonction dont le paramètre est le type des itérateurs fournis en arguments. L utilisation des algorithmes standards demandera d include <algorithm>. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 10 / 37

6 Généralités sur la S.T.L. Exemples d algorithmes Compter le nombre d occurences d une valeur dans un intervalle d itérateur : l algorithme count v e c t o r <i n t > v ; i n t n=count ( v. b e g i n ( ), v. end ( ), 1 ) ; l i s t <double> l ; i n t m=count ( l. b e g i n ( ), l. end ( ), 2. 0 ) ; Copier une séquence de valeurs dans un autre (type de) conteneur : l algorithme copy v e c t o r <double> v,w; l i s t <double> l ; copy ( v. b e g i n ( ), v. end ( ), l. b e g i n ( ) ) ; copy ( v. r b e g i n ( ), v. rend ( ),w. b e g i n ( ) ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 11 / 37 Généralités sur la S.T.L. Fonctions unaires Beaucoup d algorithmes et quelques fonctions membres des classes conteneurs permettent d appliquer une fonction aux éléments d une séquence. Cette fonction est simplement passée en argument de l algorithme : Exemple : for each main ( ) { l i s t <f l o a t > l f ; void a f f i c h e ( f l o a t ) ; f o r e a c h ( l f. b e g i n ( ), l f. end ( ), a f f i c h e ) ; cout << e n d l ; void a f f i c h e ( f l o a t x ) { cout << x << ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 12 / 37

7 Généralités sur la S.T.L. Fonctions, prédicats et classes fonctions Definition (Prédicat) Un prédicat est une fonction dont la valeur de retour est de type bool. Là encore, certains algorithmes et fonctions membres des classes conteneurs demandent un prédicat en argument. Exemple : find if main ( ) { l i s t <i n t > l ; l i s t <i n t >:: i t e r a t o r i t ; bool i m p a i r ( i n t ) ; i t=f i n d i f ( l. b e g i n ( ), l. end ( ), i m p a i r ) ; bool i m p a i r ( i n t i ) { r e t u r n i %2; Dans la plupart des cas, les fonctions passées en arguments sont des objets fonctions. Pour utiliser les classes fonctions prédéfinies, on inclura <functional>. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 13 / 37 Généralités sur la S.T.L. Conteneurs, algorithmes et relation d ordre par définition, les conteneurs séquentiels sont ordonnés. Par ailleurs, le conteneur list dispose d une fonction membre sort qui permet de les réarranger selon un certain critère; pour des raisons d efficacité, les éléments d un conteneur associatif sont ordonnés; il existe beaucoup d algorithmes de tri qui réorganisent également les éléments d un conteneur suivant un certain ordre. Tant que les éléments concernés sont d un type standard (type de base ou string) on peut se permettre d appliquer ces méthodes de réordonnancement sans se poser de questions. Par contre, si les élements concernés sont de type classe, il faut s assurer de la surcharge de l opérateur <, et pas n importe comment. On peut également choisir d utiliser une relation autre que l opérateur <, soit en choisissant un autre opérateur, soit en fournissant une fonction de comparaison de deux éléments. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 14 / 37

8 Généralités sur la S.T.L. Conteneurs, algorithmes et relation d ordre Quel que soit le choix de la relation d ordre R, R doit être une relation d ordre faible strict, c est-à-dire vérifie les propriétés suivantes : 1 la comparaison de deux éléments identiques retourne la valeur faux : a!(ara); 2 la relation d ordre est transitive : si arb et brc, alors arc; 3 si!(arb) et!(brc), alors!(arc). Pour des valeurs numériques, on peut donc utiliser les opérateurs < et >, mais pas les opérateurs <= et >=, qui ne sont pas des relations d ordre faible strict. Il faudra faire bien attention à respecter ces propriétés lors de la définition de la relation d ordre sur un conteneur associatif, comme nous le verrons. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 15 / 37 Les conteneurs séquentiels Généralités Definition Les conteneurs séquentiels sont des conteneurs ordonnés suivant un ordre imposé explicitement par le programme lui-même. Il existe 3 conteneurs séquentiels principaux : list : ce conteneur correspond à la liste doublement chaînée; vector : ce conteneur correspond à la généralisation des tableaux; deque : ce conteneur est intermédiaire entre list et vector et n existe que pour des raisons d efficacité. En tant que conteneurs, les trois ont des fonctionnalités communes. Ils ont aussi des fonctionnalités propres. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 16 / 37

9 Les conteneurs séquentiels Fonctionnalités communes à list, vector et deque Les fonctionnalités communes sont de 4 types : 1 la construction; 2 l affectation globale; 3 la comparaison; 4 l insertion / suppression d éléments. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 17 / 37 Les conteneurs séquentiels Construction Les conteneurs list, vector et deque disposent de différents constructeurs : construction d un conteneur vide : l i s t <i n t > l i ; v e c t o r <f l o a t > v f ; construction avec un nb donné d éléments, initialisés par une valeur ou pas : l i s t <i n t > l i ( 1 0 ) ; p o i n t p ( 2, 3 ) ; deque<p o i n t > dd ( 5, p ) ; construction à partir d une séquence : construction par copie : l i s t <i n t > l i ( 5 ) ; v e c t o r <i n t > v f ( l i. b e g i n ( ), l i. end ( ) ) ; l i s t <i n t > l i r ( l i. r b e g i n ( ), l i. rend ( ) ) ; l i s t <i n t > l i ; l i s t <i n t > l i 2 ( l i ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 18 / 37

10 Les conteneurs séquentiels Modifications globales affectation : elle n est possible qu entre conteneurs de même type; l i s t <i n t > l i ( ), l i 2 ( ) ; l i s t <f l o a t > l f ( ) ; l i 2= l i ; // c o r r e c t l i 2= l f ; // i n c o r r e c t fonction membre assign : permet d affecter à un conteneur existant les éléments d une séquence définie par un intervalle [deb,fin) ; l i s t <i n t > l i ( ) ; v e c t o r <i n t > v i ( ) ; l i s t <f l o a t > l f ( ) ; v i. a s s i g n ( l i. b e g i n ( ), l i. end ( ) ) ; // c o r r e c t v i. a s s i g n ( 1 0, 1 ) ; // c o r r e c t : 10 é l é m e n t s v a l a n t 1 v i. a s s i g n ( l f. r b e g i n ( ), l f. rend ( ) ) ; // i n c o r r e c t Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 19 / 37 Les conteneurs séquentiels Modifications globales fonction membre clear : vide le conteneur de son contenu; l i s t <int > l i ( ) ; l i. c l e a r ( ) ; fonction membre swap : permet d échanger le contenu de deux conteneurs de même type ; l i s t <int > l i ( ), l i 2 ( ) ; l i. swap ( l i 2 ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 20 / 37

11 Les conteneurs séquentiels Comparaison l opérateur == : retourne vrai si les deux conteneurs passés en arguments sont de même type, de même taille et ont le même contenu. A surdéfinir si besoin; Exemple < : retourne faux si l une des comparaisons lexicographiques entre éléments de même rangs est fausse. Les deux conteneurs comparés ne sont pas nécessairement de même taille ; i n t t1 [ ] = {2, 5, 2, 4, 8 ; i n t t2 [ ] = {2, 5, 2, 8 ; v e c t o r <int > v1 ( t1, t1 +5); v e c t o r <int > v2 ( t2, t2 +4); v e c t o r <int > v3 ( t2, t2 +3); v e c t o r <int > v4 ( v3 ) ; v e c t o r <int > v5 ; v2 < v1 ; v5 < v4 ; v5 < v5 ; v3 < v2 ; v3 == v4 ; v2 == v3 ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 21 / 37 Les conteneurs séquentiels Comparaison l opérateur == : retourne vrai si les deux conteneurs passés en arguments sont de même type, de même taille et ont le même contenu. A surdéfinir si besoin; Exemple < : retourne faux si l une des comparaisons lexicographiques entre éléments de même rangs est fausse. Les deux conteneurs comparés ne sont pas nécessairement de même taille ; i n t t1 [ ] = {2, 5, 2, 4, 8 ; i n t t2 [ ] = {2, 5, 2, 8 ; v e c t o r <int > v1 ( t1, t1 +5); v e c t o r <int > v2 ( t2, t2 +4); v e c t o r <int > v3 ( t2, t2 +3); v e c t o r <int > v4 ( v3 ) ; v e c t o r <int > v5 ; v2 < v1 ; // f a l s e v5 < v4 ; // t r u e v5 < v5 ; // f a l s e v3 < v2 ; // t r u e v3 == v4 ; // t r u e v2 == v3 ; // f a l s e Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 22 / 37

12 Les conteneurs séquentiels Insertion / suppression fonction membre insert : l i s t <double> l d ; l i s t <double >:: i t e r a t o r i t ; l d. i n s e r t ( i l, 2. 5 ) ; l d. i n s e r t ( l d. b e g i n ( ), 6. 7 ) ; l d. i n s e r t ( l d. end ( ), 3. 2 ) ; l d. i n s e r t ( i l, 1 0, 1. 0 ) ; v e c t o r <double> vd ( ) ; l d. i n s e r t ( l d. end ( ), vd. b e g i n ( ), vd. end ( ) ) ; fonction membre erase : supprime des éléments et retourne la valeur de l élément suivant le dernier supprimé : l i s t <double> l d ; l i s t <double >:: i t e r a t o r i t 1, i t 2 ; i t 1=l d. e r a s e ( i t 1, i t 2 ) ; i t 2=l d. e r a s e ( l d. b e g i n ( ) ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 23 / 37 Les conteneurs séquentiels Le conteneur list Alors que les conteneurs vector et deque disposent d un itérateur à accès direct (ce qui permet de les manipuler comme de simples tableaux), le conteneur list ne dispose que d un itérateur bidirectionnel. On peut donc parcourir un conteneur list dans les deux sens, sans pour autant avoir la possibilité d accéder à un élément par un indice. Le conteneur list est également le conteneur le plus efficace et rapide pour les opérations d insertion / suppression (coût en O(1) plutôt qu en O(n) pour vector et deque. Nous allons voir maintenant quelles sont les fonctionnalités spécifiques au conteneur list, les fonctionnalités communes vues précédemment étant bien évidemment disponibles. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 24 / 37

13 Les conteneurs séquentiels Le conteneur list Le conteneur list ne dispose que d un itérateur bidirectionnel. On ne peut donc pas accéder directement à un élément de la liste. Il dispose néanmoins de deux fonctions membres sans arguments back et front permettant d accéder au dernier / premier élément. Exemple l i s t <i n t > l i ( ) ; i f ( l i. f r o n t ( ) == 99) l i. f r o n t ()=0; Le conteneur list dispose également de deux fonctions membres remove et remove if permettant de supprimer des éléments par valeur ou suivant un prédicat : Exemple b o o l p a i r e ( i n t n ) { r e t u r n n%2; i n t t [ ] = {1, 3, 1, 6, 4, 1, 5, 2, 1 ; l i s t <i n t > l i ( t, t +9); l i. remove ( 1 ) ; // l i c o n t i e n t 3, 6, 4, 5 e t 2 l i. r e m o v e i f ( p a i r e ) ; // l i c o n t i e n t 3 e t 5 Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 25 / 37 Les conteneurs séquentiels Le conteneur list Nous allons voir maintenant quelques opérations globales : tri : le conteneur list dispose d une fonction membre sort très efficace, permettant de trier ses élements : #i n c l u d e <f u n c t i o n a l > i n t t [ ] = {1, 6, 3, 9, 11, 18, 5 ; l i s t <i n t > l i ( t, t +7); l i. s o r t ( ) ; // 1, 3, 5, 6, 9, 11, 18, l i. s o r t ( g r e a t e r <i n t >); // 18, 11, 9, 6, 5, 3, 1 suppression des doublons : le conteneur list dispose d une fonction membre unique très efficace, permettant d éliminer les doublons quand ils sont consécutifs : i n t t [ ] = {1, 6, 6, 4, 6, 5, 5, 4, 2 ; l i s t <i n t > l i ( t, t +9); l i s t <i n t > l i 2= l i ; l i 1. u nique ( ) // 1, 6, 4, 6, 5, 4, 2 l i 2. s o r t ( ) ; // 1, 2, 4, 4, 5, 5, 6, 6, 6 l i 2. u nique ( ) ; // 1, 2, 4, 5, 6 Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 26 / 37

14 Les conteneurs séquentiels Le conteneur list Voici un exemple permettant d illustrer les diverses fonctionnalités abordées (il y en a d autres, bien entendu) sur le conteneur list : Le programme test #i n c l u d e <iostream > #i n c l u d e < l i s t > using namespace s t d ; main ( ) { void a f f i c h e ( l i s t <char >); char mot [ ] = { a n t i c o n s t i t u t i o n n e l l e m e n t ; l i s t <char> l c 1 ( mot, mot+s i z e o f ( mot ) 1); l i s t <char> l c 2 ; cout << l c 1 i n i t : << a f f i c h e ( l c 1 ) << e n d l ; cout << l c 2 i n i t : << a f f i c h e ( l c 2 ) << e n d l ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 27 / 37 Les conteneurs séquentiels Le conteneur list Le programme test (suite) l i s t <char >:: i t e r a t o r i t 1, i t 2 ; i t 2=l c 2. b e g i n ( ) ; f o r ( i t 1=l c 1. b e g i n ( ) ; i t 1!= l c 1. end ( ) ; i t 1 ++) i f ( i l 1!= t ) l c 2. push back ( i l 1 ) ; // e n l e v e r l e s t cout << l c 2 a p r e s : ; a f f i c h e ( l c 2 ) ; l c 1. remove ( t ) ; cout << l c 1 remove : ; a f f i c h e ( l c 1 ) ; i f ( l c 1 == l c 2 ) cout << l e s deux l i s t e s s o n t e g a l e s << e n d l ; l c 1. s o r t ( ) ; cout << l c 1 s o r t : ; a f f i c h e ( l c 1 ) ; l c 1. unique ( ) ; cout << l c 1 unique : ; a f f i c h e ( l c 1 ) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 28 / 37

15 Les conteneurs séquentiels Le conteneur list Fonction affiche et sortie écran void a f f i c h e ( l i s t <char> l c ) l i s t <char >:: i t e r a t o r i t ; f o r ( i t=l c. b e g i n ( ) ; i t!= l c. end ( ) ; i t ++) cout << ( i t ) << ; cout << e n d l ; l c 1 i n i t : a n t i c o n s t i t u t i o n n e l l e m e n t l c 2 i n i t : l c 2 a p r e s : a n i c o n s i u i o n n e l l e m e n l c 1 remove : a n i c o n s i u i o n n e l l e m e n l e s deux l i s t e s s o n t e g a l e s l c 1 s o r t : a c e e e i i i l l m n n n n n o o s u l c 1 u nique : a c e i l m n o s u Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 29 / 37 Les conteneurs associatifs Généralités Definition Les conteneurs associatifs sont destinés à retrouver une information, non pas en fonction de sa place dans le conteneur, mais en fonction de sa valeur, ou une partie de sa valeur appelée clé. Pour des raisons d efficacité, un conteneur associatif se trouve ordonné en permanence, en se fondant sur une relation d ordre définie à la construction. Ex : dans un répertoire téléphonique, les numéros de téléphones sont ordonnés par une clé que constitue le nom et le prénom de la personne. À la différence des conteneurs séquentiels, chaque élément est ici composé de deux parties : la clé et la valeur. Les deux conteneurs associatifs les plus importants sont : map : conteneur associatif pur qui impose l unicité des clés. On peut donc utiliser à bon escient l opérateur []; multimap : à la différence de map, l unicité de la clé n est pas exigée. Dans l exemple du répertoire téléphonique, le conteneur multimap autorisera les homonymes. Les deux classes n ont pas vraiment de fonctionnalités communes en raison de l unicité de la clé ou pas. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 30 / 37

16 Les conteneurs associatifs Le conteneur map Exemple #i n c l u d e <i o s t r e a m > #i n c l u d e <map> using namespace s t d ; main ( ) { void a f f i c h e (map<char, i n t >); map<char, i n t > m; cout << map i n i t : ; a f f i c h e (m) ; m[ S ]=5; m[ C ]=12; cout << map SC : ; a f f i c h e (m) ; cout << map( S ) : << m[ S ] << e n d l ; cout << map(x) : << m[ X ] << e n d l ; cout << map X : ; a f f i c h e (m) ; m[ S ]=m[ c ] ; cout << map f i n a l : ; a f f i c h e (m) ; Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 31 / 37 Les conteneurs associatifs Le conteneur map Exemple(suite) void a f f i c h e (map<char, i n t > m) { map<char, i n t >:: i t e r a t o r i t ; f o r ( im=m. b e g i n ( ) ; i t!=m. end ( ) ; i t ++) cout << ( << im > f i r s t <<, << im >second << ) ; cout << e n d l ; map i n i t : map SC = (C, 1 2 ) (S, 5 ) map( S ) : 5 map(x) : 0 map X : (C, 1 2 ) (S, 5 ) (X, 0 ) map f i n a l : (C, 1 2 ) (S, 0 ) (X, 0 ) ( c, 0 ) Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 32 / 37

17 Les conteneurs associatifs Le conteneur map Analysons cet exemple introductif : la classe map dispose d un itérateur iterator bidirectionnel; les éléments d un objet de type map sont d un type particulier pair, dont la classe comporte deux attributs, first et second, pour accéder respectivement à la clé et à la valeur; lorsqu on utilise l opérateur [], si la clé utilisée n existe pas dans le conteneur, elle est créée et la valeur associée sera 0; le conteneur map est ordonné intrinsèquement. Ici c est l opérateur < par défaut. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 33 / 37 Les conteneurs associatifs Le conteneur map Pour construire un conteneur map, on ne dispose que de 3 possibilités : construire un conteneur vide; construire un conteneur par copie; construire un conteneur à partir d une séquence; La syntaxe est la même que celle vue pour les conteneurs séquentiels. On peut spécifier la relation d ordre utilisée à l aide d un prédicat. Rappelons que par défaut, c est l opérateur < pour le type de la clé qui est utilisé. Si c est un type classe, on s assurera de le surcharger. map<char, long, g r e a t e r <char> > m1 ; map<char, long, g r e a t e r <char> > m2(m1 ) ; Dans le cas de la construction par copie, si m1 et m2 ne sont pas ordonnés par la même relation, il y a erreur de compilation : La relation d ordre fait partie du type du conteneur. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 34 / 37

18 Les conteneurs associatifs Le conteneur map Comme pour tout conteneur, on peut accéder à un élément existant, soit pour en connaître la valeur, soit pour la modifier. Néanmoins, dans le cas d une map, c est un peu particulier. On a vu en effet qu une tentative d accès à une clé existante amène à la création d un nouvel élément. Si l on accède aux éléments par itérateur, ce comportement automatique n existe plus. En théorie, il n est pas interdit de modifier la valeur de l élément désigné par un itérateur, mais le rôle exact d une telle opération n est pas spécifié par la norme. // modif par a p p e l à f c t membre make pair de c l a s s e p a i r i t=make pair ( R, 4 ) ; En effet, on peut modifier la valeur de la clé et l ordre des éléments peut s en trouver modifié. Sur quoi pointe alors l itérateur? Il est donc fortement déconseillé de modifier la valeur d un élément d une map par le biais d un itérateur. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 35 / 37 Les conteneurs associatifs Le conteneur map Quelques fonctions membres utiles : find : permet de recherche un élément et retourne un itérateur. Si l élément est introuvable, elle retourne end() : i f (m1. f i n d ( R )!=m1. end ( ) ) cout << t r o u v é <<e n d l ; insert : permet d insérer un élément. Les syntaxes sont les mêmes que vues précédemment; erase : permet de supprimer un élément. Les syntaxes sont les mêmes que vues précédemment. Il existe une nouvelle possibilité : donner la clé en argument. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 36 / 37

19 Les conteneurs associatifs Le conteneur map Que se passe t-il quand on veut supprimer un élément en passant un itérateur en argument? Sur quoi va pointer l itérateur? La réponse dépend de la version du compilateur. Toutefois, il existe une manière de contourner le problème : Exemple template <c l a s s T> e r a s e Z e r o s (map<i n t, T> m) { typename map<i n t, T>:: i t e r a t o r i t ; f o r ( i t=m. b e g i n ( ) ; i t!=m. end ( ) ; ) { i f ( ( i t >second )==0.0){ m. e r a s e ( i t ++); e l s e { ++i t ; On peut voir le mot clé typename dans la syntaxe de déclaration de l itérateur, nécessaire dans ce cas. Il permet de signifier au compilateur que le type de l itérateur sera décidé à l utilisation. Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.) Génie Logiciel I Filière M.A.M. 2ème année - 08/09 37 / 37

Introduction à la STL (en C++)

Introduction à la STL (en C++) Licence Sciences, Technologies, Santé Université de Perpignan Via Domitia Semestre 5 (L3) - Mention Mathématiques, Informatique Année universitaire 2012/2013 Programmation Orientée Objet Introduction à

Plus en détail

Claude Delannoy C++ pour les programmeursc. Groupe Eyrolles, 2007, pour la nouvelle présentation (nouveau titre), ISBN : 978-2-212-12231-2

Claude Delannoy C++ pour les programmeursc. Groupe Eyrolles, 2007, pour la nouvelle présentation (nouveau titre), ISBN : 978-2-212-12231-2 Claude Delannoy C++ pour les programmeursc Groupe Eyrolles, 2007, pour la nouvelle présentation (nouveau titre), ISBN : 978-2-212-12231-2 18 Généralités sur la bibliothèque standard Comme celle du C, la

Plus en détail

Génie Logiciel I. Cours III - Conversion, opérateurs et exceptions. Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J.

Génie Logiciel I. Cours III - Conversion, opérateurs et exceptions. Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Génie Logiciel I Cours III - Conversion, opérateurs et exceptions Nicolas Kielbasiewicz C.D.C.S.P./I.S.T.I.L./I.C.J. Filière M.A.M. 2ème année - 08/09 Nicolas Kielbasiewicz (C.D.C.S.P./I.S.T.I.L./I.C.J.)

Plus en détail

GL / C++ Chapitre 7. Lien Dynamique Méthodes Virtuelles

GL / C++ Chapitre 7. Lien Dynamique Méthodes Virtuelles GL / C++ Chapitre 7 Lien Dynamique Méthodes Virtuelles 1. Pointeur sur un objet d'une classe dérivée Considérons les classes écrites précédemment : Personne Etudiant // dérive de personne Salarie // dérive

Plus en détail

Informatique III: Programmation en C++

Informatique III: Programmation en C++ Rappel: fstream Informatique III: Programmation en C++ void open(const char *nom fichier, openmode mode) ouvre le fichiers nom fichier dans le mode mode (ifstream: par défaut en lecture, ofstream: par

Plus en détail

Les conteneurs STL C++

Les conteneurs STL C++ Les conteneurs STL C++ 2014 tv - v.1.0 Sommaire La librairie standard C++ 2 Notion de conteneurs......................................... 2 Notion de complexité.........................................

Plus en détail

Entraînement au concours ACM-ICPC

Entraînement au concours ACM-ICPC Entraînement au concours ACM-ICPC Conteneurs des bibliothèques standard C++ et Java Page 1 / 23 Plan Généralités Collections de base Collections à usage plus rare Page 2 / 23 Collections Les collections

Plus en détail

TP Interface graphique et C++ numéro 1

TP Interface graphique et C++ numéro 1 TP Interface graphique et C++ numéro 1 Master IGC - 1 re année année 2010-2011 Ce premier TP a pour objectif de vous familiariser avec le compilateur C++, les entréessorties du langage et l utilisation

Plus en détail

Déclaration et Implémentation d'une classe

Déclaration et Implémentation d'une classe Définir et Instancier une classe en Java Déclaration et Implémentation d'une classe En algorithmique (comme en C++ la plupart du temps), l'écriture du corps des méthodes (implémentation) se fait après

Plus en détail

Construction et destruction des objets de vie des objets Objets composites Tableaux d'objets Copie (Initialisation et affectation) des objets

Construction et destruction des objets de vie des objets Objets composites Tableaux d'objets Copie (Initialisation et affectation) des objets Construction et destruction des objets Durée de vie des objets Objets composites Tableaux d'objets Copie (Initialisation et affectation) des objets Initialisation des objets Constructeur par recopieinit

Plus en détail

Analyse de la complexité algorithmique (1)

Analyse de la complexité algorithmique (1) Analyse de la complexité algorithmique (1) L analyse de la complexité telle que nous l avons vue jusqu à présent nous a essentiellement servi à déterminer si un problème est ou non facile (i.e. soluble

Plus en détail

Expressions, types et variables en Python

Expressions, types et variables en Python Expressions, types et variables en Python 2015-08-26 1 Expressions Les valeurs désignent les données manipulées par un algorithme ou une fonction. Une valeur peut ainsi être : un nombre, un caractère,

Plus en détail

L1 Informatique Université Paris 8-2010-2011 Programmation Impérative I Rim Chaabane rchaabane@ai.univ-paris8.fr - Cours 6 - Les pointeurs

L1 Informatique Université Paris 8-2010-2011 Programmation Impérative I Rim Chaabane rchaabane@ai.univ-paris8.fr - Cours 6 - Les pointeurs Les pointeurs Le langage C permet de manipuler des adresses d objets ou de fonctions par le biais de pointeurs. Pour ce faire on peut désigner des variables dites de type pointeur, destinées à contenir

Plus en détail

Algorithmique et Structures de Données

Algorithmique et Structures de Données 1.1 Algorithmique et Structures de Données Jean-Charles Régin Licence Informatique 2ème année 1.2 Itérations Jean-Charles Régin Licence Informatique 2ème année Itération : définition 3 En informatique,

Plus en détail

Concevoir un conteneur Exercice

Concevoir un conteneur Exercice Concevoir un conteneur Exercice Les conteneurs standards tels que std::vector respectent un ensemble de contraintes, que ce soit du point de vue des opérations, des noms ou de la rigueur. Pour nous familiariser

Plus en détail

Programmation C++ (débutant)/les tableaux statiques

Programmation C++ (débutant)/les tableaux statiques Programmation C++ (débutant)/les tableaux statiques 1 Programmation C++ (débutant)/les tableaux statiques Le cours du chapitre 6 : les tableaux statiques Les tableaux Une variable entière de type int ne

Plus en détail

LO43 : Bases fondamentales de la programmation orientée objet

LO43 : Bases fondamentales de la programmation orientée objet LO43 : Bases fondamentales de la programmation orientée objet Langage C++ Franck GECHTER franck.gechter@utbm.fr Template La Conception Orientée Objet, Liaison Statique et Liaison Dynamique Template La

Plus en détail

3 Lien entre pointeurs et tableaux.

3 Lien entre pointeurs et tableaux. programme sont dit dynamiques. On se limite ici aux tableaux statiques à une seule dimension, analogue aux vecteurs manipulés en mathématiques. Ils se déclarent sous la forme : type_d_élément variable_tableau[taille];

Plus en détail

FONCTIONS DE TRAITEMENT} COUNT

FONCTIONS DE TRAITEMENT} COUNT Nom Prénom Promotion Date Buhl Damien Année 1 Groupe 2 21 Janvier 2007 CER Prosit n 22 Mots-Clés : - Requête/Langage SQL Le langage SQL (Structured Query Language) est un langage de requêtes, il permet

Plus en détail

Premiers exemples de traitements

Premiers exemples de traitements #include #include Premiers exemples de traitements void main() float b(0.0); float c(0.0); float delta(0.0); cin >> b >> c; delta = b*b - 4*c; if (delta < 0.0) cout

Plus en détail

Introduction au Logiciel GAMS (General Algebraic Modeling System)

Introduction au Logiciel GAMS (General Algebraic Modeling System) Introduction au Logiciel GAMS (General Algebraic Modeling System) J.-M. Reneaume SOMMAIRE A. INTRODUCTION... 1 B. DESCRIPTION DU MODELE... 3 1. Structure générale du modèle... 3 a) Structure du fichier

Plus en détail

RAPPELS ET COMPLÉMENTS CALCULATOIRES

RAPPELS ET COMPLÉMENTS CALCULATOIRES RAPPELS ET COMPLÉMENTS CALCULATOIRES ENSEMBLES DE NOMBRES ENSEMBLES,,,ET: On rappelle que : désigne l ensembleprivé de 0 idem pour, et, + désigne l ensemble des réels positifs ou nuls et l ensemble des

Plus en détail

Objectifs. Pointeurs et tableaux. Arithmétique des pointeurs et sizeof. sizeof. Exemple : liste chaînées. Cast. Débordement de tampons

Objectifs. Pointeurs et tableaux. Arithmétique des pointeurs et sizeof. sizeof. Exemple : liste chaînées. Cast. Débordement de tampons du cours d aujourd hui Programmation «orientée système» LANGAGE C POINTEURS (5/5) des pointeurs Complément (et mise en garde) sur Exemple pratique : listes Forçage de type (casting) Laboratoire d Intelligence

Plus en détail

L3 Info & Miage. TP-Projet SGF

L3 Info & Miage. TP-Projet SGF TP-Projet SGF 1. Introduction L objectif de ce mini-projet est de réaliser un Système de Gestion de Fichiers simplifié capable de gérer des accès à des fichiers séquentiels de type flot. L idée est ici

Plus en détail

Les Tables de Hachage

Les Tables de Hachage NICOD JEAN-MARC Licence 3 Informatique Université de Franche-Comté UFR des Sciences et Techniques septembre 2007 NICOD JEAN-MARC 1 / 34 Référence Tables à adressage directe Thomas H. Cormen, Charles E.

Plus en détail

C++ / MC-II1 - Cours n o 3 Allocation Mémoire et Constructeurs

C++ / MC-II1 - Cours n o 3 Allocation Mémoire et Constructeurs C++ / MC-II1 - Cours n o 3 Allocation Mémoire et Constructeurs Sebastien.Kramm@univ-rouen.fr IUT GEII Rouen 2010-2011 S. Kramm (IUT Rouen) MCII1 - Cours 3 2010-2011 1 / 47 Sommaire 1 Rappels de C et définitions

Plus en détail

Au menu. Cours 7: Classes Probabilistes. Application : Calcul de la médiane. Sous menu. Retours sur quelques algorithmes.

Au menu. Cours 7: Classes Probabilistes. Application : Calcul de la médiane. Sous menu. Retours sur quelques algorithmes. Au menu Cours 7: Classes Probabilistes Olivier Bournez bournez@lix.polytechnique.fr LIX, Ecole Polytechnique Retours sur quelques algorithmes Quelques résultats INF561 Algorithmes et Complexité 1 2 Sous

Plus en détail

Analyse lexicale 2014-2015

Analyse lexicale 2014-2015 Analyse (lexicale, syntaxique) L3 MIAGE Analyse lexicale Université de Lille, France 2014-2015 1 Rappels Rôle de l analyse lexicale Outils 2 Mise en oeuvre Lexème Vers l analyseur syntaxique Codage d un

Plus en détail

Génie Logiciel Industriel - Travaux pratiques

Génie Logiciel Industriel - Travaux pratiques - Travaux pratiques TP1 : Recherche par dichotomie I. Introduction. L objectif de ce TP est de mettre en pratique des notions de base du langage C (entrées/sorties, structure de contrôle, fonctions, ).

Plus en détail

S.T.S. Informatique et Réseaux pour l'industrie et les Services techniques STL. Standard Template Library : Les conteneurs

S.T.S. Informatique et Réseaux pour l'industrie et les Services techniques STL. Standard Template Library : Les conteneurs S.T.S. Informatique et Réseaux pour l'industrie et les Services techniques STL Standard Template Library : Les conteneurs Table des matières 1GÉNÉRALITÉS : FONCTIONNALITÉ D'UN CONTENEUR...2 2LES TYPES

Plus en détail

Programmation : Exercices

Programmation : Exercices Programmation : Exercices IUT de Villetaneuse R&T 1 ère année Laure Petrucci 6 novembre 2007 1 Premiers programmes Exercice 1.1 : Machine à dessiner On souhaite écrire un programme pour afficher des dessins.

Plus en détail

Tableaux dynamiques avec vector

Tableaux dynamiques avec vector Tableaux dynamiques avec vector Tableaux statiques Les tableaux que nous avons vus jusqu'ici sont des tableaux statiques: int tab[3]; Cette forme de tableaux vient du langage C, et est encore très utilisée.

Plus en détail

Catégories, extensions et sécurité

Catégories, extensions et sécurité 11 Catégories, extensions et sécurité Au sommaire de ce chapitre Catégories Extensions Contrôle des accès aux variables d instance Contrôle des accès aux méthodes Espaces de noms Sécurité Appeler des fonctions

Plus en détail

CHAPITRE 3 : Types de base, Opérateurs et Expressions

CHAPITRE 3 : Types de base, Opérateurs et Expressions CHAPITRE 3 : Types de base, Opérateurs et Expressions 1. Types simples Un type définit l'ensemble des valeurs que peut prendre une variable, le nombre d'octets à réserver en mémoire et les opérateurs que

Plus en détail

STL : le conteneur «Vector»

STL : le conteneur «Vector» STL : le conteneur «Vector» 1 LE CONTENEUR VECTOR... 1 1.1 DECLARER UN VECTOR : VECTOR IDENTIFIANT... 1 1.2 METHODES ET OPERATEURS S APPLIQUANT AU VECTOR... 1 2 ACCES AUX OBJETS ET ITERATEURS...

Plus en détail

Programmation Orientée Objet C++ Cours 1

Programmation Orientée Objet C++ Cours 1 Programmation Orientée Objet C++ Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Université Bordeaux 1 Bât A33 - Bur 265 Ouvrages de référence B. W. Kernighan et D. M. Ritchie - Le langage C : Norme

Plus en détail

Master Informatique Fondamentale - M1 Compilation

Master Informatique Fondamentale - M1 Compilation Master Informatique Fondamentale - M1 Compilation Systèmes de types Paul Feautrier ENS de Lyon Paul.Feautrier@ens-lyon.fr perso.ens-lyon.fr/paul.feautrier 8 février 2007 1 / 20 Système de types Un type

Plus en détail

Procédures et fonctions

Procédures et fonctions Chapitre 5 Procédures et fonctions 5.1 Introduction Considérons le programme suivant, dont le but est d inverser les éléments d un tableau : public class InversionTableau1 { int t[]= {8, 2, 1, 23; Terminal.ecrireStringln("Tableau

Plus en détail

Initialisation des attributs (1)

Initialisation des attributs (1) Initialisation des attributs (1) Initialiser les attributs d une instance en leur affectant individuellement une valeur, après l instanciation, n est pas une technique satisfaisante: a) elle est fastidieuse,

Plus en détail

renforcer le contrôle de type :

renforcer le contrôle de type : renforcer le contrôle de type : définitions, prototypes de fonctions surcharge références conversions de void * préférer le compilateur au préprocesseur considérer les entrées/sorties opérations abstraites

Plus en détail

Programmation Répartie - Langage C

Programmation Répartie - Langage C frederic.guinand@univ-lehavre.fr IUT Le Havre Plan les bases quelques rappels de langage C les structures de contrôle conditionnelles les structures de contrôle itératives les tableaux les pointeurs les

Plus en détail

Fiche de révisions - Algorithmique

Fiche de révisions - Algorithmique Fiche de révisions - Algorithmique Rédigé par : Jimmy Paquereau 1. Généralités Algorithme : un algorithme est la description d une procédure à suivre afin de résoudre un problème donné. Il n est pas nécessairement

Plus en détail

MÉRÉ Aurélien FIIFO1. Pathfinder

MÉRÉ Aurélien FIIFO1. Pathfinder MÉRÉ Aurélien FIIFO1 AMC Pathfinder 1 Sommaire Préambule... 3 Modélisation de l espace... 4 Modélisation des cases δ, α... 4 Interface en mode texte... 5 Modélisation du robot... 8 1 ) Le type Robot...

Plus en détail

PC* Structure de pile

PC* Structure de pile Structure de pile I. Définition........................................... 2 I.1 Introduction..................................... 2 I.2 Opérations caractérisant une structure de pile...................

Plus en détail

USTL - Licence ST-A 1ère année 2005-2006 Initiation à la programmation. CTD : Variables et types de données

USTL - Licence ST-A 1ère année 2005-2006 Initiation à la programmation. CTD : Variables et types de données USTL - Licence ST-A 1ère année 2005-2006 Initiation à la programmation 1 Motivation 1.1 Un problème CTD : Variables et types de données État initial : Tas 1 un nombre quelconque de cartes, les autres tas

Plus en détail

Licence 2 MIEE Première session 2013-2014. GEN : Génie Logiciel

Licence 2 MIEE Première session 2013-2014. GEN : Génie Logiciel Licence 2 MIEE Première session 2013-2014 Le barème est donné à titre indicatif. GEN : Génie Logiciel 2 heures - Documents autorisés Question 1 (8 points). Vous indiquerez vos réponses sur votre copie

Plus en détail

Programmation objet en Java.

Programmation objet en Java. Programmation objet en Java. Didier Rémy 2001-2002 http://cristal.inria.fr/ remy/mot/7/ http://www.enseignement.polytechnique.fr/profs/informatique/didier.remy/mot/7/ Cours Exercices Slide 1 1. Classes,

Plus en détail

Cours d informatique du 17/11/2009 A. Rappels sur les boucles

Cours d informatique du 17/11/2009 A. Rappels sur les boucles Cours d informatique du 17/11/2009 A. Rappels sur les boucles 1) Rappel sur les invariants de boucle : L invariant de boucle est un outil pour concevoir cette boucle. Il peut exister plusieurs invariants

Plus en détail

Rapport de projet. Animation de diagrammes d'état - CHAMPION Adrien - ETIENNE Thibaut RIZZI Thibaut 1A - INFO - Groupe EF - G36.

Rapport de projet. Animation de diagrammes d'état - CHAMPION Adrien - ETIENNE Thibaut RIZZI Thibaut 1A - INFO - Groupe EF - G36. Rapport de projet Animation de diagrammes d'état - CHAMPION Adrien - ETIENNE Thibaut RIZZI Thibaut 1A - INFO - Groupe EF - G36 Juin 2008 2 Table des matières 1 Introduction...5 1.1 - Objectif...5 1.2 Choix

Plus en détail

Cours SI6. Python POO par l exemple

Cours SI6. Python POO par l exemple Cours SI6 Python POO par l exemple Objet créé à partir d un moule Moule -> une classe Objet = instance d une classe Classe= Structure -> attributs Comportement -> méthodes Principe de base : Instanciation

Plus en détail

Critères de sélection pour remplir un panier de lecteurs Explications

Critères de sélection pour remplir un panier de lecteurs Explications A.-M. Cubat Onglet Circulation Paniers de lecteurs Page 1 Critères de sélection pour remplir un panier de lecteurs Explications 1. au moins un emprunt depuis jusqu à aujourd hui 2. au moins un emprunt

Plus en détail

Introduction aux listes. Cours numéro 5 : Les listes LI213 Types et Structures de données. Les listes simplement chaînées

Introduction aux listes. Cours numéro 5 : Les listes LI213 Types et Structures de données. Les listes simplement chaînées Introduction aux s LI Types et Structures de données Liste : définition Collection ordonnée d éléments [x ;...; x n ] (au moins) accessibles l un après l autre de x jusqu à x n. Exemple : dans la [ ; ;5

Plus en détail

Cours/TD n 3bis : les boucles

Cours/TD n 3bis : les boucles Cours/TD n 3bis : les boucles Découpons le problème Nous avons plusieurs utilisations des boucles C est précisément ce qui rend difficile leur création. Vu la difficulté, nous allons séparer les différentes

Plus en détail

De l art d écrire des programmes qui résolvent des problèmes que l on ne sait pas résoudre soi-même!

De l art d écrire des programmes qui résolvent des problèmes que l on ne sait pas résoudre soi-même! Chapitre 1 La récursivité De l art d écrire des programmes qui résolvent des problèmes que l on ne sait pas résoudre soi-même! 1.1 Définition et types de récursivité Définition 1 (Définition récursive,

Plus en détail

Reprise en main du programme d Affectation de transport en commun

Reprise en main du programme d Affectation de transport en commun Reprise en main du programme d Affectation de transport en commun Modifications indispensables pour bonne compilation : Utilisation de visual C++ express pour avoir accès à un débuggeur et un compilateur

Plus en détail

Compteurs, variables et afficheurs dans Automgen

Compteurs, variables et afficheurs dans Automgen Section : S Option : Sciences de l ingénieur Discipline : Génie Électrique Compteurs, variables et afficheurs dans Automgen Domaine d application : Traitement programmé de l information Type de document

Plus en détail

Cours Info - 8. Fonctions & Modularité. D.Malka MPSI 2015-2016. D.Malka Cours Info - 8 MPSI 2015-2016 1 / 40

Cours Info - 8. Fonctions & Modularité. D.Malka MPSI 2015-2016. D.Malka Cours Info - 8 MPSI 2015-2016 1 / 40 Cours Info - 8 Fonctions & Modularité D.Malka MPSI 2015-2016 D.Malka Cours Info - 8 MPSI 2015-2016 1 / 40 Sommaire Sommaire 1 Intérêt des fonctions 2 Déclaration d une fonction 3 Appel d une fonction 4

Plus en détail

Organisation des données et structures de stockage

Organisation des données et structures de stockage ING2 - ING3 Nvx 2009-2010 Organisation des données et structures de stockage I. Stockage de l information en C Ce chapitre rappelle brièvement et complète certaines notions de base vues en première année

Plus en détail

Arnaud DABOUIS Vincent HURBOURQUE IMAC 1. PROJET C : Traitement d images

Arnaud DABOUIS Vincent HURBOURQUE IMAC 1. PROJET C : Traitement d images PROJET C : Traitement d images 1 SOMMAIRE 1) Schéma et structure a) Schéma de la structure b) Les structures utilisées La structure image La structure calque La structure LUT La structure Historique et

Plus en détail

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon

3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 3ETI, Examen [CSC2] Developpement Logiciel en C CPE Lyon 2013-2014 (1ere session) durée 3h Tous documents et calculatrices autorisés. Répondez aux questions sur une copie séparée Le sujet comporte 12 pages

Plus en détail

Présentation du programme d informatique

Présentation du programme d informatique Présentation du programme d informatique UPS 31 mai 2015 Table des matières 1 Introduction 2 1.1 Présentation.................................. 2 1.2 Représentation des nombres.........................

Plus en détail

TP6: Introduction à Linux: Shell scripting

TP6: Introduction à Linux: Shell scripting INFO-F-201 Systèmes d exploitations 1 TP6: Introduction à Linux: Shell scripting avec l accord de Sébastien Collette Résumé Suite à la séance précédente sur l utilisation du shell bash, nous allons voir

Plus en détail

Références et héritage

Références et héritage Références et héritage Contraintes référentielles pour assurer la consistance d un schéma de données Utilisation (pervertie) de l héritage objets pour faire du polymorphisme et assurer la cohérence d un

Plus en détail

Introduction à la théorie des jeux à deux

Introduction à la théorie des jeux à deux Introduction à la théorie des jeux à deux Table des matières 1 Arbres d évaluation 2 A) Minimax...................................... 2 B) α-β......................................... 3 2 Variantes et

Plus en détail

Les Fichiers en Pascal

Les Fichiers en Pascal Les Fichiers en Pascal Université de Toulouse II DEUG MASS Année 2004-2005 Patricia PASCAL < ppascal@laas.fr > - Page 1 / 31 - Plan du cours sur les fichiers les fichiers, pourquoi, comment? (p3) les différents

Plus en détail

Base de données. Ensuite, on peut utiliser les fonctions length et setlength pour respectivement lire et changer la taille du tableau.

Base de données. Ensuite, on peut utiliser les fonctions length et setlength pour respectivement lire et changer la taille du tableau. Base de données Nouvelles notions Voici quelques nouvelles fonctionnalités du langage dont vous aurez à vous servir. Prenez le temps de bien comprendre et tester les exemples. Tableaux à taille dynamique

Plus en détail

Le problème des multiplications matricielles enchaînées peut être énoncé comme suit : étant

Le problème des multiplications matricielles enchaînées peut être énoncé comme suit : étant Licence informatique - L Année 0/0 Conception d algorithmes et applications (LI) COURS Résumé. Dans cette cinquième séance, nous continuons l exploration des algorithmes de type Programmation Dynamique.

Plus en détail

Janvier 2015. Licence 3 info Université de Lille 1. Vers C++ venant de C et de Java. Adrien Poteaux et Alexandre Sedoglavic.

Janvier 2015. Licence 3 info Université de Lille 1. Vers C++ venant de C et de Java. Adrien Poteaux et Alexandre Sedoglavic. Vers C++ venant Licence 3 info Université de Lille 1 Janvier 2015 Généralités Le C++ est un langage de programmation développé à partir de 1980 par Bjarne Stroustrup. Nous utiliserons la normalisation

Plus en détail

18 h CM (F. Maurel) + 16 h TD/TP (F. Maurel / T. Roy)

18 h CM (F. Maurel) + 16 h TD/TP (F. Maurel / T. Roy) Présentation cours 18 h CM (F. Maurel) + 16 h TD/TP (F. Maurel / T. Roy) 5/6 h Python 2,5/2 h Introduction à l'ihm (démarche participative centrée utilisateur) + Mise en place des groupes 2,5/2 h : Méthodes

Plus en détail

Java : Programmation Impérative

Java : Programmation Impérative 1 Java : Programmation Impérative Résumé du cours précédent (I11) Paradigme impératif Algorithmique simple Découpage fonctionnel Qu est-ce qu un programme informatique? / un langage de programmation? /

Plus en détail

VII COMMANDES/LIVRAISONS 1 Création-Modification du bon de commande 2 Création-Modification du détail du bon de commande

VII COMMANDES/LIVRAISONS 1 Création-Modification du bon de commande 2 Création-Modification du détail du bon de commande INTRODUCTION I - FONCTIONNALITES II LES TABLES III LE FICHIER DES ENGINS 1 Création-Modification d un engin 2 Suppression d un engin IV LES ORDRES DE TRAVAIL (OT) 1 Création-Modification du bon de commande

Plus en détail

INF601 : Algorithme et Structure de données

INF601 : Algorithme et Structure de données Cours 2 : TDA Liste B. Jacob IC2/LIUM 15 février 2010 Plan 1 Définition du TDA Liste 2 Réalisation du TDA Liste 3 Type de stockage des éléments 4 Recherche d un élément Dans une liste non triée Dans une

Plus en détail

module SIN21 Rendre un syste me communicant Analyse UML et algorithmie 1 Modification du cahier des charges

module SIN21 Rendre un syste me communicant Analyse UML et algorithmie 1 Modification du cahier des charges Module SIN221 Rendre un syste me communicant Analyse UML et algorithmie Objectifs : Modifier des diagrammes UML suite à la modification du cahier des charges. Caractériser et valider une classe en C++.

Plus en détail

ISMIN 1A Programmation 1 : Examen de programmation C. Réponses. Partie 1. Questions ouvertes

ISMIN 1A Programmation 1 : Examen de programmation C. Réponses. Partie 1. Questions ouvertes ISMIN 1A Programmation 1 : Examen de programmation C Réponses Partie 1. Questions ouvertes 1. Soit la déclaration suivante, char tab[] = "". Que contient le tableau tab? Réponse : tab[0] = \0. tab est

Plus en détail

Excel avancé. Frédéric Gava (MCF) gava@univ-paris12.fr

Excel avancé. Frédéric Gava (MCF) gava@univ-paris12.fr Excel avancé Frédéric Gava (MCF) gava@univ-paris12.fr LACL, bâtiment P2 du CMC, bureau 221 Université de Paris XII Val-de-Marne 61 avenue du Général de Gaulle 94010 Créteil cedex Rappels et compléments

Plus en détail

Les systèmes de fichiers

Les systèmes de fichiers Les systèmes de fichiers I Généralités Fichiers : motivation Un disques est une collection de blocs adressables qui peuvent être lus et écrits. Pour utiliser un disque, il faut décider où y placer l information

Plus en détail

Les sous-programmes : exercices résolus en C Corrigé

Les sous-programmes : exercices résolus en C Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Exercices résolus en C, Semaine 3 avril mai 2013 Corrigé Objectifs Savoir écrire des sous-programmes ; Comprendre les modes de passage de paramètres ; Faire la

Plus en détail

SUJET + CORRIGE. Avertissement

SUJET + CORRIGE. Avertissement Année : 2012/2013 Semestre 2 DEVUIP Service scolarité PARCOURS : Licence LIMI201 & LIMI211 UE J1MI2013 : Algorithmes et Programmes Épreuve : Devoir Surveillé Terminal Date : Lundi 10 juin 2013 Heure :

Plus en détail

3 Pseudo-code et algorithmes 26

3 Pseudo-code et algorithmes 26 TABLE DES MATIÈRES 1 Introduction à la programmation 1 1.1 Programme et langage de programmation 2 1.2 Étapes du développement des programmes 2 1.3 Notion d'algorithme 6 2 Notions de base 9 2.1 Constantes

Plus en détail

Manipulations 2 Types agrégés : les tableaux en C... 2 Conteneur : les tableaux en C++... 7 Synonyme de type... 9

Manipulations 2 Types agrégés : les tableaux en C... 2 Conteneur : les tableaux en C++... 7 Synonyme de type... 9 TP Développement n 4 2012 tv - v.1.0 Sommaire Manipulations 2 Types agrégés : les tableaux en C.................................. 2 Conteneur : les tableaux en C++..................................

Plus en détail

Algorithmique Programmation Objet Python

Algorithmique Programmation Objet Python Algorithmique Programmation Objet Python Andrea G. B. Tettamanzi Université de Nice Sophia Antipolis Département Informatique andrea.tettamanzi@unice.fr Andrea G. B. Tettamanzi, 2015 1 CM - Séance 7 Listes

Plus en détail

Acquérir une image à partir d un scanner avec la bibliothèque de fonctions WIAAUT.DLL avec Delphi Table des matières

Acquérir une image à partir d un scanner avec la bibliothèque de fonctions WIAAUT.DLL avec Delphi Table des matières Acquérir une image à partir d un scanner avec la bibliothèque de fonctions WIAAUT.DLL avec Delphi Table des matières Acquérir une image à partir d un scanner avec la bibliothèque de fonctions WIAAUT.DLL...

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

Didacticiel Dynafleet Online

Didacticiel Dynafleet Online Didacticiel Dynafleet Online Nouvelles fonctionnalités de la version 8 Dynafleet Online En bref, le contenu est le suivant: - Lancement possible de plusieurs instances de l'application (Multi-écran) -

Plus en détail

Département d informatique Professeur : Clermont Dupuis Université Laval Bureau : 3976. IFT-19946 Programmation orientée objet. Examen partiel # 1

Département d informatique Professeur : Clermont Dupuis Université Laval Bureau : 3976. IFT-19946 Programmation orientée objet. Examen partiel # 1 Département d informatique Professeur : Clermont Dupuis Université Laval Bureau : 3976 Date : 22 octobre 2001 IFT-19946 Programmation orientée objet Examen partiel # 1 Question # 1. (2 points) Pour développer

Plus en détail

1 Les arbres binaires en Java

1 Les arbres binaires en Java Université de Nice-Sophia Antipolis Deug MIAS-MI 1 Algorithmique & Programmation 2002 2003 TP N 10 Arbres binaires Buts : structuration des arbres binaires en Java. classes internes. objets de parcours.

Plus en détail

INF1010 Examen final Hiver 2006

INF1010 Examen final Hiver 2006 INF1010 Examen final Hiver 2006 Question 1 Allocation dynamique ou polymorphisme (1 point) Répondez à une des questions suivantes (si vous décidez de répondre aux deux, vous recevrez le maximum des deux

Plus en détail

TUTORIAL : Créer le setup d un programme VB 6

TUTORIAL : Créer le setup d un programme VB 6 TUTORIAL : Créer le setup d un programme VB 6 NIVEAU : INITIES Pré requis pour comprendre ce tutorial : - Connaître les fichiers nécessaires à l installation d un programme VB - Connaître le système de

Plus en détail

Algorithmique - Programmation 1. Cours 4

Algorithmique - Programmation 1. Cours 4 Algorithmique - Programmation 1 Cours 4 Université Henri Poincaré CESS Epinal Automne 2008 1/ 23 Plan Rappels : Types en Caml Rappels: Types en Caml Polymorphisme Le filtrage Le type produit cartésien

Plus en détail

Créer une simple application Java avec ECLIPSE. Par Ahcène BOUNCEUR

Créer une simple application Java avec ECLIPSE. Par Ahcène BOUNCEUR Créer une simple application Java avec ECLIPSE Par Ahcène BOUNCEUR Janvier 2005 INTRODUCTION Dans cet exemple nous allons vous montrer comment peut-on créer une simple application Java en utilisant l IDE

Plus en détail

TD n 8 Word : Autres fonctionnalités avancées

TD n 8 Word : Autres fonctionnalités avancées TD n 8 Word : Autres fonctionnalités avancées 1. Diviser un document en sections 1.1. Définition Un document Word peut être divisé en section. Une section est une partie de ce document qui possède une

Plus en détail

Cours C++ Lorsque je lance Dev C++, il apparaître l'écran ci-contre.

Cours C++ Lorsque je lance Dev C++, il apparaître l'écran ci-contre. Cours C++ Définition : Le langage C est un langage de programmation inventé par MM. Kernighan et Ritchie au début des années 70. Au début des années 90, Bjarne Stroustrup fait évoluer le langage vers le

Plus en détail

ENSTA : cours IN204 Introduction à JAVA et UML

ENSTA : cours IN204 Introduction à JAVA et UML ENSTA : cours IN204 Introduction à JAVA et UML Thierry Bommart DASSAULT AVIATION DGT/DPR/EOS thierry.bommart@dassault-aviation.fr 01.47.11.54.93 Page : 1 Plan Ecole Nationale Supérieure de Techniques Avancées

Plus en détail

3 - Boucles for et Séquences (range, listes, chaînes de caractères)

3 - Boucles for et Séquences (range, listes, chaînes de caractères) 3 - Boucles for et Séquences (range, listes, chaînes de caractères) Exercices et programmes à rendre dans le compte-rendu de TP : ex 1 (TP3_1), ex 2 (TP3_2), ex 3 (TP3_3), ex 5 (TP3_5), ex 6 (TP3_6), ex

Plus en détail

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,

Plus en détail

Programmation orientée objet TP 1 Prise en main de l environnement Java

Programmation orientée objet TP 1 Prise en main de l environnement Java Programmation orientée objet TP 1 L2 MPCIE Prise en main de l environnement Java Exercice 1 Nous désirons développer un programme pour la gestion (très simplifiée) d'un parc de véhicules destinés à la

Plus en détail

La programmation Impérative par le Langage C

La programmation Impérative par le Langage C La programmation Impérative par le Langage C 1. Introduction 1.1 Qu est-ce que la programmation impérative? Un programme est constitué de plusieurs lignes d instructions. Chaque instruction permet d effectuer

Plus en détail

L AUTOMATISATION DU FONCTIONNEMENT D UNE BASE DE DONNÉES

L AUTOMATISATION DU FONCTIONNEMENT D UNE BASE DE DONNÉES 1 L AUTOMATISATION DU FONCTIONNEMENT D UNE BASE DE DONNÉES Dans ce chapitre, nous allons automatiser le fonctionnement de la base de données. Jusqu à présent, nous avons créé différents objets, mais maintenant

Plus en détail

AURELIE Gestion Commerciale Mode d emploi pour états paramétrables

AURELIE Gestion Commerciale Mode d emploi pour états paramétrables Table des matières 1/ But :... 3 2/ Pré-requis :... 3 3/ Comment y aller?... 3 4/ Créer un état :... 3 4.1/ Décomposition de l état :... 3 4.2/ Variables à éditer :... 4 4.2.1/ Ligne :... 4 4.2.2/ Variable

Plus en détail

Cours Langage C/C++ Mémoire et allocation dynamique

Cours Langage C/C++ Mémoire et allocation dynamique Cours Langage C/C++ Mémoire et allocation dynamique Thierry Vaira BTS IRIS Avignon tvaira@free.fr v0.1 La pile et le tas La mémoire La mémoire dans un ordinateur est une succession d octets (soit 8 bits),

Plus en détail