AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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      
Benutzerbild von ChrisE
ChrisE

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

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
44.557 Beiträge
 
Delphi 12 Athens
 
#2

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.
Ein Therapeut entspricht 1024 Gigapeut.

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

n/a Beiträge
 
#3

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.079 Beiträge
 
Delphi 10.4 Sydney
 
#4

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
 
#5

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
 
#6

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
 
#7

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
10.055 Beiträge
 
Delphi 12 Athens
 
#8

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
AppCentral
  Mit Zitat antworten Zitat
thomasschaf
(Gast)

n/a Beiträge
 
#9

AW: for-Schleife -Abbruch

  Alt 15. Nov 2011, 18:27
Hallo und danke für die vielen Antworten

Am Beispiel habe ich ausprobiert, dass "A AND B" einen Fehler ergibt.

Weiß vielleicht jemand, wo ich das umstellen kann ?
Müsste ja irgendwo in "Compilereinstellungen" sein...
(In meiner Signatur steht, was ich benutze.)

Die Idee, die Überprüfung in der Funktion selbst einzubauen, ist aber wohl die beste (leddls Beitrag) !
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#10

AW: for-Schleife -Abbruch

  Alt 16. Nov 2011, 09:43
Am Beispiel habe ich ausprobiert, dass "A AND B" einen Fehler ergibt.

Weiß vielleicht jemand, wo ich das umstellen kann ?
Müsste ja irgendwo in "Compilereinstellungen" sein...
(In meiner Signatur steht, was ich benutze.)
Die Standardeinstellung von Free Pascal ist es boolsche Ausdrücke abzukürzen, wenn möglich. Da er keine Kommandozeilenoption hierfür kennt, bietet Lazarus auch keine Option dafür an. Die einzige Möglichkeit dies zu beeinflussen ist innerhalb des Quellcodes:

Delphi-Quellcode:
// Shortcuts einschalten
{$B-}
// oder
{$BOOLEVAL OFF}

// Shortcuts ausschalten
{$B+}
// oder
{$BOOLEVAL ON}
Siehe auch hier.

Ich glaube auch, dass es eine lokale Einstellung ist, das heißt, dass du dies für einzelne Bedingungen ändern kannst (müsste das jedoch nachprüfen).

Zur Semantik (vielleicht hattest du ja was vertauscht):

Bei einem AND wird abgebrochen, wenn die erste Bedingung FALSE ergibt (die gesamte Bedingung kann eh nicht mehr TRUE ergeben).
Bei einem OR wird abgebrochen, wenn die erste Bedingung TRUE ergibt (die gesamte Bedingung kann eh nicht mehr FALSE ergeben).

Gruß,
Sven

PS: Die aktuelle Version von Lazarus ist mittlerweile 0.9.30 mit Free Pascal 2.4.2. Wenn du noch etwas wartest sollte auch bald 0.9.30.2 (mit Free Pascal 2.4.4) veröffentlicht werden.
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:38 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