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 1 von 2  1 2      
Benutzerbild von Alexander Roth
Alexander Roth

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

Zuweisung für FOR-Schleifenvariablen wird nicht akzeptiert

  Alt 7. Apr 2006, 08:56
Hallo,


der Fehler wird gemeldet:
Zitat:
[Fehler] Unit1.pas(1642): Anweisung für FOR-Schleifenvariablen 'la'
[Fehler] Unit1.pas(1643): Anweisung für FOR-Schleifenvariablen 'lb'
[Fehler] Unit1.pas(1644): Anweisung für FOR-Schleifenvariablen 'lc'
Und zwar bei diesem Code:
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 // keine Sorge der kommt da manchmal rein
        begin
          application.ProcessMessages;
          if stop then
          begin
            la:=max.a;
            lb:=max.b;
            lc:=max.c;
          end;
          label2.Caption:=inttostr(maxformel-i);
        end;
//jetzt kommt viel blabla
      end;
Wieso hat der damit ein Problem dass ich den Schleifenvariablen etwas zuweisen will? Wage glaube ich dass das früher immer geklappt hat?
Rot makieren tut er das da:
            la:=max.a;
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

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

  Alt 7. Apr 2006, 09:00
versuchs doch einfach mit "break", du willst ja wie ich das sehe "nur" die Schleifen beenden oder?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

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

  Alt 7. Apr 2006, 09:01
Hai Alexander,

den Laufvariablen einer FOR-Schleife kannst Du nichts zuweisen. Diese werden quasi vom Compiler "wegoptimiert".
Genauso kannst Du nach der FOR-Schleife nicht auf die Variablen zugreifen. Genauer gesagt haben sie nach der Schleife keinen definierten Wert. Das war aber imho schon immer so.
Stephan B.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 7. Apr 2006, 09:01
kann es sein, das es ein Problem damit hat,
dass Du die Schleifenvariablen der FOR Schleife
in der Schleife veränderst.

Da wäre dann wenn ein while oder repeat Schleife besser.

Delphi-Quellcode:
  la:=0;
  while la < max.a do
    begin
      lb:=-max.b;
      while lb < max.b do
        begin
          lc:=-max.c;
          while lc < max.c do
            begin
             //jetzt kommt viel blabla
            //aussenwelt
            if (maxlauf>5000)or (i mod 10=0 ) then // keine Sorge der kommt da manchmal rein
              begin
                application.ProcessMessages;
                if stop then
                  begin
                    la:=max.a;
                    lb:=max.b;
                    lc:=max.c;
                  end;
                label2.Caption:=inttostr(maxformel-i);
             end;
             inc(lc);
           end; /while lc
           inc(lb);
         end; //while lb
         inc(la);
       end; // while la
     //jetzt kommt viel blabla
so ähnlich stelle ich mir das vor.
Ich mag das mit break nicht.

Grüße
Klaus
Klaus
  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
 
#5

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

  Alt 7. Apr 2006, 09:04
Zitat von Angel4585:
versuchs doch einfach mit "break", du willst ja wie ich das sehe "nur" die Schleifen beenden oder?
break beendet doch nur die Innerste. Oder?
Hatte es nämlich damit ausprobiert.


Zitat von Klaus01:
Da wäre dann wenn ein while oder repeat Schleife besser.
Unpraktisch.

Dann bleibt mir wohl nichts anderes übrig als in jede for schleife die break variante einzubauen.
Also ungefähr so
Delphi-Quellcode:
  for la:=0 to max.a do
  begin
    for lb:=-max.b to max.b do
    begin
      for lc:=-max.c to max.c do
      begin
//jetzt kommt viel blabla
        //aussenwelt
        if (maxlauf>5000)or (i mod 10=0 ) then // keine Sorge der kommt da manchmal rein
        begin
          application.ProcessMessages;
          if stop then
            break;
          label2.Caption:=inttostr(maxformel-i);
        end;
//jetzt kommt viel blabla
      end;
      if stop then
        break;
    end;
    if stop then
      break;
  end;
Falls ich was falsch eingerückt haben sollte. Bitte entschuldigt. Hier ist es mit den Leerzeichen kompliziert einzurücken.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#6

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

  Alt 7. Apr 2006, 09:11
Also wenn nach der Schleife nixmehr kommt würd ich ein exit empfehlen.
Martin Weber
Ich bin ein Rüsselmops
  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
 
#7

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

  Alt 7. Apr 2006, 09:13
Da kommt noch verdammt viel wichtiges.
Deswegen so umständlich.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

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

  Alt 7. Apr 2006, 09:17
Es gibt mehrere Möglichkeiten die Schleife zu verlassen.
Hier nur ein paar Möglichkeiten...

Abfrage in jeder Schleife:
Delphi-Quellcode:
begin
  for LoopX := 1 to 1000 do
  begin
    for LoopY := 1 to 1000 do
    begin
      for LoopZ := 1 to 1000 do
      begin
        Application.ProcessMessages();
        if Stop then
          Break;
        //...
      end;
      if Stop then
        Break;
      //...
    end;
    if Stop then
      Break;
    //...
  end;
  //...
end;
Label um alle Schleifen direkt zu verlassen (manche mögen kein 'goto'):
Delphi-Quellcode:
label
  LoopEnd;
begin
  for LoopX := 1 to 1000 do
  begin
    for LoopY := 1 to 1000 do
    begin
      for LoopZ := 1 to 1000 do
      begin
        Application.ProcessMessages();
        if Stop then
          goto LoopEnd;
        //...
      end;
      //...
    end;
    //...
  end;
LoopEnd:
  //...
end;
Mit Exit die Funktion verlassen (Code nach 'finally' wird nicht ausgeführt):
Delphi-Quellcode:
begin
  try
    for LoopX := 1 to 1000 do
    begin
      for LoopY := 1 to 1000 do
      begin
        for LoopZ := 1 to 1000 do
        begin
          Application.ProcessMessages();
          if Stop then
            Exit;

          //...
        end;
        //...
      end;
      //...
    end;
  finally
    //...
  end;
end;
...hat alles seine Vor- und Nachteile.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#9

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

  Alt 7. Apr 2006, 09:18
dann mach doch ne Funktion/prozedur aus dem Abschnitt! So etwa:

Delphi-Quellcode:

procedure DeineMainPrc;

  procedure InMainproc(var x,y,a,z,b,c : integer);
  begin
  for i:= x to y do
    for j:= a to z do
      for k := b to c do
        begin
        if stop then
          exit;
        end;
  end;

begin

InMainProc(x1,x2,x3,x4,x5,x6)

end;
Naja weist schon was ich mein oder?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#10

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

  Alt 7. Apr 2006, 09:26
Exit zählt i.A. zu den Jump-Befehlen und wird oft in die Kategorie "GoTo" geworfen. Und da gehört es auch hin, es ist einer der Befehle, die zu unleserlichem Spaghetti-Code führen und nur mit Bedacht, besser aber nie, genutzt werden sollten.

Das dreifache Break, wie von NicoDE gezeigt, ist hier der sauberste Lösungsweg.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  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:53 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