next up previous contents index
Weiter: 2.2.2 Records Hinauf: 2.2 Zusammengesetzte Typen Zurück: 2.2 Zusammengesetzte Typen

2.2.1 Felder

  

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;
type char_set is array(character) of boolean;
type Arbeitsstunden is array(Tag range Montag .. Freitag) of natural;

type Vector is array(integer range <>) of real;
type Matrix is array(integer range <>, integer range <>) of real;
type Bit_Vector is array(integer range <>) 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 <>) of character;

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 sindgif. 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;

so lautete ein Zugriff auf ein entsprechendes Element:

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)

Dabei ist aber zu beachten, daß z.B. mein_String(1..1) ein Array der Länge 1 mit dem Komponenten-Typ Character ist, aber andererseits mein_String(1) ein Character.

next up previous contents index
Weiter: 2.2.2 Records Hinauf: 2.2 Zusammengesetzte Typen Zurück: 2.2 Zusammengesetzte Typen

Johann Blieberger
Wed Feb 11 09:58:52 MET 1998