AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Array mit Subeigenschaften der Elemente?
Thema durchsuchen
Ansicht
Themen-Optionen

Array mit Subeigenschaften der Elemente?

Ein Thema von disso · begonnen am 3. Jul 2014 · letzter Beitrag vom 3. Jul 2014
Antwort Antwort
Seite 2 von 2     12   
disso

Registriert seit: 3. Jul 2014
9 Beiträge
 
#11

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 19:59
Mir ist klar, dass die Syntax so nicht funktioniert, das ist nur prinzipiell das, was ich da an der Stelle tun möchte.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 20:11
Also nehmen wir mal ein Fahrrad (nur schematisch)
Delphi-Quellcode:
TFahrrad = class
  property Vorderrad : TRad;
  property Hinterrad : TRad;

  function GehtAlsHinterrad( Rad : TRad ) : Boolean;
  function GehtAlsVorderrad( Rad : TRad ) : Boolean;
end;
Das Fahrrad hat Eigenschaften (Vorderrad, Hinterrad) und mit den beiden Methoden, kann ich das Fahrrad fragen, ob ich irgendein Rad da dranbasteln kann.

Denn es gibt ja unterschiedliche Räder (sind zwar alles Räder, aber trotzdem mit unterschiedlichen Eigenschaftswerten)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
disso

Registriert seit: 3. Jul 2014
9 Beiträge
 
#13

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 20:35
das mit dem Property war mir neu.
Ok also für meinen Fall würde ich sowas sagen wie
Delphi-Quellcode:
TFeld = class
   property KlotzA:TKlotz;
   ...
   property KlotzH:TKlotz;
   function PasstSenktrechtInsFeld(Klotz:TKlotz):Boolean;
   function PasstWaagerechtInsFeld(Klotz:TKlotz):Boolean;
end;

TKlotz=class
   private
      Anordnung: array [1..2,1..5] of integer;
end;
oder so ähnlich..?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#14

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 20:44
Das sind ja erstmal nur schematische "Beispiele" und hinter den Property versteckt sich am Ende natürlich dann auch noch entsprechende Felder (Variablen in der TFeld-Klasse).

Warum eigentlich Integer?
Die Ecken sind doch entweder da oder nicht, was dann eher ein Boolean wäre.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
disso

Registriert seit: 3. Jul 2014
9 Beiträge
 
#15

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 20:46
ja geht auch, wenn ich mein "Prüfungskonzept" eh ändern muss. Usprünglich hatte ich alle Würfel aufaddiert, da spar ich mir mit int die Umwandlung.

aber wie definiere ich denn die Klasse TKlotz innerhalb der TFeld? Oder ist TKlotz keine Klasse?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 21:23
ja geht auch, wenn ich mein "Prüfungskonzept" eh ändern muss. Usprünglich hatte ich alle Würfel aufaddiert, da spar ich mir mit int die Umwandlung.

aber wie definiere ich denn die Klasse TKlotz innerhalb der TFeld? Oder ist TKlotz keine Klasse?
Das werden beides Klassen, aber du hast eigentlich die wichtigste Klasse vergessen.

Die Würfel!
Delphi-Quellcode:
TLage = (horizontal, vertikal);

TWürfel = class
  PositionImKlotz : Integer; // 0..9
  function GetKoordinate( AIndex : Integer; ALage : TLage ) : TPoint;
end;

TKlotz = class
  Würfel : array of TWürfel;
end;

TKlotzImFeld
  Klotz : TKlotz;
  Index : Integer;
  Lage : TLage;
end;
  
TFeld = class
  Klötze : array of TKlotzImFeld;
  function IstZelleBelegt( x,y : Integer ): Boolean;
end;

function TFeld.IstZelleBelegt( AKoord : TPoint ) : Boolean;
begin
  for LKlotzInFeld in Klötze do
    for LWürfel in LKlotzInFeld.Klotz.Würfel do
      begin
        LKoord := LWürfel.Koordinate( LKlotzInFeld.Index, LKlotzInFeld.Lage );
        if LKoord = AKoord then
          Exit( True );
  Result := False;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 3. Jul 2014 um 21:28 Uhr)
  Mit Zitat antworten Zitat
disso

Registriert seit: 3. Jul 2014
9 Beiträge
 
#17

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 21:35
ich hatte gedacht, die Würfel könnte man einfach als array oder Bool machen. Das was du da geschrieben hast, muss ich morgen mal in Ruhe nachvollziehen. Danke jedenfalls schon mal!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Array mit Subeigenschaften der Elemente?

  Alt 3. Jul 2014, 21:41
ich hatte gedacht, die Würfel könnte man einfach als array oder Bool machen. Das was du da geschrieben hast, muss ich morgen mal in Ruhe nachvollziehen. Danke jedenfalls schon mal!
Die Würfel sind doch die Elemente, die andere Würfel/Klötze daran hindern auf dem Feld abgelegt zu werden. Und in der Realität passiert doch auch genau diese Interaktion zwischen den Würfeln. Darum würde ich die auch so mit in das Modell hineinnehmen. Und die Aufgabe ist quasi gelöst, wenn der Würfel seine Koordinaten im Feld bestimmen kann.

Kommst du mit einem neuen Klotz und einer gewünschten Position und Lage, dann fragst du für jeden Würfel die Koordinate zu dieser Position und Lage ab und fragst das Feld, ob alle diese Koordinaten noch frei sind.

Delphi-Quellcode:
function TKlotz.KannAnPosition( AFeld : TFeld; AIndex : Integer; ALage : TLage ) : Boolean;
begin
  for LWürfel in Würfel do
    if AFeld.IstZelleBelegt( LWürfel.GetKoordinate( AIndex, ALage ) ) then
      Exit( False );
  Result := True;
end;
Man braucht also eigentlich nur eine kleine Funktion im Würfel, der Rest ist geschicktes Abfragen dieser Funktion

PS: Anstatt der Koordinate vom Typ TPoint reicht es allerdings auch aus einfach einen Integer-Wert zurückzugeben 0..24 dadurch wird auch die Berechnung einfacher, schneller und auch der Vergleich insgesamt schneller.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 3. Jul 2014 um 21:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz