Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi nur eine if-Schleife ausführen (https://www.delphipraxis.net/141132-nur-eine-if-schleife-ausfuehren.html)

Jürgen Thomas 3. Okt 2009 11:22

Re: nur eine if-Schleife ausführen
 
Dann brauchst du eine zusätzliche boolesche Variable, die vor der for-Schleife auf false gesetzt wird und bei jedem Treffer (ähnlich dem bisherigen ShowMessage) auf true geändert wird; wenn sie nach der for-Schleife immer noch false ist, dann kommt einmalig die gewünschte Schlussmeldung.

Merke: Wenn etwas bei einer Schleife nur einmal gemacht werden soll, gehört es nur selten in die Schleife.

Jürgen

messie 3. Okt 2009 11:58

Re: nur eine if-Schleife ausführen
 
Ich glaube, Du würdest besser mit einem repeat...until statt mit for klarkommen.

Delphi-Quellcode:

var
  bExit : boolean;
  i : integer;

begin
  bExit := false;
  i := 0;
  repeat
    if dieses then
    begin
      //Anweisung
      bExit := true;
    end
    else if jenes then
    begin
      //Anweisung
      bExit := true;
    end
    //....weiter so bis
    else if i = C2.Items.Count-1 then
    begin
      //hier wolltest Du noch was machen weil keine Bedingung erfüllt wurde...
      bExit := true;
    end;


    inc(i);
  until bExit;


end.
Ungetestet, aber so wäre es evtl. übersichtlicher und Du würdest das break sparen, was von den Verfechtern der reinen Lehre gerne angemeckert wird.

Grüße, Messie

Wolfgang Mix 3. Okt 2009 12:48

Re: nur eine if-Schleife ausführen
 
@ Matze:
Zitat:

erstens gibt es keine if-Schleifen,
Ich weiss, dass folgender Code verpönt ist, aber es scheint sie doch noch zu geben ;-)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
label hier;
begin
    i:=0;
    hier:
    inc (i);
    if i < 10 then goto hier;
    edit1.Text:=IntToStr(i);
end;

@alle

Das mit dem Goto bitte ganz schnell wieder vergessen, sonst mache ich mich hier unbeliebt :-D

Gruß

Wolfgang

himitsu 3. Okt 2009 13:01

Re: nur eine if-Schleife ausführen
 
Zitat:

Zitat von Wolfgang Mix
@alle
Das mit dem Goto bitte ganz schnell wieder vergessen, sonst mache ich mich hier unbeliebt :-D

wenn man weiß was man macht, dann ist Goto ein ganz legitimier Befehl.
Immerhin baut While-Do, Repeat-Unit, Case, If-Then-(Else) und sogar Try-Except/Finally intern auch nur auf Goto auf ... also auf Jump-Befehlen (ASM)

Lannes 3. Okt 2009 13:27

Re: nur eine if-Schleife ausführen
 
Hallo,

Zitat:

Zitat von Jaegermeister1992
Also das funktioniert mitlerweile recht gut nun noch eine Frage:

die selbe For.Schleife wie vorhin.
Wenn nun aber keine if Anweisung in der Schleife erfüllt wird, dann soll ... passieren
Delphi-Quellcode:
//...
      AnzahlC2:=AnzahlC2-1;
      NachlegenC2;
      break;
    end
    else Showmessage('Hallo');
  end;
So habe ich mir das gedacht, aber dann macht er es nach jederm SChleifendurchlauf aber er soll es nur machen wenn die schleife durch ist und nichts passiert ist.

dann frag doch ob die Schleife durch ist:
Delphi-Quellcode:
//...
      AnzahlC2:=AnzahlC2-1;
      NachlegenC2;
      break;
    end
    else if i = C2.Items.Count-1 then // das war der letzte Durchgang
      Showmessage('Hallo');
  end;
//Edit: Ich sehe gerade das es im Grunde das gleiche wie der Vorschlag von messie ist.

himitsu 3. Okt 2009 13:33

Re: nur eine if-Schleife ausführen
 
ich mach es immer so ... finde es so jedenfalls verständlicher
Delphi-Quellcode:
i := 0;
while i < C2.Items.Count do
begin
  if dieses then
  begin
    // Anweisung
    Break;
  end
  else if jenes then
  begin
    // Anweisung
    Break;
  end
  Inc(i);
end;
if i = C2.Items.Count then
begin
  // Anweisung, wenn nichts zutraf
end;
(theoretisch könnte man auch das ELSE hier weglassen, da es vom Aufrufpfad her auf's Selbe rauskommt.

Jaegermeister1992 3. Okt 2009 14:45

Re: nur eine if-Schleife ausführen
 
Danke Danke so funktionierts

Rudirabbit 3. Okt 2009 18:32

Re: nur eine if-Schleife ausführen
 
Hallo
Zitat von Wolfgang Mix:
Zitat:

Das mit dem Goto bitte ganz schnell wieder vergessen, sonst mache ich mich hier unbeliebt Very Happy
Ich hatte den "Goto" noch nie vermisst, und noch nie gebraucht.
Erinnert mich auch an den üblen Basic Code (vor ca. 20 Jahren)

Zitat von himitsu:
Zitat:

Immerhin baut While-Do, Repeat-Unit, Case, If-Then-(Else) und sogar Try-Except/Finally intern auch nur auf Goto auf ... also auf Jump-Befehlen (ASM
Stimmt - ASM ist auch nur ein Spaghetticode - Letztendlich nur das versteht die Cpu.

Wolfgang Mix 3. Okt 2009 18:46

Re: nur eine if-Schleife ausführen
 
Der Code von mir stammt noch aus den 70er Jahren unter FORTRAN77.
Der wurde uns damals tatsächlich als IF-Schleife verkauft.
Übrigens: Zum Testen musste man die Befehle einzeln auf Lochkarten stanzen,
beim Uni-Computerzentrum eine Testzeit beantragen usw.
Wenn ich dann gelegentlich nicht über den Begriff IF-Schleife stolpere, so bitte ich um Nachsehen.

Gruß

Wolfgang

P.S.:Ich hoffe, Matze ist von mir als Pauker nicht mehr so ganz enttäuscht. ;-)

himitsu 3. Okt 2009 20:05

Re: nur eine if-Schleife ausführen
 
Bist ja anscheinend nicht der einzige Lehrer, welcher von IF-Schleifen redet,
jedenfalls, wenn man betrachtet, wieviele Schüle hier so vorbeikommen und auch davon reden
(es sei denn die waren rein zufällig alle bei dir :lol: )

also keine Sorge


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 Uhr.
Seite 3 von 4     123 4      

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