Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi < und > deklarieren oder sowas (https://www.delphipraxis.net/71696-und-deklarieren-oder-sowas.html)

hille 19. Jun 2006 16:46


< und > deklarieren oder sowas
 
Hi,
also der Titel sagt ja erstmal nicht viel, denn das Problem war das ich nicht wusste wie ich es nennen kann. Aber Egal.

Mein Problem:
ich möchte Karten in ihrer Wertigkeit geordnet haben. Also Schell 7 größer als grün Unter. Für die kartenbeschreibung hätte ich gedacht Schell 7 = S7 ,
Grün Unter = GU. Aber wie kann ich dies nun der größe nach ordnen bzw. angeben?

Geht: S<H<G<K (schell<herz<grün<kreuz)?

Hille

PS: Bin noch nicht alzulange beim programmieren, aber es kann auch etwas komplizierter sein.

omata 19. Jun 2006 16:49

Re: < und > deklarieren oder sowas
 
Erstelle dir einen Aufzählungstyp...

Delphi-Quellcode:
type
  TKarten = (schell, herz, gruen, kreuz);

const Karten:array[TKarten] of string = ('schell', 'herz', 'grün', 'kreuz');
MfG
Thorsten

hille 19. Jun 2006 16:53

Re: < und > deklarieren oder sowas
 
Und wie kann ich dann schell < herz machen?

PS: Soweit war ich im lernen noch nicht. Kannst du mir das genauer erklären?

Hille

DGL-luke 19. Jun 2006 16:59

Re: < und > deklarieren oder sowas
 
Delphi-Quellcode:
type
  TFarbe = (schell, herz, gruen, kreuz);
  TWert = (6,7,8,9,10,U,O,K,Sau);
  TKarte = record
    farbe: TFarbe;
    Wert: TWert;
  end;
jetzt sollte es schon möglich sein zu sagen

Delphi-Quellcode:
var karte1,karte2: TKarte;

if (karte1.farbe < karte2.farbe) or ((karte1.farbe = karte2.farbe) and (karte1.wert < karte2.wert)) then
  Showmessage('Karte1 weniger wert als Karte2!');
Wenn aber
Ansonsten musst du dase alles nach integer casten, also Delphi sagen, es soll die variable wie eine zahl behandeln:

Delphi-Quellcode:
if (Integer(karte1.farbe) < Integer(karte2.farbe)) ...... //usw. usf.

hille 19. Jun 2006 17:02

Re: < und > deklarieren oder sowas
 
Danke,
aber das wird bestimmt richtig viel, bei 32 verschiedenen Karten!

Und record, was heißt das?

Hille

omata 19. Jun 2006 17:04

Re: < und > deklarieren oder sowas
 
Also, ich weiss ja nicht was du genau vorhast...

Die Elemente eines Aufzählungstyp haben eine Wertigkeit. (So wie die Reihenfolge in der Deklaration)
Aufzählungstypen sind nur für die innere Verarbeitung da. Sie machen deinen Quellcode übersichtlicher. Ausgeben kann man sie nicht, deshalb das konstante Array. Mit Karten[herz] kommt man nun an den Text für das Element herz. Wenn du jetzt mit Mengen arbeiten würdest, dann könntest du mit einer FOR-Schleife die Menge überprüfen. Ist das zu testende Element in der Menge, wird es ausgegeben. Durch die innere Reihenfolge des Typs, wird immer alles genau in dieser Reihenfolge ausgegeben. Beim zusammenstellen der Menge brauchst du dir dann keine Gedanken mehr über die Reihenfolge zumachen. Doppelte Elemente werden dann auch gleich ausgeschlossen bzw. kommen nur einmal vor.

Beispiel...

Delphi-Quellcode:
type TKartenmenge = set of TKarten;
var Karte:TKarten;
begin
  Kartenmenge:=[herz];
  for Karte:=low(TKarten) to high(TKarten) do
    if Karte in Kartenmenge then
      Ausgabe von Karten[Karte]
end;
@DGL-luke:
nix casten! Da nimmt man die Ordinalzahl (Ord-Funktion)
Und ausserdem haben Elemente von Aufzählungstypen schon von sich aus eine Reihenfolge und können über diese miteinander verglichen werden.

MfG
Thorsten

hille 19. Jun 2006 17:06

Re: < und > deklarieren oder sowas
 
Danke, damit kann ich schon was anfangen. Ich werde mal ausprobieren ob es so
klappt wie ich es mir vorgestellt habe.

Hille


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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