Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mit case bei mehreren Werten mehrere Anweisungen ausführen (https://www.delphipraxis.net/69140-mit-case-bei-mehreren-werten-mehrere-anweisungen-ausfuehren.html)

Hallo_Thomas 10. Mai 2006 19:23


mit case bei mehreren Werten mehrere Anweisungen ausführen
 
Wie kann man 2,3 Werte effizent ausführen?

Hab's mir ungefähr so vorgestellt:

Delphi-Quellcode:
Case i,x of
1:;
2:;
1 and 2:;

fwsp 10. Mai 2006 19:25

Re: mit case bei mehreren Wert mehrere Anweisungen ausführen
 
case möchte einen ordinalen typ. entweder musst du die werte einzeln auswerten oder das mit if else if ... machen.

Delphi-Quellcode:
 if (i = ?) and (x = ?) then
   ...
 else if (i = ?) then
   ...
 else if (x = ?) then
   ...;

Hallo_Thomas 10. Mai 2006 19:50

Re: mit case bei mehreren Werten mehrere Anweisungen ausführ
 
Irgendwie häng ich da gerad auch fest.

Wie frage ich da 3 Werte so ab, der befehl sollte in eine If abfrage oder so passen!

Ich habe drei Variablen.(Jeweils Zahlen zw. 0..9;x,i,y) und es sollen 50 mögliche variationen abgefragt werden:
Hier zum Beispiel ob die Variablen 2,3 enthalen

Delphi-Quellcode:
 if (x in [2,3]) and (i in [2,3])and (y in [2,3]) then
Erklärung:
i:=2; x:=2; y:=2;Hier sollte ein False kommen, da keine 3 enthalten ist.
i:=3; x:=2; y:=2;Hier sollte ein True kommen, da eine 2 & 3 enthalten ist.
i:=1; x:=2; y:=3;Hier sollte ein True kommen, da eine 2 & 3 enthalten ist.

Hawkeye219 10. Mai 2006 20:04

Re: mit case bei mehreren Werten mehrere Anweisungen ausführ
 
Hallo,

wie wäre es damit?

Delphi-Quellcode:
type
  TDigit = 0..9;
  TDigitSet = set of TDigit;

function Check (a, b, c: TDigit; const aSet: TDigitSet): Boolean;
begin
  Result := ([a, b, c] * aSet = aSet);
end;
Die Anwendung:

Delphi-Quellcode:
Flag := Check(2, 2, 2, [2, 3]); // liefert False
Flag := Check(3, 2, 2, [2, 3]); // liefert True
Flag := Check(1, 2, 3, [2, 3]); // liefert True
Gruß Hawkeye

Hallo_Thomas 10. Mai 2006 20:37

Re: mit case bei mehreren Werten mehrere Anweisungen ausführ
 
Perfekt,genau dass hab ich gesucht

Hallo_Thomas 10. Mai 2006 21:04

Re: mit case bei mehreren Werten mehrere Anweisungen ausführ
 
Sorry eine Sache hatte ich noch vergessen:

Flag := Check(2, 2, 2, [2, 2]); // liefert True, perfekt
Flag := Check(1, 2, 2, [2, 2]); // liefert True, perfekt
Flag := Check(1, 1, 2, [2, 2]); // liefert True, hier wöllte ich gern false

Hawkeye219 10. Mai 2006 22:41

Re: mit case bei mehreren Werten mehrere Anweisungen ausführ
 
Ok, ist das besser?

Delphi-Quellcode:
function Check (a, b, c: TDigit; const aSet: TDigitSet): Boolean;
begin
  Result := (([a, b] = aSet) or ([b, c] = aSet) or ([a, c] = aSet));
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz