DAIGL – Tableaux "deux dimensions" Tableaux "deux dimensions" Jusqu'à présent, tous les tableaux manipulés étaient des tableaux constitués d'un ensemble de valeurs toutes de type identique (entier, réel, caractère... type structuré). Un tableau peut aussi contenir des tableaux (c.à.d. que chaque élément d'un tableau est aussi un tableau). On parle alors de tableau "deux dimensions" (2D). Ce tableau à deux dimensions, comme tout tableau, est une variable possédant un nom unique, dans laquelle chaque élément est non plus repéré par un seul indice, mais par deux indices (numéro de ligne et numéro de colonne) permettant d'indiquer sa position. La dimension d'un tableau correspond au nombre d'informations nécessaires à la localisation d'un élément. Exemple : La variable CoursActions2008 permet de mémoriser le cours de l'action d'entreprises informatiques sur l'année 2008. Les valeurs sont exprimées en dollars US. Le numéro de colonnes correspondent aux numéros des mois (1 pour Janvier, 2 pour Février...) alors que les numéros de lignes correspondent à des identifiants attribués aux entreprises (1 pour Google, 2 pour eBay, 3 pour SUN et 4 pour Yahoo). 1 2 3 4 5 6 7 8 9 10 11 12 1 687,52 511,33 441,58 468,34 608,57 588,49 535,32 460,79 468,14 414,27 366,28 263,19 2 33,69 28,57 26,87 31,58 32,78 29,98 27,41 24,87 24,89 22,68 15,74 11,83 3 17,01 17,43 17,25 15,88 12,98 13,01 10,85 9,24 9,56 7,12 4,85 3,14 4 23,57 19,25 27,88 28,01 27,15 26,58 20,75 19,63 18,89 16,47 12,87 9,11 La numérotation des lignes et des colonnes utilisée ci-dessus correspond à la numérotation algorithmique. En Python, la numérotation des lignes et des colonnes commencent à 0. 1- Déclaration [Algo] Syntaxe : nom_variable[nombre_lignes,nombre_colonnes]:type nombre_lignes et nombre_colonnes sont de type Entier. [Algo] Exemple : CoursActions2008[4,12]:Réel Et pour Python ? Pour rappel, il n'y a pas de déclaration de variables en Python (tout comme en Perl, en PHP...). 2- Initialisation En Python, il est possible d'implémenter un tableau "deux dimensions" à l'aide... ● ● ● ● d'une liste de listes, d'une liste de tuples, d'un tuple de tuples, ou d'un tuple de listes. Exemple : [Algo] CoursActions2008 = ( (687.52,511.33,441.58,468.34,608.57,588.49,535.32,460.79,468.14,414.27,366.28,263.19), (33.69,28.57,26.87,31.58,32.78,29.98,27.41,24.87,24.89,22.68,15.74,11.83), (17.01,17.43,17.25,15.88,12.98,13.01,10.85,9.24,9.56,7.12,4.85,3.14), (23.57,19.25,27.88,28.01,27.15,26.58,20.75,19.63,18.89,16.47,12.87,9.11) ) [Python] CoursActions2008 = [ [687.52,511.33,441.58,468.34,608.57,588.49,535.32,460.79,468.14,414.27,366.28,263.19], [33.69,28.57,26.87,31.58,32.78,29.98,27.41,24.87,24.89,22.68,15.74,11.83], [17.01,17.43,17.25,15.88,12.98,13.01,10.85,9.24,9.56,7.12,4.85,3.14], [23.57,19.25,27.88,28.01,27.15,26.58,20.75,19.63,18.89,16.47,12.87,9.11] ] page 1 DAIGL – Tableaux "deux dimensions" 3- Accès à un élément Comme pour tout tableau, on ne peut pas traiter un tableau "deux dimensions" dans sa totalité, mais seulement élément par élément. Pour accéder à un élément particulier du tableau (écriture ou lecture de la valeur de l'élément), il faut préciser obligatoirement la ligne et la colonne de cet élément. Syntaxe : [Algo] nom_variable[numéro_ligne,numéro_colonne] [Python] nom_variable[numéro_ligne][numéro_colonne] numéro_ligne et numéro_colonne sont de type Entier. Exemple : Cours de l'action eBay (ligne 2) au mois de Mars (colonne 3) de l'année 2008. 1 1 2 3 687,52 511,33 2 4 5 6 7 8 9 10 11 12 468,34 608,57 588,49 535,32 460,79 468,14 414,27 366,28 263,19 26,87 31,58 32,78 29,98 27,41 24,87 24,89 22,68 15,74 11,83 3 17,01 17,43 17,25 15,88 12,98 13,01 10,85 9,24 9,56 7,12 4,85 3,14 4 23,57 19,25 27,88 28,01 27,15 26,58 20,75 19,63 18,89 16,47 12,87 9,11 [Algo] CoursActions2008[2,3] [Python] CoursActions2008[1][2] Pour accéder à l'ensemble des éléments d'un tableau 2D, il faut utiliser deux structures itératives (boucles) imbriquées. ● Une première boucle pour parcourir les lignes, ● Une seconde boucle pour parcourir les colonnes. Exemple : Visualisation des cours [Algo] Variables : action : Entier mois : Entier Début Pour action de 1 à 4 Pour mois de 1 à 12 Afficher(CoursActions2008[action,mois]) FinPour FinPour Fin [Python] for action in range(4) : for mois in range(12) : print CoursActions2008[action][mois] 4- Tableau, ligne et élément Dans l'exemple proposé... ● ● CoursActions2008[1][2] (CoursActions2008[0][1] en Python) représente la valeur de l'élément (cellule) qui se trouve en ligne 1 (0 en Python) et en colonne 2 (1 en Python), c.à.d. la valeur de l'action Google au mois de Février de l'année 2008. CoursActions2008 représente l'ensemble des données. page 2 DAIGL – Tableaux "deux dimensions" ● CoursActions2008[3] (CoursActions2008[2]en Python) représente la troisième ligne du tableau, c.à.d. l'évolution de l'action SUN au cours des douze mois de l'année 2008. 1 2 3 4 5 6 7 8 9 10 11 12 1 687,52 511,33 441,58 468,34 608,57 588,49 535,32 460,79 468,14 414,27 366,28 263,19 2 33,69 28,57 26,87 31,58 32,78 29,98 27,41 24,87 24,89 22,68 15,74 11,83 3 17,01 17,43 17,25 15,88 12,98 13,01 10,85 9,24 9,56 7,12 4,85 3,14 4 23,57 19,25 27,88 28,01 27,15 26,58 20,75 19,63 18,89 16,47 12,87 9,11 On peut donc écrire... [Python] for ligne in CoursActions2008 : for cours in ligne : print cours 5- Type d'un élément Le type d'un élément d'un tableau peut être un type de base (Entier, Chaîne, Caractère...). Il peut aussi être un type structuré (Date, Etudiant...). Exemple : Bâtiment B du Lycée Louis Armand Ce bâtiment possède un rez-de-chaussée et deux étages. Il y a 10 salles par étage. Chaque salle est caractérisée par la matière qui y est enseignée et par le nombre d'élèves qu'elle peut accueillir (capacité). Le bâtiment peut donc être représenté en mémoire par le tableau BâtB et les salles par des données de type Salle. [Algo] Type Structure Salle ( matière : Chaîne capacité : Entier ) Variable : BâtB[3,10]:Salle Le nombre de lignes correspond au nombre d'étages (rez-de-chaussée compris). La première ligne du tableau correspond au rez-de-chaussée, la deuxième ligne correspond au premier étage et la troisième ligne correspond au second étage. L'affichage de la capacité de la cinquième salle du second étage peut être réalisé par l'instruction... Afficher(BâtB[3,5].capacité) Pour conclure... La dimension d'un tableau ne s'arrête pas à 2. En effet, un tableau peut être de dimension supérieure. Par exemple, un tableau de dimension 3 nommé Espace peut être déclaré de la façon suivante... Espace[3,4,2] : Entier ... et être représenté graphiquement sous la forme d'un cube. Pour accéder à la valeur d'un élément de ce tableau, il nous faut connaître trois informations (d'où "tableau de dimension 3") : le numéro de la ligne, le numéro de la colonne ainsi que la profondeur. Cet élément se trouve en ligne 3, colonne 4 et profondeur 2. Pour accéder à la valeur de cet élément, il suffit donc d'écrire Espace[3,4,2]. page 3