AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi For-To-Do-Schleife beginnt nicht mit Startwert

For-To-Do-Schleife beginnt nicht mit Startwert

Ein Thema von DevidEspenschied · begonnen am 29. Okt 2014 · letzter Beitrag vom 30. Okt 2014
Antwort Antwort
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
444 Beiträge
 
Delphi 12 Athens
 
#1

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 13:18
Na indem ich bei der ersten Zeile zwischen begin-end einen Breakpoint setzen und mir im Debugger den Wert anschaue.
Devid
Devid Espenschied
Pre-Sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 13:48
Na indem ich bei der ersten Zeile zwischen begin-end einen Breakpoint setzen und mir im Debugger den Wert anschaue.
Das ist dein "Problem" in Anführungszeichen

Du nutzt i nicht in der Schleife, also ist es für den weiteren Programmablauf egal wie der Wert von i ist. Und weil es egal ist, sagt sich der Compiler, dass es für ihn optimaler ist mit dem höheren Wert zu beginnen und runter zu zählen.

Wie gesagt, diesen Effekt hast du nur, weil der Wert von i nicht benötigt wird. Es ist also egal ob For rauf oder runter zählt.

Anders sieht es aber aus wenn du den i-Wert benötigst. Dann wird so gezählt wie es soll. Du kannst es testen:
Delphi-Quellcode:
var i, MaxZahl : Byte;
begin
  MaxZahl:=20;
  for i:=1 to MaxZahl do
  begin
    ShowMessage(IntToStr(i));
  end;
end;
Lass es laufen. Du wirst sehen, es beginnt bei 1.

Also, dein Phänomen tritt nur dann auf wenn es egal ist. Ist es egal, macht der Compiler das was für ihn optimaler ist. Ist es nicht egal, wird es so gemacht wie du es willst.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.821 Beiträge
 
Delphi 12 Athens
 
#3

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 13:49
Weshalb ich fragte, ob das Ergebnis nach der Schlafe denn wie erwartet ist...

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 14:19
Weshalb ich fragte, ob das Ergebnis nach der Schlafe denn wie erwartet ist...
NEIN.

"Nach" der Schleife ist i immer "ungültig".


Intern kann der Compiler das i anders laufen lassen, je nach Code-Optimierung, aber bei "Verwendung" ist i immer richtig (wird intern wieder umgerechnet)
Der Debugger zeigt nur manchmal was Falsches an, vorallem wenn man i innerhalb der Schleife garnicht verwendet.



Zitat:
Delphi-Quellcode:
MaxZahl:=20;
for i:=1 to MaxZahl do
Ach ja, Delphi cached den Endwert sowieso immer, weswegen man dort keine Variable benötigt.
Drum knallt es gern, wenn man Items aus Listen löscht und dabei die Schleife vorwärts durchläuft.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Okt 2014 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.821 Beiträge
 
Delphi 12 Athens
 
#5

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 15:40
Hat jemand nach dem i gefragt? oO

Das was die Schleife bezwecken sollte, wurde erreicht, ja oder nein? Das war die Frage an den TE. Falls nein hätten wir es ja mit einem Bug zu tun.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 16:07
Aso.

Dachte du meinst das i, weil da ganz oben, außer dem Kommentar ja nichts in der Schleife war, was ein Ergebnis liefern könnte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: For-To-Do-Schleife beginnt nicht mit Startwert

  Alt 29. Okt 2014, 17:42
Aso.

Dachte du meinst das i, weil da ganz oben, außer dem Kommentar ja nichts in der Schleife war, was ein Ergebnis liefern könnte.
Jupp, das Ergebnis ist doch völlig korrekt 20x nix machen. Läuft wie erwartet
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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