AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

for-Schleife -Abbruch

Ein Thema von thomasschaf · begonnen am 15. Nov 2011 · letzter Beitrag vom 18. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2   
thomasschaf
(Gast)

n/a Beiträge
 
#1

for-Schleife -Abbruch

  Alt 15. Nov 2011, 13:29
Hallo,

ich möchte in einer for-Schleife gewisse Durchläufe überspringen:

Das könnte ich so machen:
Delphi-Quellcode:
for x:=a to b do begin
  if f(x)>100 then begin
    ...
  end;
end;
Allerdings habe ich viele if-Abfragen, die ineinander verschachtelt sind, doch ich kann sie nicht mit einem AND verknüpfen, da gewisse innere nicht abgefragt werden dürfen, wenn die äußere(n) FALSE liefert.

Ich möchte soetwas wie:
Delphi-Quellcode:
for x:=a to b do begin
  if not (f(x)>100) then Exit;
  ...
end;
Das wäre besser, doch bei mir wird die komplette Schleife beendet. Ich möchte aber nur gewisse Durchläufe überspringen.

Bitte um Hilfe,

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 13:32
Ich möchte aber nur gewisse Durchläufe überspringen.
Hi Thomas,

Delphi-Quellcode:
for x:=a to b do begin
  if not (f(x)>100) then continue;
  ...
end;
Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#3

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 13:51
Delphi-Referenz durchsuchenExit ist eigentlich nicht zum Beenden/Abbrechen von Schleifen gedacht, sondern zum Verlassen ganzer Prozeduren/Funktionen.

Delphi-Referenz durchsuchenBreak für Schleifen und dann eben noch das Delphi-Referenz durchsuchenContinue zum Überspringen.


PS: Ich würde eher den Vergleichsoperator umdrehen und auf das Not verzichten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Nov 2011 um 13:54 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 14:27
Allerdings habe ich viele if-Abfragen, die ineinander verschachtelt sind, doch ich kann sie nicht mit einem AND verknüpfen, da gewisse innere nicht abgefragt werden dürfen, wenn die äußere(n) FALSE liefert.
Anmerkung:
Sobald eine Bedingungen in der if-Abfrage fehlschlägt, werden alle folgenden nicht mehr geprüft. Kannst also schon Schachteln!

Beispiel:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if GetAFalseBooleanValue and GetATrueBooleanValue then
    OutputDebugString(PWideChar('Wird niemals erreicht'));
end;

function TForm1.GetAFalseBooleanValue: Boolean;
begin
  Result := False;
  OutputDebugString(PWideChar('False - Siehtste mich???'));
end;

function TForm1.GetATrueBooleanValue: Boolean;
begin
  Result := True;
  OutputDebugString(PWideChar('True - Siehtste mich???'));
end;
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#5

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 14:37
Ach, so einfach

Ich wusste doch, dass es einen Befehl dafür gibt ^^

Vielen Dank - so sieht mein Programm viel ordentlicher aus !

Thomas


Edit:
Zum "Schachteln" habe ich mich nicht so deutlich ausgedrückt, ich meinte soetwas:

Delphi-Quellcode:
if (a<>'') and (isnumeric(a)) and qx(a) then begin
  s:= a...
end;
Allerdings benütigt die Funktion "qx" schon einen numerischen nichtleeren String "a", ansonsten Fehler.
Daher muss ich machen:

Delphi-Quellcode:
if (a<>'') and isnumeric(a) then begin
  if qx(a) then s:=...
end;
so in der Art...

Geändert von thomasschaf (15. Nov 2011 um 14:43 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 15:18
Edit:
Zum "Schachteln" habe ich mich nicht so deutlich ausgedrückt, ich meinte soetwas:

Delphi-Quellcode:
if (a<>'') and (isnumeric(a)) and qx(a) then begin
  s:= a...
end;
Allerdings benütigt die Funktion "qx" schon einen numerischen nichtleeren String "a", ansonsten Fehler.
Nein, musst du nicht.
Bitte mein Beispiel mal ausprobieren!

Für dein Beispiel:
Sobald (a<>'') gleich false liefert, werden alle anderen Bedingungen die zwischen if und then stehen nicht abgefragt!

EDIT:

Würde die Prüfung sowieso in die IsNumeric() Funktion implementieren!
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 15:32
Nein, musst du nicht.
Bitte mein Beispiel mal ausprobieren!
BTW: Das stimmt nur, solange bei den Compiler-Option nicht die vollständige boolesche Prüfung aktiviert ist.

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#8

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 15:36
Allerdings benütigt die Funktion "qx" schon einen numerischen nichtleeren String "a", ansonsten Fehler.
Dann würde ich an deiner Stelle diese Prüfung allerdings in der Funktion selbst einbauen.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#9

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 17:02
Warum das Ganze nicht übersichtlich verpacken?

Delphi-Quellcode:
Function OperationIstLegal(KandidatenIndex : Integer) : Boolean;
Begin
  Result := False;
  If KandidatIstLeer(KandidatenIndex) Then Exit;
  If Not KandidatIstNumerisch(KandidatenIndex) Then Exit;
  If KandidatHatRoteHaare(KandidatenIndex) And HeuteIstDienstag() Then Exit;
 // Hier beliebig viele Prüfungen einfügen, anfügen, erklären usw.
 //
 // Und zum Schluss
  Result := True;
End;

Procedure DieEigentlicheSchleife;
Var
  i : Integer;
Begin
  For i:=1 to VerdammtHoheZahl do
    If OperationIstLegal(i) then
      FuehreOperationAus(i);
End;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 17:17
Erst schreibst du übersichtlich und dann widersprichst du dir indem du Exit in dieser Art und Weise benutzt...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz