Array in Delphi
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
In einem Array können mehrere Datenelemente des gleichen Typs gespeichert werden. Der Vorteil liegt bei der leichteren Handhabbarkeit. Jedes Element hat einen festen Platz bzw. Index und kann durch Angabe des Indexwertes direkt aufgerufen werden.
rf645x2226yffl 22645xrb26yfl5b
Eindimensionale Arrays
rf645x2226yffl 22645xrb26yfl5b
Der Name des Arrays wird durch eine Typendeklaration festgelegt:
type ArrayTypName = array[IndexTyp] of ElementeTyp
Als Elementtyp ist jeder Typ erlaubt, der Indextyp muss hingegen abzählbar sein. Es gibt ein- und mehrdimensionale Arrays. Ein eindimensionales Array kann man sich als Linie vorstellen:
rf645x2226yffl 22645xrb26yfl5b
Beispiel:
type TIntListe = array[1..10] of Integer;
TZeichen = array['a'..'z'] of Byte;
var intL: TIntListe; z: TZeichen;
Der Zugriff:
intL[4] := 100;
z['a'] := 5;
m[17, 0] := 12.34;
rf645x2226yffl 22645xrb26yfl5b
Arrays aus Strukturvariablen
rf645x2226yffl 22645xrb26yfl5b
Von besonderem Interesse sind Arrays, deren Elementetypen Strukturvariablen (Records) sind.
Beispiel: Mit einem Typ TPerson soll ein Array aufgebaut werden, in welchem 100 Personen
abgespeichert werden können:
type TPersListe = array[1..100] of TPerson;
var list1: TPersListe;
Der Zugriff auf die fünfte Person erfolgt z.B. mit
list1[5].name := 'Einstein';
rf645x2226yffl 22645xrb26yfl5b
Strukturvariablen mit Arrays
rf645x2226yffl 22645xrb26yfl5b
Auch die Felder von Strukturvariablen (records) können Arrays sein. Es bedarf allerdings eines gewissen Abstraktionsvermögens, um dabei den Überblick zu behalten.
rf645x2226yffl 22645xrb26yfl5b
Am folgenden Beispiel sollte die Vorgehensweise deutlich werden.
rf645x2226yffl 22645xrb26yfl5b
Beispiel:
type TPerson = record
Name: string[20];
Geschlecht: Boolean;
Geburtsjahr: Integer;
Groesse: Single
end;
rf645x2226yffl 22645xrb26yfl5b
const maxp = 4; //maximal 4 Personen
type TpersArray = array[1..maxp] of TPerson;
rf645x2226yffl 22645xrb26yfl5b
var
Form1: TForm1;
Person: TpersArray;
implementation
rf645x2226yffl 22645xrb26yfl5b
{$R *.DFM}
rf645x2226yffl 22645xrb26yfl5b
procedure TForm1.Button1Click(Sender: TObject);
var S: String;
i, code: Integer;
w: Single;
begin
for i:=1 to maxp do begin
rf645x2226yffl 22645xrb26yfl5b
//String-Wert:
s := InputBox('Personal-Eingabe','Geben Sie den '+IntToStr(i)+ '. Namen ein!',
Person[i].Name); // Anzeige/Eingabe
Person[i].Name := s; // in Array speichern
Label2.Caption := s; // im Label anzeigen
rf645x2226yffl 22645xrb26yfl5b
//Bool'scher Wert:
if Person[i].Geschlecht = True then s := 'ja' else S:= 'nein';
s := InputBox('Personal-Eingabe','männlich? (ja/nein)',s);
if s = 'ja' then Person[i].Geschlecht := True
else Person[i].Geschlecht := False;
Label3.Caption := s; // im Label anzeigen
rf645x2226yffl 22645xrb26yfl5b
// Integer-Wert:
s := IntToStr(Person[i].Geburtsjahr); // aus Array lesen
s := InputBox('Personal-Eingabe','Geburtsjahr?',s); // Anzeige/Eingabe
Person[i].Geburtsjahr := StrToInt(s); // in Array speichern
Label4.Caption := s; // im Label anzeigen
rf645x2226yffl 22645xrb26yfl5b
// Gleitkomma-Wert:
Str(Person[i].Groesse:3:2, s); // 3 Stellen, davon 2 nach dem Komma
s := InputBox('Personal-Eingabe','Körpergröße?', s);
Val (s, Person[i].Groesse, code); // fehlerfrei, wenn code = 0
Label5.Caption := s;
end
end;
rf645x2226yffl 22645xrb26yfl5b
Array-Konstanten
rf645x2226yffl 22645xrb26yfl5b
Auch Konstanten lassen sich in einem Array übersichtlich speichern.
Beispiel:
const tage: array[1..7] of string = ('Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So');
var woBeginn: string;
. . .
woBeginn := tage[1];
Etwas komplizierter wird es bei mehreren Dimensionen.
Beispiel:
const tabs: array[1..5, 1..2] of Word = ((50,20), (55,21), (63,35), (110,77), (200,5));
var tab1: Word;
Die Anordnung der Elemente:
rf645x2226yffl 22645xrb26yfl5b
Zugriff:
tab1 := tabs[4,2]; // weist den Wert 77 zu
rf645x2226yffl 22645xrb26yfl5b
Zweidimensionale Arrays
rf645x2226yffl 22645xrb26yfl5b
Zweidimensionale Arrays kann man sich als Tabelle vorstellen.
Beispiel:
type TMatrix = array[0..10, 0..100] of Single;
var m: TMatrix; [Spalten,Zeilen]
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
Dreidimensionale Arrays
rf645x2226yffl 22645xrb26yfl5b
Dreidimensionale Array kann man sich gut am Beispiel eines Zauberwürfels veranschaulichen. Ein solcher Würfel besteht zum Beispiel aus 64 (= 4 * 4 * 4) kleinen und verschiebbaren Elementen.
rf645x2226yffl 22645xrb26yfl5b
So werden dreidimensionale Arrays deklariert:
rf645x2226yffl 22645xrb26yfl5b
rf645x2226yffl 22645xrb26yfl5b
So kann man sich ein Dreidimensionales Array vorstellen:
rf645x2226yffl 22645xrb26yfl5b
+: Sehr gut aufgebautes Referat mit verständlichen Erklärungen und schönen Grafiken.
-: Keine Quellenangaben.