Tableaux▲
Tableaux unidimensionnels▲
On a souvent besoin de regrouper dans une seule variable (et donc un seul nom) plusieurs variables (exemple 3 coordonnées d'un même vecteur). On utilise pour cela les tableaux. La manière la plus simple des les définir est :
VAR
nom_tableau : ARRAY
[type_index] OF
type_composantes
{Exemple}
CONST
dimension = 3
;
VAR
vecteur1, vecteur2 : ARRAY
[1
..dimension] OF
REAL
;
On peut utiliser le tableau complet (vecteur1 := vecteur2) pour l'affectation uniquement (vecteur1 + vecteur2 est impossible directement).
Mais on peut également accéder aux différentes composantes par un index (si vecteur1 est le vecteur unitaire porté par Y, alors vecteur1[1] = 0,vecteur2[2] = 1, vecteur3[3] = 0).
L'index peut être variable:
PROGRAM
heures (input,output);
TYPE
tj = (lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche);
VAR
jour : tj;
nb_heures_cours : ARRAY
[tj] OF
integer
;
BEGIN
{il faudrait ici entrer les nombres d'heures de cours par jour}
FOR
jour := lundi TO
samedi DO
writeln(nb_heures_cours[jour])
END
.
On peut également définir un type tableau, par exemple :
TYPE
typheures = ARRAY
[tj] OF
integer
;
VAR
nb_heures_cours : typheures;
Exercicemoy_a :
Ecrire un programme qui lit une liste de N nombres, calcule et affiche la moyenne puis l'écart entre chaque note et cette moyenne.
Voir la correction
Exercicerot_b :
Ecrire un programme qui lit une liste de N nombres, la décale d'un cran vers le haut (le 1er doit se retrouver en dernier), l'affiche puis la décale vers le bas.
Voir la correction
Exerciceclas_c :
Classer automatiquement une liste de n entiers par ordre croissant puis décroissant.
Voir la correction
Les chaînes de caractères▲
On appelle chaîne de caractères une suite de caractères regroupés dans une seule variable.
En Pascal standard, il faut la déclarer comme ARRAY [1..nbcar] OF CHAR.
Les tests sont possibles entre chaines (test suivant l'ordre ASCII du 1er caractère, puis automatiquement du 2ème, etc).
Exemples : 'aaz' < 'aba' 'aa' < 'aaa' 'ZZZ' < 'aaa' (majuscules)
On peut également utiliser ces tableaux dans READLN et WRITELN.
Mais en général, les compilateurs possèdent des types plus puissants, associés à des fonctions et procédures non standard.
En Turbo Pascal, on déclare une chaîne par String [nbcar].
Une fonction utile est alors Length(variable_string), qui donne la longueur de la chaîne (inférieure ou égale à la dimension déclarée).
Exerciceex_str :
Ecrire un programme qui détermine le nombre et les positions d'une chaîne dans une autre (par exemple : 'ON' dans 'FONCTION' : en position 2 et 7).
Voir la correction
Tableaux de tableaux▲
On peut faire des tableaux avec des composantes de tous types, y compris de tableaux.
On peut voir une matrice comme un tableau de lignes qui sont elles-mêmes des tableaux de composantes.
Exemple : matrice 5 lignes, 10 colonnes :
TYPE
ligne = array
[1
..10
] of
real
;
mat = array
[1
..5
] of
ligne;
Les écritures TYPE mat = array [1..5] of array [1..10] of real
ou même TYPE mat = array [1..5,1..10] of real
sont strictement équivalentes (sauf si la définition du type ligne est nécessaire pour d'autres variables).
Soit la déclaration
VAR
m1, m2 : mat;
i, j : integer
;
on peut écrire :
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 }
mais il est impossible d'accéder directement à une colonne.
Rappel : READLN et WRITELN ne s'appliquent qu'à des variables simples prédéfinies (c'est-à -dire les composantes, si celles-ci sont réelles, entières, chaînes ou booléennes).
Exercicemat :
Faire le calcul de multiplication d'une matrice (M lignes, L col) par (L lignes, N col) (résultat M lignes, N col).
Voir la correction
Tableaux compactés▲
On peut, en Pascal standard, définir des tableaux en PACKED ARRAY. Ils s'utilisent de la même manière que des tableaux normaux, mais prennent moins de place en mémoire. Sur certains ordinateurs, ceci se paie par un ralentissement du programme dans certaines applications. En Turbo Pascal ce n'est pas le cas, et elles sont donc automatiquement toutes compactées (inutile de le préciser). (5)
VAR
truc : PACKED
ARRAY
[1
..10
] OF
typtruc;
On possède en standard les procédures de transfert :
PACK(table_non_packée,index_début,table_packée_resultat);
UNPACK(table_packée,table_non_packée_resultat,index_début);
pour transférer toute la table, mettre index_début à 1.