q m la position connue du premier élément,
q x l’indice de la première dimension moins 1,
q y l’indice de la seconde dimension moins 1,
q My la taille maximale de la première dimension.
La position p en mémoire est :
p=m+(x*My)+y
Prenez, d’après le tableau cidessus, l’élément d’indice 3,4 : x vaut 2, y vaut 3, Mx vaut 5 et m vaut 143.
p=143+(2*5)+3=156
Soit un nouveau tableau note2[1..2][1..2][1..3], il pourrait être représenté ainsi :
Pour calculer la position d’un élément d’indice x,y,z avec les mêmes prérequis qu’audessus, avec Mz la taille maximale de la
dimension et My la taille maximale de la dimension y, on obtient la formule suivante :
p=m+(x*My*Mz)+(y*Mz)+z
b. Représentation par référence
La représentation linéaire cidessus est bien pratique pour votre imagination, mais montre ses limites dans certains cas.
Notamment, que se passetil avec les types qui ne sont pas des scalaires ? Prenez l’exemple le plus simple : un tableau de
chaînes de caractères.
Dans la mémoire et comme vu précédemment, une chaîne de caractères est représentée par une suite de valeurs numériques :
les codes ASCII (ou unicode, selon le cas). Le mot "Bonjour" est représenté ainsi :
Sachant qu’on ne connaît pas forcément à l’avance la longueur d’une chaîne de caractères, celleci se termine souvent, et
suivant les langages, par un caractère nul. Aussi en mémoire, vous obtiendrez ceci :
Cette brève étude met en évidence deux problèmes :
q Dans un tableau à une seule dimension, il n’est pas évident de représenter les indices des chaînes de caractères. Une
astuce pourrait consister à rechercher les caractères nuls (0) pour retrouver les indices suivants (le caractère suivant
est le premier de la chaîne d’indice +1). Mais :
q La longueur d’une chaîne de caractères n’étant pas fixe, comment réserver à l’avance l’espace contigu nécessaire au
stockage de n chaînes dans un tableau de n éléments ?
Vous pourriez évidemment contourner ce problème en décrétant de manière totalement arbitraire que les chaînes de
caractères stockées dans votre tableau ont une longueur fixe. Mais quelle perte de place si votre chaîne ne fait que deux
caractères pour deux cents réservés ! Ce n’est pas une solution à retenir.
Pour créer des tableaux à n dimensions quelques langages et non des moindres, utilisent une autre méthode. Pour plus de
clarté, le mieux est de comprendre le principe tout d’abord avec un tableau à une dimension, puis à deux.
Une chaîne d’une longueur de n caractères est en fait bien souvent un tableau à une dimension comportant n+1 indices,
sachant que le dernier indice contiendra un caractère nul. Chaque élément du tableau est le code ASCII (ou unicode)
correspondant au caractère de la position (indice) donnée. Ainsi les variables de type Alphanumérique sont, en fonction du
langage, des artifices ou plutôt des facilités censées simplifier la vie du développeur. Quand vous affectez une chaîne de
caractères à ce type de variable, le langage connaît la longueur de cette chaîne (a="Salut", la longueur de « Salut » est 5) et va
Adr
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
Ind
1,1,1
1,1,2
1,1,3
1,2,1
1,2,2
1,2,3
2,1,1
2,1,2
2,1,3
2,2,1
2,2,2
2,2,3
Val
10
12
14
10
15
9
8
13
7
5
14
20
Lettre
B
o
n
j
o
u
r
ASCII
66
111
110
106
111
117
114
Adresse
1616
1617
1618
1619
1620
1621
1622
1623
Contenu
66
111
110
106
111
117
114
0
- 7 -
© ENI Editions - All rigths reserved - Jonifar lina
101
q x l’indice de la première dimension moins 1,
q y l’indice de la seconde dimension moins 1,
q My la taille maximale de la première dimension.
La position p en mémoire est :
p=m+(x*My)+y
Prenez, d’après le tableau cidessus, l’élément d’indice 3,4 : x vaut 2, y vaut 3, Mx vaut 5 et m vaut 143.
p=143+(2*5)+3=156
Soit un nouveau tableau note2[1..2][1..2][1..3], il pourrait être représenté ainsi :
Pour calculer la position d’un élément d’indice x,y,z avec les mêmes prérequis qu’audessus, avec Mz la taille maximale de la
dimension et My la taille maximale de la dimension y, on obtient la formule suivante :
p=m+(x*My*Mz)+(y*Mz)+z
b. Représentation par référence
La représentation linéaire cidessus est bien pratique pour votre imagination, mais montre ses limites dans certains cas.
Notamment, que se passetil avec les types qui ne sont pas des scalaires ? Prenez l’exemple le plus simple : un tableau de
chaînes de caractères.
Dans la mémoire et comme vu précédemment, une chaîne de caractères est représentée par une suite de valeurs numériques :
les codes ASCII (ou unicode, selon le cas). Le mot "Bonjour" est représenté ainsi :
Sachant qu’on ne connaît pas forcément à l’avance la longueur d’une chaîne de caractères, celleci se termine souvent, et
suivant les langages, par un caractère nul. Aussi en mémoire, vous obtiendrez ceci :
Cette brève étude met en évidence deux problèmes :
q Dans un tableau à une seule dimension, il n’est pas évident de représenter les indices des chaînes de caractères. Une
astuce pourrait consister à rechercher les caractères nuls (0) pour retrouver les indices suivants (le caractère suivant
est le premier de la chaîne d’indice +1). Mais :
q La longueur d’une chaîne de caractères n’étant pas fixe, comment réserver à l’avance l’espace contigu nécessaire au
stockage de n chaînes dans un tableau de n éléments ?
Vous pourriez évidemment contourner ce problème en décrétant de manière totalement arbitraire que les chaînes de
caractères stockées dans votre tableau ont une longueur fixe. Mais quelle perte de place si votre chaîne ne fait que deux
caractères pour deux cents réservés ! Ce n’est pas une solution à retenir.
Pour créer des tableaux à n dimensions quelques langages et non des moindres, utilisent une autre méthode. Pour plus de
clarté, le mieux est de comprendre le principe tout d’abord avec un tableau à une dimension, puis à deux.
Une chaîne d’une longueur de n caractères est en fait bien souvent un tableau à une dimension comportant n+1 indices,
sachant que le dernier indice contiendra un caractère nul. Chaque élément du tableau est le code ASCII (ou unicode)
correspondant au caractère de la position (indice) donnée. Ainsi les variables de type Alphanumérique sont, en fonction du
langage, des artifices ou plutôt des facilités censées simplifier la vie du développeur. Quand vous affectez une chaîne de
caractères à ce type de variable, le langage connaît la longueur de cette chaîne (a="Salut", la longueur de « Salut » est 5) et va
Adr
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
Ind
1,1,1
1,1,2
1,1,3
1,2,1
1,2,2
1,2,3
2,1,1
2,1,2
2,1,3
2,2,1
2,2,2
2,2,3
Val
10
12
14
10
15
9
8
13
7
5
14
20
Lettre
B
o
n
j
o
u
r
ASCII
66
111
110
106
111
117
114
Adresse
1616
1617
1618
1619
1620
1621
1622
1623
Contenu
66
111
110
106
111
117
114
0
- 7 -
© ENI Editions - All rigths reserved - Jonifar lina
101
