AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zuweisung für FOR-Schleifenvariablen wird nicht akzeptiert
Thema durchsuchen
Ansicht
Themen-Optionen

Zuweisung für FOR-Schleifenvariablen wird nicht akzeptiert

Ein Thema von Alexander Roth · begonnen am 7. Apr 2006 · letzter Beitrag vom 7. Apr 2006
Antwort Antwort
Seite 2 von 2     12   
NicoDE
(Gast)

n/a Beiträge
 
#11

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 09:31
Zitat von sakura:
Das dreifache Break, wie von NicoDE gezeigt, ist hier der sauberste Lösungsweg.
Das hängt, meiner Meinung nach, vom jeweiligen Code ab...
Um die drei Schleifen zu verlassen, würde ich Goto einsetzen (für mich einer der wenigen sinnvollen Einsatzmöglichkeiten dieses Sprachelements).
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#12

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 09:34
Huh?
Exit, Break und Continue sind der saubere Ersatz fuer goto. Alle drei sind notwendig, aber sollten sparsam eingesetzt werden.
In diesem Fall ist Exit die sauberste Moeglichkeit aus der innersten Schleife auszubrechen.
Am lesbarsten ist es nur die Schleifen in eine lokale Prozedur zu extrahieren. Der Vorschlag mit try finally ist nicht so leicht zu durchschauen.
Es ist auch der effizienteste Weg. Dreifaches Break heisst zwei zusaetzliche Tests.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 10:02
Da die Möglichkeit besteht diese Schleifen durch bedingte Schleifen wie "while do" und "repeat until" zu ersetzen sind es diese Sprachkonstrukte die am saubersten sind.

Die Feststellung sie wären "unpraktisch" glaube ich einfach nicht, eher vermute ich das das Problem konzeptionell vom Programmierer falsch angegangen wurde !

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 10:19
Zitat von negaH:
Die Feststellung sie wären "unpraktisch" glaube ich einfach nicht, eher vermute ich das das Problem konzeptionell vom Programmierer falsch angegangen wurde !
Also hör mal! Das kann man auch netter ausdrücken.

Ausserdem ist es auch viel Geschacksache ob, man jetzt For Schleifen mir break, oder while schleife mit dem Zuweisen der laufvariablen löst.

Ich glaub jetzt auch langsam, dass while schleifen da etwas kürzer wären.

Tschüss

Danke für eure Hilfe
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 11:08
Ich glaub hier könnte man auch mal wieder das nette goto anwenden
Delphi-Quellcode:
for la:=0 to max.a do
  for lb:=-max.b to max.b do
    for lc:=-max.c to max.c do
    begin
//jetzt kommt viel blabla
      //aussenwelt
      if (maxlauf>5000)or (i mod 10=0 ) then
      begin
        application.ProcessMessages;
        if stop then goto abc;
        label2.Caption:=inttostr(maxformel-i);
      end;
//jetzt kommt viel blabla
    end;
abc:
Zitat von Sharky:
den Laufvariablen einer FOR-Schleife kannst Du nichts zuweisen. Diese werden quasi vom Compiler "wegoptimiert".
Das entspricht nicht ganz der Wahrheit, es gibt zwar einen Weg solche Variablen zu ändern, aber viele würden es bestimmt nicht als "sauber" ansehn,
drumm laß ich dat ma mit dem Beispielcode ... will ja keine "schlechten" Praktiken verbreiten ^^
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#16

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 11:23
Zitat von Alexander Roth:
Zitat von negaH:
Die Feststellung sie wären "unpraktisch" glaube ich einfach nicht, eher vermute ich das das Problem konzeptionell vom Programmierer falsch angegangen wurde !
Also hör mal! Das kann man auch netter ausdrücken.
Ich finde Hagens Beitrag in keinster Weise unfreundlich. Ich kann mir ebenfalls durchaus vorstellen, dass sich das Problem vielleicht vom Konzept her anders lösen lassen könnte.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 11:53
Hi,

Die While-Schleifenlösung ist zwar vom Sprachkonzept her die sauberste, aber in der Realität grauenvoll.

Delphi-Quellcode:
i:=0;
While (i<m) and Not AbortedByInnerCode Do Begin
  j := 0;
  While (j<n) and Not AbortedByInnerCode Do Begin
    k := 0;
     While (k < r) and Not AbortedByInnerCode Do Begin
       l := 0;
       While (l < p) and Not AbortedByInnerCode Do Begin
         If DoSomeThing = DoesNotWork Then
           AbortedByInnerCode := True;
         l := l + 1;
       End;
       k := k + 1;
     End;
     j := j + 1;
  End;
  i := i + 1;
End;
Äh.. sauber?

Hier die Goto-Version: Ich finde das besser, weil es lesbarer und *kein* Spaghetticode ist. Denn nicht jedes Goto macht aus Code gleich eine Frickelschusterei. Goto ist ein legitimer Befehl, der -richtig (und damit sparsam!) dosiert- den Code übersichtlicher macht.
Delphi-Quellcode:
For i:=0 t o m-1 do
  For j:=0 to n-1 do
    For k:=0 to r-1 do
     For l:=0 to p-1 do
       If DoSomeThing = DoesnotWork Then
          Goto ExitLoop;

ExitLoop:
Mal ehrlich: Was ist übersichtlicher?
Ich würde allerdings eine lokale Prozedur verwenden:
Delphi-Quellcode:
Procedure OuterProc;
Var
  m,n,o,p : Integer;

  Procedure InnerLoop;
  Var
    i,j,k,l : Integer;
 
  Begin
    For i:=0 t o n-1 do
      For j:=0 to m-1 do
        For k:=0 to o-1 do
          For l:=0 to p-1 do
            If DoSomeThing = DoesnotWork Then
              Exit;
  End;

Begin
  ...
  InnerLoop;
  ...
End;
Damit sind die Goto-Ablehner zufriedengestellt. Ach so, die lokale Prozedur bekommt natürlich einen aussagekräftigen Namen. Denn eigentlich ist es ein 'ausführbarer Kommentar'.

Unabhängig davon, ob 4 verschachtelte Schleifen nicht vielleicht ein falsches Konzept/Algorithmus implizieren, ist die Beendigung aus dem inneren von Schleifen eine generelle Frage, die ich, einmal beantwortet, konsistent und konsequent durch den Code ziehen würde. Also
Entweder IMMER
- mit While-Schleifen arbeiten und einen Flag mitschleppen, ODER
- mit Goto arbeiten, ODER
- mit lokalen Prozeduren und Exit.

Ach, eins noch: Eine andere (sinnvolle) Verwendung für das GOTO fällt mir übrigens nicht ein, Euch etwa?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#18

Re: Zuweisung für FOR-Schleifenvariablen wird nicht akzeptie

  Alt 7. Apr 2006, 13:35
Hi

die Schleifen laufen

Delphi-Quellcode:
for i := 0 to m-1 do
  for j := 0 to n-1 do
    for k := 0 to r-1 do
      for l := 0 to p-1 do
von 0 bis m * n * r * p -1, meiner Meinung nach reicht eventuell auch nur eine Schleife aus.

@Alexander: Ja man könnte es auch "höflicher" ausdrücken:

Lieber Alexander, könnte es unter Umständen, ich meine ja nur, vielleicht wäre es sinnvoll dein Problem mal im Gesamtkontext zu erläutern, weil es könnte ja durchaus die klitzekleine Möglichkeit bestehen, das man auf diese vielen Schleifen verzichten kann ?

Ändert nichts an der Sache, ich finde meine erste Aussage nicht falsch, noch beleidigend, sondern leider allzuoft eine Tatsache. Also wozu um den heisen Brei reden.

Erkläre doch mal dein gesamtes Verfahren.

Ansonsten stimme ich Alzaimar zu wenn er den Vorschlag macht mit Exit in einer nested Funktion zu arbeiten. Das ist besser als ein verschachteltes Break/Continue da es dort öfters Probleme gibt beim Verständis wohin nun "ge-breakt"/"ge-continued" wird. Besonders bei Sprachübergreifender Betrachtungsweise stellt sich nämlich heraus das Break/Continue abhängig von der Sprache unterschiedlich arbeiten. Das kann bei Exit/Return() (und meinetwegen auch einem GOTO zu einem LABEL) etc. nicht passieren.


Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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