Felder (arrays) können in Ada sowohl in der - auch aus anderen Programmiersprachen wie etwa Pascal oder Modula-2 bekannten - Weise durch exakte Festlegung der Grenzen als auch durch deren Offenlassen definiert werden, z.B.:
type Acht_Bit_Vector is array(0 .. 7) of boolean;
Das oben erstmals eingeführte <>
-Zeichen wird auch als
Box bezeichnet.
Ein Array-Typ, dessen Grenzen festgelegt sind, heißt constrained , sonst nennt man ihn unconstrained .
Auch für Array-Typen bzw. Array-Variable sind einige Attribute definiert:
A'FIRST | untere Schranke des Index-Typs |
A'FIRST(N) | untere Schranke des N-ten Index-Typs |
A'LAST | obere Schranke des Index-Typs |
A'LAST(N) | obere Schranke des N-ten Index-Typs |
A'RANGE | gibt einen Bereich zurück, nämlich A'FIRST .. A'LAST |
A'RANGE(N) | gibt den Bereich A'FIRST(N) .. A'LAST(N) zurück |
A'LENGTH | gibt die Größe des Indexbereiches zurück, 0 für einen leeren Indexbereich |
A'LENGTH(N) | gibt die Größe des N-ten Indexbereiches zurück, 0 für einen leeren Indexbereich |
Der vordefinierte String-Typ kann aufgefaßt werden als
type string is array(positive range
Array-Variablen eines constrained Array-Typs können ohne weiteres etwa folgendermaßen definiert werden:
word: Acht_Bit_Vector;
Die Grenzen von Variablen eines unconstrained Array-Typs müssen bei ihrer Deklaration festgelegt werden. Dabei ist zu beachten, daß die angegebenen Grenzen keine statischen Werte sein müssen, sondern sich durchaus aus Werten rekrutieren können, die erst zur Laufzeit bekannt sind, z.B.:
Schachbrett: Matrix(1..8, 1..8);
Rechteck: Matrix(1..10, 1..20);
Quadrat: Matrix(1..N, 1..N);
-DabeikannNaucheineInteger-Variablesein
mein_String: string (1..100);
Es bleibt noch die Frage zu klären, wie man auf die einzelnen Komponenten eines Arrays zugreifen kann. Dies geschieht in Ada durch runde Klammern, z.B.:
word(2)
Schachbrett(2,4)
Quadrat(1,1)
mein_String(5)
Abschließend soll noch darauf hingewiesen werden, daß in Ada ein wesentlicher Unterschied besteht zwischen zweidimensionalen Arrays und einem eindimensionalen Array, dessen Komponenten eindimensionale Arrays sind. Dieser Unterschied macht sich vor allem beim Zugriff auf Elemente solcher Arrays bemerkbar. Gerade haben wir den Zugriff auf Elemente von zweidimensionalen Arrays kennengelernt (z.B. Schachbrett(2,4)). Wäre Schachbrett als Array eines Array's definiert worden, z.B.:
type Zeile is array(1 .. 8) of real;
type Schachbrett is array(1 .. 8) of Zeile;
Schachbrett(2)(4)
Zusätzlich zum Zugriff auf Array-Elemente kennt Ada sogenannte Slices . Damit kann man Teile eines eindimensionalen Arrays ,,herausschneiden``und erhält so wieder ein Array. Beispiele sind:
word(2..6)
mein_String(1..8)
Johann Blieberger