8- Types de données

Un programme doit manipuler des données, il doit donc avoir accès à ces données pour pouvoir les lire ou les transformer. Il est souvent utile ou nécessaire de structurer les données, c'est à dire de les mettre sous une forme qui facilite leur exploitation. Turbo Pascal fournit à cet effet la notion de type. Certains types de données simples sont prédéfinis. Le programmeur a la possibilité d'en créer de nouveaux grâce à deux notions essentielles : les tableaux et les enregistrements.

Les tableaux

Un tableau est une suite indicée de données de même type. Celles-ci sont rangées en mémoire de façon contiguë ce qui permet d'y accéder simplement à partir de leur numéro d'ordre.

Déclaration d'un type tableau

Cette déclaration se fait dans la partie réservée à cet effet introduite par le mot Type.

Elle prend la forme suivante :

IdTypeTableau = array[min..max] of IdType;

IdTypeTableau est le nom du type créé; min et max sont les valeurs extrêmes des indices des éléments du tableau; max-min+1 donne le nombre d'éléments du tableau; IdType est le type des éléments contenus dans le tableau. array et of sont des mots réservés de Turbo Pascal.

Par exemple :

ByteArray = array[0..99] of Byte;

est la déclaration du type tableau de 100 octets indicés de 0 à 99.

Note : cette déclaration correspond à une simple définition, il n'y a pas de réservation mémoire effectuée à ce moment; le programme réservera les 100 octets nécessaires à ce type lors de la déclaration d'une variable.

Lecture et écriture des éléments d'un tableau.

Pour avoir accès à un élément d'un tableau, il suffit d'écrire le nom de la variable de type tableau suivi de l'indice de l'élément visé entre crochets. Cet accès permet à la fois de lire et d'écrire cet élément.

Par exemple :
Si UnTableau est une variable du type ByteArray déclaré précédemment, le nième élément de ce tableau sera MonTableau[n].
Pour lui donner la valeur 5, on écrira simplement MonTableau[n]:=5.
Pour transférer sa valeur dans la variable b, on écrira simplement b:=MonTableau[n].

Limites de taille

La taille d'un tableau est limitée par la place mémoire que vont occuper ses éléments. Cette limite est de 64 Ko ou plus exactement 65521 octets à cause de problèmes de gestion de la mémoire. Ainsi un tableau contiendra au maximum 65521 octets ou 32760 éléments de type Integer qui occupe chacun 2 octets ou 10920 éléments de type Real qui occupent chacun 6 octets.

Cas particulier du type String

Le type String représente les chaînes de caractères. C'est en fait un tableau qui aurait pu être déclaré comme array[0..255] of Char. Sa particularité vient du fait de sa structure interne et des nombreuses procédures et fonctions qui lui sont dédiées. Le premier octet du tableau représente la longueur réelle de la chaîne considérée.

Par exemple :
Si on considère la chaîne S:='EXEMPLE', on aura en mémoire un tableau de 256 caractères commençant par la suite #7 E X E M P L E suivie d'octets indéterminés.
L'accès aux différents caractères de la chaîne se fait comme pour un tableau classique. On aura ainsi :
S[1]='E', S[4]='M', S[0]=#7. De même on pourra modifier les caractères contenus dans la chaîne.

Les enregistrements

Il est parfois utile de regrouper des variables de types éventuellement différents. Turbo Pascal nous donne cette possibilité grâce à la notion d'enregistrements. Un enregistrement contiendra donc plusieurs données qu'on appellera champs. Ceux ci seront inscrits en mémoire de façon contiguë.

Déclaration d'un type enregistrement

Cette déclaration prend la forme suivante :

IdTypeEnregistrement = record
 IdChamp1 : IdType1;
 IdChamp2 : IdType2;
 .....
 end;

IdTypeEnregistrement est le nom du type créé. IdChamp1, IdChamp2, ... sont les noms des différents champs. IdType1, IdType2, ... sont les types de ces champs.

record et end sont des mots réservés de Turbo Pascal.

Par exemple :
Pour créer un type associant le nom d'une personne et sa date de naissance on pourra déclarer :

Naissance = record
 Nom : String[30];
 Jour : Byte;
 Mois : Byte;
 An : Word;
 end;

Note : la taille mémoire d'un enregistrement ne doit pas dépasser 65521 octets.

Lecture et écriture d'un champ.

Pour avoir accès à un champ d'une variable de type enregistrement on écrit le nom de la variable suivi d'un point et du nom du champ visé. Cet accès permet à la fois de lire et d'écrire ce champ.

Par exemple, si UnAmi est une variable du type Naissance précédemment défini, on aura accès au nom en écrivant UnAmi.Nom.
UnAmi.Nom:='Pierre' permet d'écrire le nom.
j:=UnAmi.Jour permet de transférer le jour dans la variable b.

L'instruction With

Cette instruction permet d'utiliser une variable de type enregistrement en ayant accès à ces champs sans avoir à répéter le nom de la variable.

Syntaxe :

with NomVar do
 begin
  (suite d'instructions où on utilise les champs de NomVar comme des variables )
 end;

Par exemple, avec la variable UnAmi définie précédemment, on pourra écrire :

with UnAmi do
 begin
  Nom:='Pierre';   Jour:=17;  Mois:=5;  An:=1960;
 end;

Chapitre précédent
Chapitre suivant