- Type de tableaux
- Les tableaux dynamiques
- LBOUND et UBOUND
Lorsque dans un programme, les données se multiplient, au lieu de créer 40000 variables, on
peut utiliser un tableaux qui aura pour effet de nous simplifier grandement la tache.
Pour créer un tableau, on utilise la même instruction que pour déclarer une variable :
l'instruction DIM.
Imaginons que l'on veuille étudier la taille des 10 éleves d'une petite classe. Nous allons
créer un tableaux à 1 dimensions (une ligne) :
DIM Taille(9)
Remarquez que l'on a écrit 9 et pas 10. Pourquoi ? Parce qu'on part de 0 et non de 1. Si on
avait voulut partir de 1, on aurrait écrit :
DIM Taille(1 TO 10)
Ou bien, si on avait voulu faire commencer TOUT les tableaux par 1 au lieu de 0, on aurait du
écrire :
OPTION BASE 1 ' Tout les tableaux commence par 1 et non 0
DIM Taille(10)
Le tableau aurait virtuellement (whoa!!) cette alure :
Pour stocker nos données dans ce tableau, il faut spécifer les coordonnées de la cellules dans
laquelle ont veut placer la donnée :
OPTION BASE 1 ' Tout les tableaux commence par 1 et non 0
DIM Taille(10)
Taille(3) = 1.7 ' 1.7 dans la cellule 3
Taille(7) = 1.65 ' 1.65 dans la cellule 7
Après cet exemple, le tableau sera (toujours virtuellement) :
| 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
| |
|
1.7 |
|
|
|
1.65 |
|
|
|
Nous allons maintenant réaliser notre petite étude statistique avec ce petit programme :
OPTION BASE 1 ' Les tableaux partent de 1
DIM Taille(10) ' Création du tableau Taille
FOR i = 1 TO 10
PRINT "Eleve N°"; i
INPUT "Entrez sa taille : ", Taille(i) ' On stocke la taille de chaque éleve
NEXT i
' *** Calcul de la taille Moyenne ***
FOR i = 1 TO 10
Somme = Somme + Taille(i)
NEXT i
TailleMoyenne = Somme / 10
' *** Recherche du plus grand ***
FOR i = 1 TO 10
IF Taille(i) > PlusGrand THEN PlusGrand = Taille(i)
NEXT i
' *** Recherche du plus petit ***
PlusPetit = PlusGrand
FOR i = 1 TO 10
IF Taille(i) < PlusPetit THEN PlusPetit = Taille(i)
NEXT i
' *** Affichage des résultats ***
PRINT "La taille moyenne est "; TailleMoyenne
PRINT "Le plus petit est "; PlusPetit
PRINT "Le plus grand est "; PlusGrand
Mais les tableaux ne s'arrêtent pas là. On peut par exemple spécifier une 2ème
dimension :
DIM MonTableau(5, 10)' Tableau à 2 dimensions
Voici l'allure virtuelle de ce tableau :
|
0 |
1 |
2 |
3 |
4 |
5 |
| 0 |
|
|
|
|
|
|
| 1 |
|
|
|
|
|
|
| 2 |
|
|
|
|
|
|
| 3 |
|
|
|
|
|
|
| 4 |
|
|
|
|
|
|
| 5 |
|
|
|
|
|
|
| 6 |
|
|
|
|
|
|
| 7 |
|
|
|
|
|
|
| 8 |
|
|
|
|
|
|
| 9 |
|
|
|
|
|
|
| 10 |
|
|
|
|
|
|
On peut d'ailleurs créer des tableaux qui sont en fait des cubes, en précisant une 3ème
dimension :
DIM MonCube(5, 10, 25) ' Tableau à 3 dimensions (Cube)
Ici, j'ai pas pu le représenter virtuellement (je tiens à ce mot :)).
À ma connaissance, je crois qu'on peut déclarer jusqu'à 64 dimensions !!!!!
Mais là, il faut s'accrocher.
Type de tableaux
Comme pour une variable, un tableau peut être d'un type bien déterminé. Il faudra alors le
spécifier avec le mot-clef AS :
DIM Bottin(1000) AS STRING ' Un tableau de chaines de caractères
Les tableaux dynamiques
Lorsqu'on ne sait pas bien quelle taille doit avoir un tableau, on peut créer un tableau
dynamique.
Pour cela, il faut créer un tableau avec le bon nombre de dimensions, mais avec des limites
"bidons" :
DIM Bataille(0, 0) AS INTEGER ' Création d'un tableau à 2 dimensions
Puis, on le redimensionnera en conséquence grâce à l'instruction REDIM :
DIM Bataille(0, 0) AS INTEGER ' Création d'un tableau à 2 dimensions
REDIM Bataille(10, 10) AS INTEGER ' Redimensionnement du tableau
Malheuresement, si on avait stocké des données dans le tableau, celle-ci seront réinitialisés
lors du redimensionnement. Il faudra alors se débrouillé avec un deuxième tableau temporaire.
LBOUND et UBOUND
Lorque l'on ne connait pas les limites d'une dimension d'un tableau, on peut utiliser les
instructions LBOUND et UBOUND.
LBOUND permet d'obtenir la limite inférieur d'une dimension d'un tableau
UBOUND permet d'obtenir la limite supérieur d'une dimension d'un tableau
Pour les utiliser, il faut préciser le tableau concerné et la dimension à tester, tout en sachant
que la première dimension est 1 et non pas 0 :
DIM MonTableau(3 TO 27, 4 TO 56)
FOR i = 1 TO 2
PRINT "La limite inférieur de la dimension "; i; " est "; LBOUND(MonTableau, i)
PRINT "La limite supérieur de la dimension "; i; " est "; UBOUND(MonTableau, i)
NEXT i
|