1-dimensional arrays/fr

From Free Pascal wiki
Jump to: navigation, search

English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

Tutoriel de Pascal Objet : Types de données / Tableaux a une dimension

Supposez que vous vouliez lire 5000 entiers et faire quelque chose avec eux. Comme stocker les entiers ?

Vous pourriez utiliser 5000 variables, et tomber dans :

aa, ab, ac, ad, ... aaa, aab, ... aba, ...

Mais ça deviendrait fastidieux (après avoir déclaré les variables, vous devez lire les valeurs dans chaque de ces variables).

Un tableau contient plusieurs espaces de stockage, tous du même type. Vous vous référez à chaque espace de stockage avec le nom du tableau avec un indice. La définition du type est :

type
  typename = array [enumerated_type] of another_data_type;

Le type de données peut être n'importe lequel, même un autre tableau. Tout type énuméré ira. Vous pouvez spécifier le type énuméré entre les crochets, ou utiliser un type énuméré prédéfini. En d'autres mots,

type
  enum_type = 1..50;
  arraytype = array [enum_type] of integer;

est équivalent à :

type
  arraytype = array [1..50] of integer;

Aparté : C'est la façon dont sont réellement gérées les chaînes — comme des tableaux. Avant que les compilateurs Pascal modernes eurent ajoutés le support des chaînes, les programmeurs devaient les manipuler eux-mêmes, en déclarant :

type
  String = packed array [0..255] of char;

et en utilisant quelque caractère de fin pour indiquer la fin de la chaine. La plupart du temps c'est le caractère nul (numéro ordinal 0, ou ord(0)). Le spécificateur packed veut dire que le tableau sera compressé pour prendre le moins de place possible en mémoire.

Les tableaux de caractères représentant des chaines sont souvent désignés par tampons et une erreur en les manipulant dans les langages C ou C++ peut amener à des débordements de tampon. Un débordement de tampon arrive quand vous essayez de mettre, par exemple, une chaine de 200 caractères dans un tableau d'une longueur de 150. Si la mémoire au-delà du tampon est écrasée et si cette mémoire contenait originellement du code exécutable, alors l'attaquant a tout juste réussi à injecter du code arbitraire dans votre système. C'est ce qui a causé le célèbre ver Slammer qui était endémique sur l'Internet pendant plusieurs jours. Essayez en Pascal et regardez ce qu'il arrive.

Les tableaux sont utiles si vous voulez stocker de grandes quantités de données pour un usage futur dans le programme. Ils marchent particulièrement bien avec les boucles parce qu'il sont utilisés avec un indice. Pour lire 50 nombres, en supposant la définition suivante :

type
  arraytype = array[1..50] of integer;
 
var
  myarray : arraytype;

Utilisez :

for count := 1 to 50 do
  read (myarray[count]);

Les crochets [ ] entourent l'indice pour référer aux cellules du tableaux.

myarray[5] := 6;
Sommaire