Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi akzeptiert konstante Menge nicht (https://www.delphipraxis.net/108473-delphi-akzeptiert-konstante-menge-nicht.html)

easywk 14. Feb 2008 09:09


Delphi akzeptiert konstante Menge nicht
 
Moin, moin,

ich habe eine häufig durchlaufende Funktion, die testen muss, ob eine Zahl den Werten 50, 100, 200, 400 oder 800 entspricht. Eigentlich wollte ich das über eine IN-Abfrage mit einer Menge lösen:
Delphi-Quellcode:
const
  CGruppe = [50,100,200,400,800];

...

if (Zahl in CGruppe) then
  begin
    ...
  end;
Leider mag der Compiler das nicht und bringt die Meldung "Konstantenausdruck verletzt untere Grenze". Die Hilfe sagt zu dieser Meldung nichts. Kann mir das jemand erklären und eventuell eine andere Lösung anbieten?

Danke
easy

Bernhard Geyer 14. Feb 2008 09:12

Re: Delphi akzeptiert konstante Menge nicht
 
AFAIK können (ältere) Delphi-Versionen bei Mengen maximal Byte-Werte verarbeiten.
Aber du hast ja keine Menge (Set) definiert sondern ein Array.

Delphi-Quellcode:
for i := Low(CGruppe) to High(CGruppe) do
begin
  if Zahl = CGruppe[i] then
    ...
end;

DeddyH 14. Feb 2008 09:13

Re: Delphi akzeptiert konstante Menge nicht
 
Die Zahlen sind zu groß, die maximale Größe eines Mengenelementes liegt bei 255.

easywk 14. Feb 2008 09:16

Re: Delphi akzeptiert konstante Menge nicht
 
Das mit den Byte-Werten ist natürlich dumm :-(

Ich glaube aber, dass ich dann mit einer case-Anweisung besser fahren würde, weil es deutlich "billiger" ist als eine for-Schleife:
Delphi-Quellcode:
case Zahl of
   50,
  100,
  200,
  400,
  800 : begin
          ...
        end;
  end;
Danke.

DeddyH 14. Feb 2008 09:18

Re: Delphi akzeptiert konstante Menge nicht
 
Clevere Lösung in meinen Augen :thumb:

taaktaak 14. Feb 2008 09:39

Re: Delphi akzeptiert konstante Menge nicht
 
Oder die Menge um eine Zehnerpotenz reduzieren (5..80) und den Testwert anpassen, dann ginge es auch

Bernhard Geyer 14. Feb 2008 11:19

Re: Delphi akzeptiert konstante Menge nicht
 
Zitat:

Zitat von easywk
Ich glaube aber, dass ich dann mit einer case-Anweisung besser fahren würde, weil es deutlich "billiger" ist als eine for-Schleife:

Stimmt. Aber die For-Schleife könntest du in eine Funktion der Art

Delphi-Quellcode:
function IsInArray(Value: Integer; arr: array of Integer): Boolean;
packen und mehrfach für unterschiedliche Arrays verwenden.

Muetze1 14. Feb 2008 12:24

Re: Delphi akzeptiert konstante Menge nicht
 
Zitat:

Zitat von Bernhard Geyer
Aber du hast ja keine Menge (Set) definiert sondern ein Array.

Falsch. Es ist trotzdem ein Set. Bei den konstanten definitionen willst du den Wert definieren und nicht einen Typ. Somit brauchst du hier kein "Set of" sondern die eckigen Klammern sagen schon aus, dass es sich um ein Set handelt. Wäre es ein Array, dann müssten die Klammern rund sein.

Bernhard Geyer 14. Feb 2008 12:28

Re: Delphi akzeptiert konstante Menge nicht
 
Zitat:

Zitat von Muetze1
Falsch. Es ist trotzdem ein Set. Bei den konstanten definitionen willst du den Wert definieren und nicht einen Typ. Somit brauchst du hier kein "Set of" sondern die eckigen Klammern sagen schon aus, dass es sich um ein Set handelt. Wäre es ein Array, dann müssten die Klammern rund sein.

Ok. Hat mein Brain-Pascal-Compiler versagt :mrgreen:


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