Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Array of Record mit Konstanten füllen

  Alt 26. Aug 2006, 12:24
Jürgens Vorschlag, die Initialisierung per Code durchzuführen, ist insbesondere bei größeren Strukturen sinnvoll. Wichtig ist es dabei, das Schreiben von initialisierten Konstanten in den Compiler-Optionen zu aktivieren. Alternativ kann das Array in den VAR-Bereich verschoben werden. Die Prüfung der Indexberechnung entfällt, wenn der Index in jedem Schritt inkrementiert wird.

Sollen - wie in Marcos Beispiel angegeben - zwei gleiche Karten im Array hintereinander abgelegt werden, kann folgender Code benutzt werden:

Delphi-Quellcode:
var
  Farbe : TKartenfarbe;
  Wert : TKartenWert;
  Index : Integer;
begin
  Index := Low(AlleKarten);
  for Farbe := Low(Farbe) to High(Farbe) do
    for Wert := Low(Wert) to High(Wert) do
      begin
        AlleKarten[Index].Farbe := Farbe;
        AlleKarten[Index].Wert := Wert;
        Inc (Index);
        AlleKarten[Index].Farbe := Farbe;
        AlleKarten[Index].Wert := Wert;
        Inc (Index);
      end;
end;
Jürgen geht davon aus, daß zwei identische Kartenstapel hintereinander im Array abgelegt werden. Dies geht mit folgendem Code:

Delphi-Quellcode:
var
  Stapel : Integer;
  Farbe : TKartenfarbe;
  Wert : TKartenWert;
  Index : Integer;
begin
  Index := Low(AlleKarten);
  for Stapel := 1 to 2 do
    for Farbe := Low(Farbe) to High(Farbe) do
      for Wert := Low(Wert) to High(Wert) do
        begin
          AlleKarten[Index].Farbe := Farbe;
          AlleKarten[Index].Wert := Wert;
          Inc (Index);
        end;
end;
Beim zweiten Code könnte man auf die äußere Schleife verzichten und die Kopie des ersten Stapels durch einen Move-Befehl erzeugen. Die dazu notwendigen Parameter (Zielindex und Umfang der Daten) müssen dann allerdings bei einer Änderung der Sets angepaßt werden.

Gruß Hawkeye
  Mit Zitat antworten Zitat