![]() |
Unerwartetes Phänomen bei zwei aufeinander folgenden Schleif
Hallo!
Folgendes Phänomen, das zu anderen Ergebnissen führt, als ich erreichen möchte, kann ich mir nicht erklären: nachdem ich Daten in einen Datensatz eingegeben habe, soll dieser neu sortiert werden. Anschließend sollen die sortierten Daten z.B. auf dem Bildschirm neu ausgegeben werden. Ein angedeutetes Beispiel:
Delphi-Quellcode:
Das Programm ist etwas komplizierter, so wird dort in Schleife 1 dafür gesorgt, dass leere Strings nach hinten sortiert werden, in Schleife 2 werden die entsprechenden Felder mit einem leeren String gefüllt.
var
Text : Array[0..10] of String; // Schleife 1 for ui:=1 to 10 do begin for uj:=ui+1 to 10 do begin if Text[uj]<Text[ui] then begin Text[0]:=Text[ui]; Text[ui]:=Text[uj]; Text[uj]:=Text[0]; end; end; end; // Schleife 2 for ui:=1 to 10 do begin Label[ui].Caption:=InttoStr(ui)+'.'; Label[10+ui]:=Text[ui]; end; Beim Debuggen stellte ich fest, dass in Schleife 2 die Zählreihenfolge umgekehrt ist, so dass ui im ersten Durchlauf nicht - wie vorgegeben - den Wert 1 enthält, sondern 10 und dann heruntergezählt wird. Auch wenn ich in Schleife 2 ui durch eine andere Variable, z.B. Loop1, ersetze, tritt dieses Phänomen auf. Ich komme nicht weiter und finde keine Erklärung. Hat jemand einen Tipp, wie das passieren kann? Ich möchte noch darauf hinweisen, dass beide Schleifen nicht innerhalb einer weiteren Schleife stehen, sondern in einer eigenen Unit ausgeführt werden. Vielen Dank für eure Unterstützung. MfG Gelmo [edit=Sharky]Delphi-Tags eingefügt. Mfg, Sharky[/edit] |
Re: Unerwartetes Phänomen bei zwei aufeinander folgenden Sch
Optimierung durch den Compiler:
![]() |
Re: Unerwartetes Phänomen bei zwei aufeinander folgenden Sch
Zitat:
Die Compiler optimieren an vielen Stellen und lassen so auch mal "intern" Schleifen rückwärts laufen, aber bei Verwendung der Schleifenvariable wird diese dennoch richtig verwendet (entsprechend umgerechnet). Laß dir mal den Wert ausgeben ... z.B. über eine MessageBox . [add] so viel Rot, da hab'sch den Glücklichen glatt übersehn |
Re: Unerwartetes Phänomen bei zwei aufeinander folgenden Sch
Hallo,
Delphi-Quellcode:
for ui:=1 to 10 do
begin Label[ui].Caption:=InttoStr(ui)+'.'; Label[10+ui]:=Text[ui]; end;
Delphi-Quellcode:
for ui:=10 downto 1 do
begin Label[ui].Caption:=InttoStr(ui)+'.'; Label[10+ui]:=Text[ui]; end; Es kommt beides mal, das gleiche raus. Der Compiler weiss das auch und optimiert das. Heiko |
Re: Unerwartetes Phänomen bei zwei aufeinander folgenden Sch
Zitat:
|
Re: Unerwartetes Phänomen bei zwei aufeinander folgenden Sch
Vielleicht kannst du die Schleifen mit repeat .. until umbauen.
Oder du schreibst von vorneherein das hier. Dann gibt's keine Überraschungen.
Delphi-Quellcode:
for ui := 10 downto 1 do
![]() Zitat:
Das ist mein 100.ter Post! :mrgreen: :zwinker: |
Re: Unerwartetes Phänomen bei zwei aufeinander folgenden Sch
Hallo!
Tatsächlich zeigt nur der Hint den bemängelten Wert. ShowMessage zeigt die richtige Reiehnfolge. Dann muss da ein anderer Fehler bei der Sortierung vorliegen, denn die Leerzeilen, die ich vor der Sortierung mit 'ZZZZZZZZZZZZZZZZZZZZ' gefüllt hatte und vor dem Anzeigen diesen String wieder durch einem Leerstring ersetzt habe, stehen vorn. Nach dem Sortieralgorithmus sollten sie doch hinten stehen. Da schien mir die falsche Anzeige der Schleifenvariable eine Erklärung für den Fehler. Vielen Dank für den Tipp! MfG Gelmo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz