Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem: While Schleife (https://www.delphipraxis.net/103449-problem-while-schleife.html)

Progman 16. Nov 2007 07:24

Re: Problem: While Schleife
 
die IN-Variante geht nur mit Sets, da dürfen a, b, c nur ordinale Typen (Byte, Char) sein, aber keine Integer oder Strings.
Ne Variante wäre:
Delphi-Quellcode:
case a of
  b, c, d: Machwas
 else machnix
end
hier können auch Integer genommen werden.

Sharky 16. Nov 2007 08:54

Re: Problem: While Schleife
 
Hai,

warum nicht eine kleine Hilfsfunktion basteln?
Delphi-Quellcode:
function InArray(aValue: Integer; aArray: array of Integer): Boolean;
var
  i: Integer;
begin
  result := False;
  for i := Low(aArray) to High(aArray) do
  begin
    if (aValue = aArray[i]) then
    begin
      result := True;
      Exit;
    end;
  end;
end;

procedure TDemo_Form.Button1Click(Sender: TObject);
var
  a, b, c, d: Integer;
begin
  a := 1;
  b := 2;
  c := 3;
  d := 4;
  while InArray(a, [b, c, d]) do
  begin
  end;
end;

raiguen 16. Nov 2007 09:08

Re: Problem: While Schleife
 
Zitat:

Zitat von Progman
die IN-Variante geht nur mit Sets, da dürfen a, b, c nur ordinale Typen (Byte, Char) sein, aber keine Integer oder Strings.

:roll: Ach... KEINE Integer :?: und wieso funzt es dann bei mir, wenn ich für b, c, d nen Integer verwende :gruebel: ich verwende in zahlreichen Modulen meines umfangreichen Programmes mit dieser IN-Variante, um langwierige IF-Abfragen zu umgehen :)
[EDIT] @Sharky:
Code:
while a in [b, c, d]
funzt sehr wohl, wie ich in #12 beschrieben habe
[/EDIT]

Sharky 16. Nov 2007 09:15

Re: Problem: While Schleife
 
Zitat:

Zitat von raiguen
... und wieso funzt es dann bei mir, ...

Weil Integer zu den Ordinaltypen gehören ;-) Aber die Werte dürfen dann eigentlich nur zwichen 0 und 255 liegen und im Set können maximal 256 Werte vorhanden sein. (Wenn ich es richtig im Kopf habe)

DeddyH 16. Nov 2007 09:25

Re: Problem: While Schleife
 
Zitat:

Zitat von Sharky
Aber die Werte dürfen dann eigentlich nur zwichen 0 und 255 liegen und im Set können maximal 256 Werte vorhanden sein.

Richtig. Wenn die Werte aus Variablen kommen, kommt es zum Überlauf, bei Konstanten meckert der Compiler sofort, wenn zu große Werte angegeben werden.

raiguen 16. Nov 2007 09:29

Re: Problem: While Schleife
 
@Sharky: richtig! Also funzt das mit Integer genauso, allerdings nur bis zur 'Grenze' 255 ;) Selbst bei Variablen, sofern der Wert eben diese Grenze nicht überschreitet.

LoCrux 17. Nov 2007 03:41

Re: Problem: While Schleife
 
Mh....

auch mal senfen....

NEVER use Exit in your code! (Ich weiss, ist philosophisch und hart umstritten)

Abaenderung (sorry hab nur ne Koreanische Tastatur / kein Umlaute) der Funktion von Sharky.

Delphi-Quellcode:
function InArr(const val:Integer;arr:array of integer):Boolean;
var i:integer;
begin
  result := false;
  i := low(arr); // := 0;
  while (not(result) and (i<=high(arr))) do begin result := result or (val=arr[i]); inc(i); end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  ar : array of integer;
begin
  setlength(ar,65536); // es geht auch noch groesser!!!
  for i := low(ar) to high(ar) do ar[i]:=random(MaxInt);
  if InArr(random(MaxInt),ar) then Button1.Caption:='IN' else Button1.Caption:='NOT IN';
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Seite 2 von 2     12   

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