AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Schleife läuft rückwärts trotz Verwendung der Zählvariable
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife läuft rückwärts trotz Verwendung der Zählvariable

Ein Thema von SubData · begonnen am 26. Apr 2006 · letzter Beitrag vom 26. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#1

Schleife läuft rückwärts trotz Verwendung der Zählvariable

  Alt 26. Apr 2006, 14:08
Moin...


Eine meiner for-Schleifen läuft rückwärts, obwohl die Schleifenvariable verwendet wird.
Seit wann optimiert der Compiler sowas?
Der Switch steht übrigens auf Verwendung von SetRange...

TblMSys ist eine TTable (Paradox)
MSysInfo ist eine TKbmMemoryTable (Speichertabelle)

Es handelt sich um Delphi 7 Enterprise.

Delphi-Quellcode:
const
  LoadFields : Array[0..6] of String = ('SO', 'KO', 'ST', 'KT', 'AT', 'LA', 'FG');


      for Loop := 1 to Length(LoadFields) do
      begin
        {$IFDEF DB_MSSQL}
          TblMSys.SQL.Text := 'SELECT * FROM Z4MSYS WHERE ART=''' + LoadFields[Loop - 1] + '''';
          TblMSys.Open;
        {$ELSE}
          TblMSys.SetRange([LoadFields[Loop - 1]], [LoadFields[Loop - 1]]);
        {$ENDIF}
        while not TblMSys.Eof do
        begin
          MSysInfo.Append;
          MSysInfo.FieldByName('ART').asString := TblMSys.FieldByName('ART').asString;
          // Noch ein paar Felder...
          MSysInfo.FieldByName('F1').asString := TblMSys.FieldByName('F1').asString;
          MSysInfo.Post;
          TblMSys.Next;
        end;
      end;
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:14
Exakt das gleiche Thema hatten wir erst vor Kurzem.
Des Rätsels Lösung: Die Schleife läuft zwar rückwärts, die Schleifenvariable wird allerdings überhaupt nicht zum Zugriff auf das Array benutzt.

Und wieder frage ich mich, wie man bloß mit Optimierungen debuggen kann...
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:21
Und was ist das?

TblMSys.SetRange([LoadFields[Loop - 1]], [LoadFields[Loop - 1]]);

Falls es dir aufgefallen ist, ich habe extra betont, dass die Zählvariable sehr wohl verwendet wird...
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:26
Hallo,
Zitat von SubData:
Falls es dir aufgefallen ist, ich habe extra betont, dass die Zählvariable sehr wohl verwendet wird...
Du verwendest die Variable in Deinem Quellcode, Delphi verwendet sie nicht.

Gruß
xaromz
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:27
so etwas ist mir auch schon aufgefallen mit D6 oder D7 (weis nimmer)
hatte auch die zählvar verwendet (!)
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:28
Zitat von xaromz:
Hallo,
Zitat von SubData:
Falls es dir aufgefallen ist, ich habe extra betont, dass die Zählvariable sehr wohl verwendet wird...
Du verwendest die Variable in Deinem Quellcode, Delphi verwendet sie nicht.

Gruß
xaromz
Sicher?

Wenn ich die Schleife debugge, dann wird das Array tatsächlich von hinten nach vorne durchlaufen:
Erst FG, dann LA, dann AT ... usw .

Edit: Wie soll ich denn die Array-Werte bekommen, wenn Delphi sie nicht verwendet? -hm-
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#7

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:30
Zitat von xaromz:
Du verwendest die Variable in Deinem Quellcode, Delphi verwendet sie nicht.
Kannst du das näher erläutern? Ich komm' grad nicht mit.... Wie "zählt" Delphi dann?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:35
Och Jungs . Ich habe nicht auf einen Thread, in dem die Sache schon längst gelöst wurde, verwiesen, damit hier das gleiche Thema noch einmal diskutiert wird. Und weil bald Weihnachten ist, gibts sogar einen Direktlink:
http://www.delphipraxis.net/internal...ct.php?t=81147

Zitat:
Wenn ich die Schleife debugge, dann wird das Array tatsächlich von hinten nach vorne durchlaufen:
Erst FG, dann LA, dann AT ... usw .
Zitat:
Und wieder frage ich mich, wie man bloß mit Optimierungen debuggen kann...
Der Debugger weiß nichts von den Optimierungen des Compilers, also zeigt er die Arrayelemente an, wie es normalerweise gemacht wird.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:36
na rückwärts eben

Der Zugriff auf die Daten erfolgt über einen Zeiger, der vor Beginn der Schleife initialisiert und innerhalb der Schleife inkrementiert wird. Mit der Schleifenvariablen muß dann nur noch die Anzahl der Durchläufe geprüft werden. Dabei ist es unerheblich, ob vorwärts oder rückwärts gezählt wird. Rückwärts gehts es ein wenig schneller, weil die Abbruchbedingung einfacher ist.

Gruß Hawkeye

//Edit: hmmm, ein Tick zu spät...
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Schleife läuft rückwärts trotz Verwendung der Zählvariab

  Alt 26. Apr 2006, 14:40
Hallo,
Zitat von Daniel G:
Zitat von xaromz:
Du verwendest die Variable in Deinem Quellcode, Delphi verwendet sie nicht.
Kannst du das näher erläutern? Ich komm' grad nicht mit.... Wie "zählt" Delphi dann?
wenn möglich, läuft eine Schleife vom Maximum runter bis Null, weil ein Vergleich auf Null schneller ist.
Wenn die Schleifenvariable zur Indizierung eines Arrays genutzt wird, dann benötigt Delphi die Variable nicht.
Ich erkläre das am Besten mal an einem Beispiel:
Wir zählen von 1 bis 10 und haben ein Array [1..10] of Integer

Wenn wir das so schreiben:
Delphi-Quellcode:
var
  C: Integer;
  A: array [1..10] of Integer;
begin
  ... initialisieren
  for C := 1 to 10 do
    Result := Result + A[C];
end;
dann baut Delphi das ungefähr so um:
Delphi-Quellcode:
var
  C: Integer;
  A: array [1..10] of Integer;
  P: ^Integer;
begin
  ... initialisieren
  C := 10;
  P := @A[1];
  repeat
    Result := Result + P^;
    Inc(P);
    Dec(C);
  until C = 0;
end;
Wie man sieht, wird C für den Zugriff auf das Array nicht benötigt.

Gruß
xaromz
  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 12:27 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