IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le langage Pascal


précédentsommairesuivant

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 :

 
Sélectionnez
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:

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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

 
Sélectionnez
VAR
  m1, m2 : mat;  
  i, j : integer;

on peut écrire :

 
Sélectionnez
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)

 
Sélectionnez
VAR truc : PACKED ARRAY [1..10] OF typtruc;

On possède en standard les procédures de transfert :

 
Sélectionnez
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.


précédentsommairesuivant
Note de la rédaction : Si elle est en effet ignorée par Turbo Pascal, la directive PACKED peut être utilisée avec les compilateurs Free Pascal, Virtual Pascal ou Delphi pour compacter les types structurés sans tenir compte de l'alignement par défaut.

Utilisation de ce document libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick Trau, IPST, Université Louis Pasteur Strasbourg) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.