Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi if abfrage vereinfachen (https://www.delphipraxis.net/48975-if-abfrage-vereinfachen.html)

ferby 3. Jul 2005 18:30


if abfrage vereinfachen
 
Hallo,

gibt es eine Möglichkeit so eine Abfrage


Delphi-Quellcode:
  if (feldaktive[161]<>1) and (feldaktive[162]<>1) and (feldaktive[163]<>1) and (feldaktive[164]<>1) and (feldaktive[165]<>1) and (feldaktive[166]<>1) and (feldaktive[167]<>1) and (feldaktive[168]<>1) and (feldaktive[169]<>1) and (feldaktive[170]<>1) then

zu vereinfachen?


ferby

MathiasSimmack 3. Jul 2005 18:34

Re: if abfrage vereinfachen
 
Spontan (auf Grund der Nummerierung) käme mir da eine Schleife in den Sinn, die vllt. einen bool-Wert setzt und sofort abgebrochen wird, wenn der Wert doch 1 ist. :? Hilft dir das irgendwie?


Edit: Nanu? Wo kam denn der Strich vor der 1 her?

malo 3. Jul 2005 18:34

Re: if abfrage vereinfachen
 
Delphi-Quellcode:
var i: integer; aBool: boolean;
begin
aBool := False;
For i := 161 to 170 do
  if feldaktive[i] <> 1 then
    aBool := true
  else
    begin
      aBool := false;
      break;
    end;
if aBool then
Das wäre ein möglicher Weg. ;)

//edit: Ich hätte mir die Idee vorher patentieren lassen sollen :mrgreen:

MathiasSimmack 3. Jul 2005 18:36

Re: if abfrage vereinfachen
 
Hast du doch, ich habe sie ja von dir abgeschrieben. :stupid:

BenjaminH 3. Jul 2005 18:36

Re: if abfrage vereinfachen
 
Zitat:

Zitat von ferby
Delphi-Quellcode:
  if (feldaktive[161]<>1) and (feldaktive[162]<>1) and (feldaktive[163]<>1) and (feldaktive[164]<>1) and (feldaktive[165]<>1) and (feldaktive[166]<>1) and (feldaktive[167]<>1) and (feldaktive[168]<>1) and (feldaktive[169]<>1) and (feldaktive[170]<>1) then

Sodala, ich hab nen bischen experimentiert und bin der meinung so funktioniert das auch:
Delphi-Quellcode:
if not(1 in [Feldaktive[161], Feldaktive[162],...]) Then

ferby 3. Jul 2005 18:59

Re: if abfrage vereinfachen
 
Hallo,

danke, hat das ganze wenigstens ein wenig verkürtzt.


ferby

HeZa 3. Jul 2005 19:30

Re: if abfrage vereinfachen
 
Zitat:

Zitat von ferby
Hallo,
gibt es eine Möglichkeit so eine Abfrage
Delphi-Quellcode:
  if (feldaktive[161]<>1) and (feldaktive[162]<>1) and (feldaktive[163]<>1) and (feldaktive[164]<>1) and (feldaktive[165]<>1) and (feldaktive[166]<>1) and (feldaktive[167]<>1) and (feldaktive[168]<>1) and (feldaktive[169]<>1) and (feldaktive[170]<>1) then
zu vereinfachen?
ferby

Ich würde ein Funktion daraus machen
Delphi-Quellcode:
function IstImBereich(Wert: Integer; WerteArray: array of Integer; Start, Ende: Integer;
var
  i: Integer;
begin
  Result := True;
  for i := Start to Ende do
    if Wert = WerteArray[i] then Exit;
  Result := False;
end;
Dann kannst du im deine Abfrage wie Folgt umschreiben:

Delphi-Quellcode:
  if not IstImBereich(1, feldaktive, 161, 170) then ...
Das ist flexibel und liest sich gut.

Ciao HeZa

glkgereon 3. Jul 2005 19:49

Re: if abfrage vereinfachen
 
könnte man das net so lösen?

Delphi-Quellcode:
if (1 in Arr[170,171,172...]) then

BenjaminH 3. Jul 2005 19:59

Re: if abfrage vereinfachen
 
Zitat:

Zitat von glkgereon
könnte man das net so lösen?

Delphi-Quellcode:
if (1 in Arr[170,171,172...]) then

Ja, schau mal weiter oben, hab ich ungefähr so schon vorgeschlagen, bei mir ist nur noch ein not drin...

yankee 3. Jul 2005 20:28

Re: if abfrage vereinfachen
 
@HeZa:
Ich würde das nicht so machen. Denn in deine for-schleife hast variable start- und Endwerte. Da kann die Compileroptimierung nicht so gut wirken. aus
Delphi-Quellcode:
for I:=1 to 3 do showmessage(i);
würde mit der compileroptmierung soweit ich weiß
Delphi-Quellcode:
showmessage(1);
showmessage(2);
showmessage(3);
werden, aber mit veraibeln start und Endwert geht das glaube ich nicht.

ferby's eigentliche Lösung ist zwar blöd zu lesen, aber auf grund der compileroptmierung ziemlich gut. Am besten wäre es noch die werte, die am wahrscheinlichsten false sind nach vorne zu schreiben.

Ich muss mir unbedingt diese Compileroptimierungsmethoden patentieren lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.
Seite 1 von 2  1 2      

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