Ich_bin_dabei hat geschrieben:Code: Alles auswählen
var
  Person: record
    Name: string [30];
    Vorname: string [30];
    Telefonnummern: Array [1..2] of string [20];
  end;
 
 
Hallo Michael!
 
Grundsätzlich geht das zwar so, bloß kommst Du damit noch nicht allzu weit. Denn jetzt hast Du zwar 
eine Person erfaßt, aber Sinn und Zweck z.B. eines Adressbuches ist ja, 
mehrere Einträge zu verwalten und (das wäre dann der nächste Schritte) 
weitere nach Belieben hinzufügen zu können. Von "
verketteten Listen" bist Du immer noch weit entfernt - aber die würde ich an Deiner Stelle im Moment sowieso mal für eine Weile zurückstellen.
 
Erstmal wäre es jetzt wichtig, Dir den Unterschied zwischen 
Variablen- und 
Typdeklaration klarzumachen. Denn für Deinen nächsten Eintrag "
Person2" müßtest Du den ganzen Record nochmal neu tippen, wenn Du auch den als Variable deklarieren wolltest. Einfacher wäre es, diesen Record als 
Typ zu erstellen, und Deine Variablen dann darauf zu beziehen:
 
Code: Alles auswählen
type
  TPerson: record
    Name: string [30];
    Vorname: string [30];
    Telefonnummern: Array [1..2] of string [20];
  end;
 
var
  Person_1,
  Person_2 : TPerson;
 
...
 
begin
  Person_1.Name := 'Mustermann';
  Person_1.Vorname := 'Max';
  Person_2.Name := 'Rampensau';
  Person_2.Vorname := 'Moritz';
  ...
end;
Warum das "
T" vorne bei "
TPerson"? Das kannst Du auch weglassen, es ist nur eine ganz sinnvolle Konvention, um schon in der Namensgebung anzudeuten, daß es sich hierbei um einen 
Typ handelt. Wichtig ist aber vor allem, daß Du den Umgang mit 
Typen und 
Variablen lernst und verstehst, wieso diese Unterscheidung ganz nützlich ist.
 
Der nächste Schritt wäre dann, herauszufinden, wie Du 
mehrere Personen erfassen kann, ohne jedesmal eine neue Variable "
Person_n" deklarieren zu müssen. Du hast die Telefonnummern ja schon als 
statischen String-Array definiert. Genauso gut könntest Du nun Deine Personen-Einträge als Array definieren:
 
Code: Alles auswählen
var
  Personen : Array[1..20] of TPerson;
...
begin
  Personen[5].Telefonnummern[9] := '1234567';
end;
Der nächste Schritt wäre, 
statische Arrays durch 
dynamische zu ersetzen. Und noch einen Schritt weiter könntest Du Dich dann an eine 
TList wagen, was gar kein so schlechter Einstieg in das Thema "
Objekte" wäre.
Oder Du kannst auch mal den Versuch unternehmen, eine 
verkettete Liste selbst zu programmieren. Dazu braucht es ja nicht viel: Wenn Du Deiner Record-Deklaration noch ein Feld "
NaechstePerson : {Zeiger auf Record:} ^TPerson" hinzufügen würdest, hättest Du schon eine 
einfach verkettete Liste. Noch ein Feld namens "
VorigePerson", und Deine Liste wäre schon 
doppelt verkettet - okay: 
Verwalten mußt Du das Ganze dann natürlich auch noch, also die entsprechenden Einträge setzen bzw. aktualisieren. Aber so richtig nützlich ist das Ganze nicht wirklich, denn Du müßtest Dich dann jedemal zu einem bestimmten Eintrag durchhangeln, während Du bei Arrays oder Listen viel einfacher per Index auf jeden einzelnen Eintrag zugreifen kannst. Das wäre also eine ganz nette Übung, mehr aber auch nicht.
Wie kannst Du Dir diese Dinge nun am effizientesten erschließen? Wichtig ist zunächst mal, daß Du Dich mit dem Hilfesystem von Lazarus vertraut machst. Das ist nicht wirklich anfängertauglich, aber Du brauchst es ständig im Hintergrund - das wird später immer wichtiger werden. Ansonsten ist das ständige Googeln auch nicht das beste Mittel: Versuch mal, eine lesbare Einführung in die Sprache Pascal aufzutreiben und arbeite die (systematisch oder auch querbeet, je nach persönlichen Vorlieben) durch . Das an einem Beispiel-Adressbuch durchzuspielen, machst Du schon ganz richtig!
Gruß Rüdiger