Les tableaux nous permettent de faire référence à une série de variables du même nom et d'utiliser un nombre (un index) pour appeler des éléments individuels de cette série. Les tableaux ont des limites supérieure et inférieure et les éléments du tableau sont contigus à l'intérieur de ces limites.
Les éléments du tableau sont des valeurs qui sont toutes du même type (chaîne, entier, enregistrement, objet personnalisé).
Dans Delphi, il existe deux types de tableaux: un tableau de taille fixe qui reste toujours la même taille - un tableau statique - et un tableau dynamique dont la taille peut changer au moment de l'exécution.
Tableaux statiques
Supposons que nous écrivons un programme qui permet à un utilisateur d'entrer certaines valeurs (par exemple, le nombre de rendez-vous) au début de chaque journée. Nous choisirions de stocker les informations dans une liste. On pourrait appeler cette liste Rendez-vouset chaque numéro peut être enregistré en tant que rendez-vous [1], rendez-vous [2], etc.
Pour utiliser la liste, nous devons d'abord la déclarer. Par exemple:
var Rendez-vous: tableau [0..6] d'entier;
déclare une variable appelée Rendez-vous qui contient un tableau unidimensionnel (vecteur) de 7 valeurs entières. Étant donné cette déclaration, Appointments [3] désigne la quatrième valeur entière dans Appointments. Le nombre entre parenthèses est appelé l'index.
Si nous créons un tableau statique mais n'attribuez pas de valeurs à tous ses éléments, les éléments inutilisés contiennent des données aléatoires; ce sont comme des variables non initialisées. Le code suivant peut être utilisé pour définir tous les éléments du tableau Rendez-vous sur 0.
pour k: = 0 à 6 faire Rendez-vous [k]: = 0;
Parfois, nous devons garder une trace des informations connexes dans un tableau. Par exemple, pour garder une trace de chaque pixel sur l'écran de votre ordinateur, vous devez vous référer à ses coordonnées X et Y à l'aide d'un multidimensionnel tableau pour stocker les valeurs.
Avec Delphi, nous pouvons déclarer des tableaux de plusieurs dimensions. Par exemple, l'instruction suivante déclare un tableau bidimensionnel 7 x 24:
var DayHour: tableau [1..7, 1..24] de Real;
Pour calculer le nombre d'éléments dans un tableau multidimensionnel, multipliez le nombre d'éléments dans chaque index. La variable DayHour, déclarée ci-dessus, met de côté 168 éléments (7 * 24), sur 7 lignes et 24 colonnes. Pour récupérer la valeur de la cellule dans la troisième ligne et la septième colonne, nous utiliserions: DayHour [3,7] ou DayHour [3] [7]. Le code suivant peut être utilisé pour définir tous les éléments du tableau DayHour à 0.
pour i: = 1 à 7 do
pour j: = 1 à 24 do
DayHour [i, j]: = 0;
Tableaux dynamiques
Vous ne savez peut-être pas exactement la taille d'un tableau. Vous voudrez peut-être avoir la capacité de modification de la taille du tableau lors de l'exécution. Un tableau dynamique déclare son type, mais pas sa taille. La taille réelle d'un tableau dynamique peut être modifiée au moment de l'exécution en utilisant le SetLength procédure.
var Etudiants: tableau de chaînes;
crée un tableau dynamique unidimensionnel de chaînes. La déclaration n'alloue pas de mémoire aux étudiants. Pour créer le tableau en mémoire, nous appelons la procédure SetLength. Par exemple, étant donné la déclaration ci-dessus,
SetLength (étudiants, 14);
alloue un tableau de 14 chaînes, indexées de 0 à 13. Les tableaux dynamiques sont toujours indexés sur des nombres entiers, commençant toujours de 0 à un de moins que leur taille en éléments.
Pour créer un tableau dynamique bidimensionnel, utilisez le code suivant:
var Matrix: tableau de tableau de Double;
commencer
SetLength (Matrix, 10, 20)
fin;
qui alloue de l'espace pour un tableau bidimensionnel 10 x 20 de valeurs à virgule flottante double.
Pour supprimer l'espace mémoire d'un tableau dynamique, affectez nil à la variable du tableau, comme:
Matrice: = zéro;
Très souvent, votre programme ne sait pas au moment de la compilation combien d'éléments seront nécessaires; ce nombre ne sera pas connu avant l'exécution. Avec les tableaux dynamiques, vous ne pouvez allouer que la quantité de stockage requise à un moment donné. En d'autres termes, la taille des tableaux dynamiques peut être modifiée au moment de l'exécution, ce qui est l'un des principaux avantages des tableaux dynamiques.
L'exemple suivant crée un tableau de valeurs entières, puis appelle la fonction Copy pour redimensionner le tableau.
var
Vecteur: tableau d'Integer;
k: entier;
commencer
SetLength (Vector, 10);
pour k: = Low (Vector) à High (Vector) do
Vecteur [k]: = i * 10;
...
// maintenant nous avons besoin de plus d'espace
SetLength (Vector, 20);
// ici, le tableau vectoriel peut contenir jusqu'à 20 éléments // (il en a déjà 10) end;
La fonction SetLength crée un tableau plus grand (ou plus petit) et copie les valeurs existantes dans le nouveau tableau. Les fonctions Low et High vous permettent d'accéder à chaque élément du tableau sans regarder en arrière dans votre code pour les valeurs d'index inférieures et supérieures correctes.