Langage Pascal/Les tableaux

Début de la boite de navigation du chapitre
Les tableaux
Icône de la faculté
Chapitre no 4
Leçon : Langage Pascal
Chap. préc. :Lire et écrire avec read et write
Chap. suiv. :Instruction conditionnelle
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Langage Pascal : Les tableaux
Langage Pascal/Les tableaux
 », n'a pu être restituée correctement ci-dessus.

Les tableaux

modifier

Un outils particulièrement pratique et proposé dans la grande majorité des langages est le tableau. Il permet le stockage d'une série d'éléments de même type.

Imaginons un professeur voulant stocker les notes de 5 élèves, il peut ainsi utiliser un tableau d'entiers de longueur 5. Illustrons ce dernier :

12 16 07 13 09

En pascal, un tableau peut être déclaré de la manière suivante :

var
    t : array[1..5] of integer;

Ainsi, ce code déclare un tableau d'entiers, dont les indices vont de 1 à 5. Cet indice permet d'accorder un numéro à chacune des cases et d'y accéder.

Exemple :

var
    t : array[1..5] of integer;

begin
    t[1] := 12;
    t[2] := 16;
    t[3] := 7;
    t[4] := 13;
    t[5] := 9;
end.

Voilà comment il est possible d'affecter une valeur à chacune des cases du tableau. L'accès en lecture se fait par la même notation.

Les chaînes de caractères

modifier

Il n’est pas rare de rencontrer une situation où il est nécessaire de stocker des mots et donc des chaînes de caractères appelé également string.

Chaines statiques

modifier

Une chaîne statique est une chaîne de caractère dont l'espace mémoire utilisé est prédéfini. La longueur est donc limitée. En pascal, les chaînes statiques sont des tableaux de caractères. Les deux déclarations suivantes sont équivalentes :

var
    t : array[0..8] of char;
    s : string[8];

Ainsi, s est un tableaux de caractères indicés de 1 à 8, l'indice 0 étant réservé au stockage de la longueur réelle de la chaîne de caractères. On ne peut pas modifier l'indice zéro pour des chaînes dynamiques, c'est-à-dire donc la taille n’est pas définie à l'avance avec la syntaxe string[n].

  Il est fortement déconseillé de manipuler l'indice zéro.

Poursuivons l'exemple précédent :

var
    s : string[8];
    i : integer;

begin
    s := 'coucou';
    for i := 1 to 6 do
      writeln(s[i]);
end.

Ce qui donne le résultat suivant :

c
o
u
c
o
u

Notons que les valeurs des cases d'indice 7 et 8 sont imprévisibles puisque non initialisées.

Chaînes dynamiques

modifier

Les chaînes dynamiques sont des chaînes dont la taille n’est pas prédéfinie. Elles sont définies simplement comme ceci :

var
   s : string;

begin
  s := 'bonjour';
end;

Il faut noter que dans les anciennes implémentation de Pascal, il n'y avait pas de chaînes dynamiques, et la syntaxe string était interprétée comme une chaîne statiques de longueur maximum 255.

Les chaînes dynamiques ont une longueur essentiellement limitée par la mémoire disponible. Il n'y a pas d'indice zéro, mais on peut redéfinir leur longueur avec la fonction SetLength :

var s: string;

begin
    s := 'abcde';   { la longueur est de 5 caractères }
    setLength(s,3); { on redéfini la longueur }
    writeln(s);     { on affiche le résultat }
end;

Ce code affichera

abc

Tableaux de tableaux

modifier

Si on désire stocker une matrice entière, il est possible de manipuler des tableaux de tableaux, également appelé tableaux 2D.
On peut les déclarer de deux façon strictement identique :

var
    m1 : array[1..5] of array[1..10] of real;
    m2 : array[1..5,1..10] of real;

Ainsi, m1 et m2 sont des matrices de tailles 5 sur 10 et il est possible de les manipuler comme indiquer ci-dessous :

var
    m1, m2 : array[1..5,1..10] of real;

begin
    m1[i,j] := 10;     {affectation de la valeur 10 en ligne i, colonne j}
    m1[i] := m1[i+1];  {copie complète de la ligne i+1 sur la ligne i}
    m2 := m1           {copie de la matrice complète }
end.

mais il est impossible d'accéder directement à une colonne.

Fonctions utiles

modifier
Nom de la fonction Explication
length Renvoie la longueur du tableau ou de la chaîne de caractère
low Renvoie l'indice minimum du tableau
high Renvoie l'indice maximum du tableau

L'exemple où l’on affiche chaque caractère contenu dans une chaine de caractère peut être réécrit ainsi :

var
    s : string[8];
    i : integer;

begin
    s := 'coucou';
    for i := 1 to length(s) do
      writeln(s[i]);
end.

Et on peut initialiser un tableau comme cela :

var
    t : array[1..5] of integer;
    i : integer;
begin
    { on met la valeur 36 dans toutes les cases du tableau }
    for i := low(t) to high(t) do
      t[i] := 36;
end.