TABLEAU
Un tableau est un ensemble de valeur. On peut mettre n'importe type standard
dans un tableau. Ils permettent de relier des données ensemble
au lieu de créer plusieurs variables. Disons que vous devez créer
un programme qui calculer la moyenne des notes des étudiants d'une
classe. Vous pourriez créer autant de variables qu'il y a d'étudiant,
mais ça serait difficile et fastidieux à gérer.
Une solution consisterait à utiliser un tableau
var tabNote:array [0..24]of real;
Ce qui fera 150 octets (25 éléments * 6 octets pour un real) On peut représenter en mémoire un tableau comme voici.
tabNote[0]
tabNote[1]
tabNote[2]
La mémoire est utilisée de façon linéaire,
chaque fois qu'on avance d'un élément, on avance de 6 octets
dans la mémoire. On doit spécifier l'index d'un tableau lorsqu'on
l'initialise. L'index c'est le chiffre qu'on spécifie entre les crochets
«[]».
tabNote[0]:=23;
tabNote[21]:=144;
Les opérations
Les opérations entre tableaux sont aussi possibles
notePaul:=tabNote[3] + tabNote[12] - tabNote[5];
Les tableaux multidimensionnels
Les tableaux multidimensionnels peuvent aussi être créés.
On ne doit qu'ajouter un deuxième indice à la syntaxe déjà
apprise. var tabNote:array [0..2 ,0..1] of integer; Les deux syntaxes sont
équivalentes. Les opérations entre tableaux peuvent aussi
être faites. La représentation en mémoire est la même,
de la gauche vers la droite et on change de ligne
tabNote[0][0]
tabNote[0][1]
tabNote[0][2]
tabNote[1][0]
tabNote[1][1]
tabNote[1][2]
Les tableaux sont souvent la cause de beaucoup d'erreurs chez les programmeurs.
Il est très aisé de faire une erreur de débordement.
var
tabNote:array [0..2] of integer;
begin
tabNote[8]:=45;
end;
Ce code engendra une erreur à la compilation. Afin d'empêcher
que de telle erreur se produise, on peut utiliser les fonctions low et high.
Ces fonctions renvoient les limites inférieures et supérieures
d'un tableau.
var
bas,haut:integer
tabNote:array [10..34] of integer;
begin
bas:=low(tabNote);//ce qui équivaut à 10
haut:=high(tabNote);//ce qui équivaut à 34
end;
On peut comparativement à d'autres langages créer un tableau
ne débutant pas à zéro. Cette possibilité peut
s'avérer intéressante afin de résoudre certains problèmes.
var
tabNote[10..22] of integer;
Les tableaux dynamiques
Jusqu'à maintenant, on n'a créé que des tableaux
statiques. Ce type de tableau a le désavantage de ne pouvoir se modifier
durant l'exécution du programme. Une fois le tableau défini,
on ne peut l'agrandir, le rétrécir.
Si vous avez déjà
programmé des tableaux dynamiques en langage c, c++ vous savez comment
il peut être compliqué de le faire pour un novice. Vous serez
sûrement heureux d'apprendre que, depuis la version 4 de delphi, il
est aisé de manipuler de tel tableau. On n'a qu'à ne pas spécifier
de taille lorsqu'on déclare le tableau
var
tabNote:array of integer;
Grandeur:integer;
begin
Grandeur:=SpecifierGrandeur;
SetLength(tabNote,Grandeur);
end;
Maintenant, on a un tableau de la grandeur que l'on veut. L'indice inférieur
d'un tableau dynamique débute toujours à l'indice zéro.
var
tabNote:array of integer;
Grandeur:integer;
begin
Grandeur:=100;
SetLength(tabNote,Grandeur);
//Traitement on retrecit le tableau
SetLength(tabNote,5);
//on agrandit le tableau
SetLength(tabNote,10);
end;
Les tableaux multidimensionnels peuvent aussi être crées
dynamiquement
var
lpPoint:TPoint;
begin
Grandeur:=0;
while (ok=false) do
begin
GetCursorPos(lpPoint);
Grandeur:=Grandeur+1;
//augmente la première dimension du tableau
setlength(tabPoint,Grandeur,2);
tabPoint[Grandeur-1,0]:=lpPoint.x;
tabPoint[Grandeur-1,1]:=lpPoint.y;
end;
end;
L'utilité des tableaux est innombrable, mais gare au débordement. :)