Programmierkurs: Delphi: Datentypen

Datentypen (Array, Records und Typen)

Bearbeiten

Ein Array ermöglicht es, Daten zu indizieren und Tabellen zu erstellen. Es gibt zwei verschiedene Arten von Arrays:

Eindimensionale Arrays

Bearbeiten
Statische Arrays
Bearbeiten
  • Ein statisches Array besitzt eine in der Variablendeklarierung festgelegte Größe, die in eckigen Klammern angegeben wird:
var
  test_array: array[1..10] of Byte;

definiert ein Array, das mit 10 Byte-Werten gefüllt werden kann. Man unterscheidet in Delphi zwischen 0-basierten und 1-basierten Arrays, wobei der Unterschied eigentlich nur in der Zählweise liegt:

var
  array_0: array[0..9] of Byte;

definiert ein gleich großes Array mit 0 als ersten Index. Dies ist eigentlich Geschmacksache, aber wer nebenbei C/C++ programmiert, dem wird die 0-basierte Schreibweise sicher vertrauter sein.

Dynamische Arrays
Bearbeiten
  • Ein dynamisches Array ist in seiner Größe dynamisch (wie der Name schon sagt). Das heißt, dass man die Größe während der Laufzeit verändern kann, um beliebig große Datenmengen aufzunehmen. Die Deklaration erfolgt mit
var
  array_d: array of Byte;

Will man zur Laufzeit dann die Größe verändern, so erfolgt die über die procedure SetLength(array, neue_Laenge). Mit den Funktionen High(array) und Low(array) erhält man den höchsten und den niedrigsten Index des Arrays. Bei dynamischen Arrays ist zu beachten, dass diese immer 0-basiert sind.
Mit Length(tabelle1) bekommt man die Länge des Arrays heraus. Hier ist zu beachten, dass bei einem Array von 0 bis 2, 3 Elemente vorhanden sind und darum die Zahl 3 zurückgegeben wird.

Der Zugriff auf ein Array erfolgt mit arrayname[5] := 10;. Der Vorteil von Arrays ist, dass man sie einfach in Schleifen einbauen kann:

var
  arrayname: array[1..10] of Byte;
begin
  for i := 1 to 10 do
    arrayname[i] := 10;
end;

Mehrdimensionale Arrays

Bearbeiten

Außerdem kann man mit Arrays mehrere Dimensionen definieren:

Statische Arrays
Bearbeiten
var
  tabelle1: array[1..10] of array[1..10] of Byte;   // dies ist gleichbedeutend mit:
  tabelle2: array[1..10, 1..10] of Byte;

definiert beides eine Tabelle mit der Größe 10x10. Der Zugriff erfolgt über

tabelle[5, 8] := 10;

Damit wird die Zelle in der 8. Reihe und in der 5. Spalte mit 10 belegt.

Dynamische Arrays
Bearbeiten
var
  Tabelle1: array of array of Byte;

Natürlich muss man auch hier mit SetLength die Länge des Arrays bestimmen. Und das geht so:

SetLength(Tabelle1, 9, 9);

Dies definiert eine 2-dimensionale Tabelle mit der Größe 9×9. Der Zugriff kann nun wie bei einem statischen Array erfolgen. Beide Indizes liegen im Bereich 0..8.

Mit einer Typendeklaration kann man eigene Datentypen festlegen, dies erfolgt z.B. durch

type
  Zahl = Integer;

Nach dieser Deklaration kann man überall anstatt Integer Zahl einsetzen:

var
  x: Zahl;

Interessant werden Typen, wenn man zum Beispiel eine Arraydefinition, z.B. eine bestimmte Tabelle öfter einsetzen will:

type
  Tabelle = array[1..10, 1..10] of Byte;

oder wenn man Records oder Klassen benutzt.
Natürlich funktioniert das mit allen Arten von Arrays, also auch mehrdimensional, dynamisch, etc.

Mit einem Record kann man einer Variable mehrere Untervariablen geben, dies ist z.B. bei Datensammlungen der Fall. Man definiert einen Record fast immer über einen Typen:

type
  THighscoreEintrag = record
    Nr: Byte;
    Name: string;
    Punkte: Integer;
  end;

Wenn man nun eine 10-stellige Highscoreliste erstellen will, dann benutzt man die Anweisung:

var
  Hscr: array[1..10] of THighscoreEintrag;
begin
  Hscr[1].Nr := 1;
  Hscr[1].Name := 'Der Erste';
  Hscr[1].Punkte := 10000;
end;


  Einstieg Inhaltsverzeichnis Pointer