Arrays werden im Deutschen zuweilen auch als Felder bezeichnet. Beim Lesen
von Pascal-Literatur ist jedoch Vorsicht geboten: Als Felder werden hier
oft die Komponenten eines Records bezeichnet.
Ein anderer Begriff, der mitunter für Arrays benutzt wird, ist
Reihung.

Deklaration eines eindimensionalen Arrays
TYPE name = ARRAY [ indextyp ] OF typ;indextyp muß ein ordinaler Datentyp sein.
Ein ordinaler Datentyp besitzt eindeutig bestimmte Werte imin und imax:
imin: Wert mit der kleinsten Ordinalzahlimax - imin + 1 ist dann die Länge des Arrays, d.h. die Anzahl seiner Komponenten.
imax: Wert mit der größten Ordinalzahl
Häufig wird für indextyp nicht ein Typbezeichner, sondern ein anonymer INTEGER-Teilbereichstyp in der Form
imin..imaxangegeben.
Beispiel:
TYPE nr = ARRAY[1..10000] OF INTEGER;
koord = ARRAY[1..3] OF REAL;
monate = 1..12;
abrechnung = ARRAY[monate] OF REAL;
farbe = (rot, gruen, blau);
rgb = ARRAY[farbe] OF INTEGER;
Die Zuweisung von Werten an ein Array muß komponentenweise erfolgen.
VAR a : ARRAY[1..10] OF INTEGER;
i : INTEGER;
FOR i:= 1 TO 10 DO
a[i] := i*i;
Einem Array kann der Wert eines anderen Arrays zugewiesen werden, wenn
beide den gleichen Typ besitzen.
VAR a, b : ARRAY[1..10] OF INTEGER;
a := b;
a := b + 1; { !! nicht zulaessig !! }
a := b * b; { !! nicht zulaessig !! }
Deklaration eines mehrdimensionalen Arrays
TYPE name = ARRAY [ indextyp_1, ..., indextyp_n ] OF typ;indextyp_1, ..., indextyp_n müssen jeweils ordinale Datentypen sein.
Alternativ könnte die Deklaration auch wie folgt vorgenommen werden:
TYPE name = ARRAY [ indextyp_1 ] OF
ARRAY [ indextyp_2 ] OF
...
ARRAY [ indextyp_n ] OF typ;
Beispiel:
TYPE matrix = ARRAY[1..10, 1..10] OF INTEGER;Pascal sieht keine obere Grenze für die Anzahl von Indizes vor, implementationsabhängig kann aber eine solche Grenze existieren.
Bemerkung:
Es sollten im Höchstfall drei Indizes verwendet werden, da sonst die
Programmlesbarkeit zu sehr leidet.
Gepackte Arrays
Dem Schlüsselwort ARRAY kann das Schlüsselwort PACKED vorangestellt werden:
TYPE name = PACKED ARRAY [ ... ] OF typ;PACKED ist die Erlaubnis für ein Pascal-System nach einer speichersparenden Ablage der Daten zu suchen. Die Wirkung hängt vom jeweiligen Pascal-System ab.
Es ist damit zu rechnen, daß bei vielen Pascal-Systemen die Angabe von PACKED ohne unmittelbare Wirkung auf die Art der Datenspeicherung bleibt.
Im Zusammenhang mit Zeichenketten besitzt das Schlüsselwort
PACKED jedoch stets eine gewisse Bedeutung.
Beispiel:
TYPE pstr = PACKED ARRAY[1..20] OF CHAR; VAR s1 : pstr; s1 := 'Zeichenkette';Die Alternativvariante ohne PACKED würde die Wertzuweisung erheblich erschweren:
TYPE str = ARRAY[1..20] OF CHAR;
VAR s2 : str;
s2[1] := 'Z';
s2[2] := 'e';
s2[3] := 'i';
...
Anfangswertzuweisung an Arrays
Standard Pascal
Nicht möglich.
Extended Pascal
Bei der Variablendeklaration kann für jede Komponente eines Arrays ein Anfangswert angegeben werden:
... VALUE [index_1: wert_1; ...; index_n: wert_n];Soll für eine größere Anzahl von Komponenten der gleiche Anfangswert zugewiesen werden, so kann die Aufzählung ersetzt werden durch
... VALUE [ ...; OTHERWISE wert ];Beispiel:
CONST n = 5;
TYPE arr = ARRAY[1..n] OF INTEGER;
VAR a : arr; { nicht initialisiert }
b : arr VALUE [1: 1; 2: -1; 3: -1; 4: 4; 5: -1];
c : arr VALUE [1: 1; 4: 4; OTHERWISE -1];
d : arr VALUE [OTHERWISE 1];
e : arr VALUE 1 { !! nicht zulaessig !! }
Indirekt wird auch in dem folgenden Beispiel eine Anfangswertbelegung des
Arrays erreicht:
TYPE int1 = INTEGER VALUE 1;
arr = ARRAY[1..5] OF int1;
Alle Komponenten (Elemente) eines Arrays vom Typ arr sind mit dem
Wert 1 vorbelegt. Turbo Pascal
Bei der Deklaration als "typisierte Konstante" kann für jede Komponente eines Arrays ein Anfangswert angegeben werden:
CONST name : array_typ = ( wert_1, ..., wert_n );name ist eine Variable !
Beispiel:
TYPE arr = ARRAY[1..5] OF INTEGER;
CONST b : arr = (1, -1, -1, 4, -1);
c : arr = (1); { !! Syntaxfehler !! }
d : arr = (1, 1, 1, 1, 1);
Siehe auch