Langage Pascal/Les tableaux
Les tableaux
modifierUn 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
modifierIl 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
modifierUne 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
modifierLes 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
modifierSi 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
modifierNom 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.