Autor Beitrag
Grimsch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 27.09.09 16:42 
hi ich mal wieder^^

da meine bisherigen Errungenschaften an Wissen über Records bisher noch nicht ausreichen um für mein Projekt eine vernünftige Punktzahl zu bekommen habe ich mir gedacht dass ich versuche noch Tiefer in die Materie von Records eindringen muss. :)
Und da hab ich mir gedacht, dass es ja auch verschiedene Programme gibt in denen in einem Record weitere Records eingespeist sind und dass ich mich darüber erkundigen will. Allerdings habe ich bisher nichts konkretes an Erklärungen gefunden und mir ist der Sinn des Ganzen noch nicht ganz klar geworden.
Könntet ihr mir das vllt. erklären wozu man genau Records im Record braucht und vllt ein kleines Beispiel angeben, welches genau zeigt, dass bei diesem Programm ein Record im Record von Nöten ist und man das nicht so einfach ohne machen kann? Falls es sowas gibt^^
Möglichst ohne Arrays bitte :P

MfG
anbest
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 17

Win XP Prof. SP 3
Delphi 2006 Arch.
BeitragVerfasst: So 27.09.09 18:26 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
type
  TGeburtstag = record
    Tag: Integer;
    Monat: Integer;
    Jahr: Integer;
  end;

  TMensch = record
    Vorname: string;
    Nachname: string;
    Geburtstag: TGeburtstag;
  end;

  TTier = record
    Spitzname: string;
    Geburtstag: TGeburtstag;
  end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  Mensch: TMensch;
  Tier: TTier;
begin
  Mensch.Vorname := 'Hans';
  Mensch.Nachname := 'Wurst';
  Mensch.Geburtstag.Tag := 3;
  Mensch.Geburtstag.Monat := 5;
  Mensch.Geburtstag.Jahr := 1990;

  ShowMessageFmt('%s %s geboren am %d.%d.%d', [Mensch.Vorname,
    Mensch.Nachname, Mensch.Geburtstag.Tag, Mensch.Geburtstag.Monat,
    Mensch.Geburtstag.Jahr]);

  Tier.Spitzname := 'Bonny';
  Tier.Geburtstag.Tag := 6;
  Tier.Geburtstag.Monat := 10;
  Tier.Geburtstag.Jahr := 1996;
end;


Ein Record im Record kann man benutzen wenn man mehrere gleiche Variablen in 2 Verschiedenen Records braucht, wie jetzt z.B.
bei diesem Beispiel: "TMensch" und "TTier", haben beide ein Geburtstag, und deshalb hab ich jetzt einfach mal ein
extra Record für diesen Geburtstag erstellt.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 27.09.09 18:49 
Oder wenn man ähnliche Attribute zweimal im selbem record oder der selben Klasse braucht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TDatum = record
    Tag, Monat, Jahr: integer;
  end;

  TMensch = record
    Vorname, Nachname: string;
    Geburtstag, Hochzeitstag: TDatum;
  end;
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 27.09.09 19:59 
ok danke aber inwiefern ist das hilfreich? man könnte doch genausogut auch anstatt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TDatum = record
    Tag, Monat, Jahr: integer;
  end;

  TMensch = record
    Vorname, Nachname: string;
    Geburtstag, Hochzeitstag: TDatum;
  end;

auch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
type
  TMensch = record
    Vorname, Nachname, Tag, Monat, Jahr: string;
  end;

schreiben oder nicht? nur wäre es im diesem Fall vllt. nicht ganz so übersichtlich als wenn man einen richtigen Pfad angeben kann mit geburtstag.tag usw. oder wie seht ihr das? ich muss das selbst ja irgendwie meinen klassenkameraden als Vortrag beibringen und denen vermitteln warum das alles so ist^^
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 27.09.09 20:07 
dann berechne mal lockerflockig den abstand zwischen Geburtstag und Hochzeitstag ohne Typumwandlung^^ da helfen integer schon enorm.
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 27.09.09 22:21 
ja ok dann würde es halt so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type
  TMensch = record
    Vorname, Nachname: string;
    Tag, Monat, Jahr: integer;
  end;


aber das hilft mir noch immer nicht weiter da ich nun immernoch nich weiß ob es mit 2 records besser ist als alles in einen reinzustecken so wie ich es eben gemacht hab und warum? oder eben so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TDatum = record
    Tag, Monat, Jahr: integer;
  end;

  TMensch = record
    Vorname, Nachname: string;
    Geburtstag, Hochzeitstag: TDatum;
  end;
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 27.09.09 22:24 
du hast das Beispiel selbst aufgeschrieben... Wenn du den gleichen Datentyp mehrfach brauchst, sehen Records einfach besser aus und sind übersichtlicher.
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 27.09.09 22:38 
ok danke also würde es wenn mich nun jemand fragen würde "Warum ein Record im Record wenn das auch mit nur einem Record gehen würde" wäre die Antwort im Grunde einfach nur "Damit der Record übersichtlicher ist und stylistisch besser aussieht" richtig? =)
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 27.09.09 22:42 
am besten wäre:

"weil es stilistisch besser und übersichtlicher ist, einzelne Bereiche in einzelne Typen auszulagern. Ein Mensch hat nicht die Eigenschaft Tag, dafür aber ein Datum, während ein Mensch die Eigenschaft Geburtsdatum hat."
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 27.09.09 22:42 
user profile iconGrimsch hat folgendes geschrieben Zum zitierten Posting springen:
ok danke aber inwiefern ist das hilfreich? man könnte doch genausogut auch anstatt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TDatum = record
    Tag, Monat, Jahr: integer;
  end;

  TMensch = record
    Vorname, Nachname: string;
    Geburtstag, Hochzeitstag: TDatum;
  end;

auch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
type
  TMensch = record
    Vorname, Nachname, Tag, Monat, Jahr: string;
  end;

schreiben oder nicht?

Das geht nur dann, wenn Geburtstag und Hochzeitstag auf den selben Tag fallen :mrgreen:
Wenn du es so machen möchtest, hieße es:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
type
  TMensch = record
    Vorname, Nachname, Geburtstag_Tag, Geburtstag_Monat, Geburtstag_Jahr, Hochzeitstag_Tag, Hochzeitstag_Monat, Hochzeitstag_Jahr: string;
  end;

und das ist dann schon sehr unübersichtlich ;)

mfg
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 28.09.09 12:27 
ah ok alles klar vielen dank euch allen =)