Delphi-PRAXiS

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)

Poring 15. Nov 2007 21:21


Problem: While Schleife
 
Hallo,
ich möchte folgendes gerne vereinfachen:
Delphi-Quellcode:
while (a=b) or (a=c) or (a=d) ... do begin
Die variablen enthalten normale integer werte.
Habe mir gedacht man könnte dies auch so vereinfachen:
Delphi-Quellcode:
while a=b,c,d,e... do begin
Dies geht jedoch nicht.
Gibt es eine möglichkeit dies zu vereinfachen?

Mfg

mkinzler 15. Nov 2007 21:22

Re: Problem: While Schleife
 
Delphi-Quellcode:
while a in ( a, b, c, ...)

Dax 15. Nov 2007 21:24

Re: Problem: While Schleife
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
while a in ( a, b, c, ...)

Hier geht es aber um Pascal, nicht SQL. Du könntest höchstens Sets meinen, aber die kommen nur mit Bytes klar ;)

mkinzler 15. Nov 2007 21:27

Re: Problem: While Schleife
 
Dann nehme ich alles zurück

Poring 15. Nov 2007 21:35

Re: Problem: While Schleife
 
Also gibt es keine möglichkeit dies zu vereinfachen? :(

Dax 15. Nov 2007 21:37

Re: Problem: While Schleife
 
Es gibt praktisch nur die von dir am Anfang gezeigte Möglichkeit.

Poring 15. Nov 2007 21:39

Re: Problem: While Schleife
 
:( Schade, naja trozdem danke!

Poring 15. Nov 2007 22:04

Re: Problem: While Schleife
 
Gibt es denn eine möglichkeit bei IF?
Delphi-Quellcode:
if a=b,c,d... then repeat ... until ...

Dax 15. Nov 2007 22:06

Re: Problem: While Schleife
 
Nein.

raiguen 15. Nov 2007 22:27

Re: Problem: While Schleife
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
while a in ( a, b, c, ...)

Nicht ganz, aber fast richtig ;):
Delphi-Quellcode:
while a in [ b, c, d]
Und man staune: es funzt so gar :lol:
Zitat:

Zitat von Poring
Gibt es denn eine möglichkeit bei IF?
Delphi-Quellcode:
if a=b,c,d... then repeat ... until ...

Zitat:

Zitat von Dax
Nein.

wiederum nicht ganz richtig zumindest bis zum repeat :roll:
Delphi-Quellcode:
 if a in [b,c,d] then begin ...
[EDIT] der Vollständigkeit halber noch das hier
Delphi-Quellcode:
repeat
//--mach was mit a
until a in [b,c,d]
[/Edit]
So mal so rein theoretisch in den Raum geworfen; der Verwendungszweck der Konstrukte ist natürlich sinnnvoll oder auch nicht - kommt halt auf die Programmlogik an...

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:10 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