Accueil        LEXIQUE        Unités        Algorithmes        Tutoriel   

Sommaire lexique

Paramètres de tableau ouvert


Les paramètres de tableau ouvert permettent de ne pas fixer la taille des paramètres de tableau, mais de la rendre dépendante du paramètre en cours transféré.

Le paramètre est déclaré avec "ARRAY OF <type name>", par exemple comme ceci:

FUNCTION Produit_scalaire( a, b: ARRAY OF REAL): REAL;
Toute longueur de tableau du type spécifié peut ensuite être transférée en tant que paramètre actuel. Même le transfert d'une seule variable du type est autorisé.

Dans l'exemple, tous les tableaux de REAL peuvent être transférés (également de différentes longueurs pour a et b!), Ou même des variables REAL individuelles. Le transfert de constantes ou d'expressions, par contre, n'est pas autorisé.

Dans une fonction avec des paramètres ouverts, vous souhaitez bien entendu vous renseigner sur les limites d'index des paramètres. Pour cela, les fonctions standard HIGH et LOW ont été introduites. Appliqués aux tableaux ou aux paramètres de tableaux ouverts, ils renvoient les limites d'index. Par exemple:

FUNCTION Produit_scalaire( a, b: ARRAY OF REAL): REAL;
VAR
    somme: REAL;
    i: LONGINT;      { La taille des paramètres peut atteindre 2 gigaoctets !}
BEGIN
    somme := 0.0;
    { Il faut vérifier que LOW(a) = LOW(b) et HIGH(a) = HIGH(b) }
    FOR i := LOW(a) TO HIGH(a) DO somme := somme + a[i]*b[i];
    Produit_scalaire := somme;
END;
Les paramètres de tableau ouvert sont toujours créés par le compilateur de telle sorte que la limite inférieure (c'est-à-dire la valeur de LOW) soit égale à zéro. Si le paramètre actuel a une limite inférieure différente de zéro, la limite supérieure du paramètre ouvert est ajustée en conséquence afin que le nombre d'éléments corresponde. Cette convention rend le code machine généré un peu plus efficace, car une seule limite d'index doit être dépassée.

La petite fonction d'exemple n'est pas encore aussi efficace qu'elle pourrait l'être, puisque les deux paramètres de valeur sont copiés à partir de la fonction.

Vous pouvez éviter cette copie en la déclarant comme paramètre VAR ou depuis Pure Pascal 1.1 ou Borland Pascal 7.0 en la déclarant en tant que paramètre CONST

Sommaire lexique


Copyright © 2021 par Albatros Concept (Bruno Aubin)