Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   probleme mit For-Schleife (https://www.delphipraxis.net/11968-probleme-mit-schleife.html)

mickmack 17. Nov 2003 23:15


probleme mit For-Schleife
 
hallo zusammen,

ich habe hier ein ganz merkwürdiges Problem mit der Forschleife:
Delphi-Quellcode:
  for index:=0 to 3 do
  begin
    showmessage('hallo welt');
  end;

  showmessage(IntToStr(index));
Bei der Ausgabe nach der Schleife kommt immer 4 heraus. Warum :wiejetzt:
Was mache ich falsch? :?: Das habe ich noch nie gehabt. Kennt jemand das Problem? :?: Habe ich was verstellt? :?: Oder ist es einfach nur schon zu spät :gruebel:

MrKnogge 17. Nov 2003 23:21

Re: probleme mit For-Schleife
 
nimm statt index lieber einen anderen Namen
für deine Variable, z.B. 'f' oder 'i'.

Vile Komponennten haben eine Eigenschaft die index
heist, da kanns dann schon mal zu Problemchen kommen....

iamjoosy 17. Nov 2003 23:24

Re: probleme mit For-Schleife
 
Hi zu später Programmiererstunde,
ohne das überprüft zu haben denke ich dass Delphi ein for schleife so umsetzt:

Code:
i:=0;
while i <= 3 do
 i:=i+1

analog zu

for i=0 to 3 do
bei der obigen while Schleife wäre i nach Beendigung derselben 4

Weiss nicht genau ob das so ist, aber eben meine Vermutung.
Aber ist das für dich wichtig ?

Ich meine ist das Ergebnis nach der SChleife wichtig ?

mickmack 17. Nov 2003 23:25

Re: probleme mit For-Schleife
 
hmmm, ne daran liegt es nicht. Sind vielleicht irgendwelche Einstellungen verstellt? Anders kann ich mir das nicht erklären.

MrKnogge 17. Nov 2003 23:30

Re: probleme mit For-Schleife
 
also meines Wissens nach, wird die
Zählvariable erst nach durchlauf
der Schleife erhöht.

Aber gib dch einfach mal deine Variable in der Schleife aus....

Wormid 17. Nov 2003 23:32

Re: probleme mit For-Schleife
 
Hast Du die Warnung in deinen Compileroptionen ausgeschaltet? Bei mir kommt nämlich dies:

Zitat:

Zitat von Delphi Compiler
[Warnung] Unit1.pas(33): FOR-Schleifenvariable 'index' kann nach Durchlauf undefiniert sein

Wie es aussieht, ist nach einer Schleife nicht sichergestellt, das auch der "Wert" des letzten Durchlaufs in der Zähl-Variablen drinsteht. "index" ist also nach der Schleife als nicht initialisierte Variable zu betrachten.

Gruß

Wormid

Luckie 17. Nov 2003 23:35

Re: probleme mit For-Schleife
 
Gott sei dank. Ich dachte schon, keiner würde die Warnungen lesen. :roll:

mickmack 17. Nov 2003 23:36

Re: probleme mit For-Schleife
 
in der Schleife stimmt noch alles. Normalerweise benutze ich auch immer einen Counter innerhalb der Schleife, um dann damit weiterzuarbeiten, aber ich war mir fast sicher, dass auch schon mal so gemacht zu haben. Naja muss wohl ne Täuschung gewesen sein, denn das Argument mit der Realisierung durch die Whileschleife ist ja vollkommen einleuchtend und kommt mir auch bekannt vor :oops:
ich schiebs mal auf die späte Stunde :wink:

Aber danke für die schnelle Hilfe

MrKnogge 17. Nov 2003 23:37

Re: probleme mit For-Schleife
 
Kann man dann eigentlich (also nur mal theoretisch)
irgend eine lokale Variable fpür die for-Schleife
benutzen und danach mit dem alten Wert weiterarbeiten ?

Luckie 17. Nov 2003 23:39

Re: probleme mit For-Schleife
 
Zitat:

Zitat von mickmack
in der Schleife stimmt noch alles.

Wäre wohl auch schlimm, wenn es nicht so wäre oder?

MrKnogge 17. Nov 2003 23:41

Re: probleme mit For-Schleife
 
Zitat:

Zitat von mickmack
Normalerweise benutze ich auch immer einen Counter innerhalb der Schleife, um dann damit weiterzuarbeiten

wozu brauchst du einen Counter ?
beieiner for-Schleife müsstest du wissen, wie oft sie durchlaufen wird.

iamjoosy 17. Nov 2003 23:53

Re: probleme mit For-Schleife
 
@Mrkonogge

Ja sicherlich, der Zähler wird erst am Ende einer Schleife erhöht - mein Code war ungenau:

besser:

Code:
while i<=3 do
begin
 bla
 bla
 i:=i+1;
end;

Wormid 18. Nov 2003 00:13

Re: probleme mit For-Schleife
 
Hängt euch nicht so dolle an dem while-Konstrukt auf... Schenkt mal der Compiler-Warnung ein bissel mehr Beachtung! :wink:

Zitat:

Kann man dann eigentlich (also nur mal theoretisch)
irgend eine lokale Variable fpür die for-Schleife
benutzen und danach mit dem alten Wert weiterarbeiten ?
Du meinst, mit dem Wert, den die Index-Variable VOR der Schleife gehabt hat? Nee, wie soll denn das bitte gehen? Kaputt is kaputt... Du siehst ja, das nach deiner Schleife jetzt ne 4 drinsteht... VOR der Schleife hat ne 0 dringestanden.

:hi:

MrKnogge 18. Nov 2003 00:16

Re: probleme mit For-Schleife
 
war nur son komischer Gedankengang :-D

Ach und übrigens, die Variable war nicht meine....

shareholder 18. Nov 2003 14:32

Re: probleme mit For-Schleife
 
wer zählen kann ist klar im vorteil:
0, 1, 2, 3
=> ergibt 4 ausgaben
setze index auf 1

moin339 18. Nov 2003 14:37

Re: probleme mit For-Schleife
 
Zitat:

Zitat von shareholder
wer zählen kann ist klar im vorteil:
0, 1, 2, 3

Die letzte zahl ist eine 3. guck dir den code noch mal an;)

shareholder 18. Nov 2003 14:44

Re: probleme mit For-Schleife
 


tipp mal folgendes ein, hab nur ein leeres formualt und ein label

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  label1.caption := '';
  for i:=0 to 3 do
  label1.caption := label1.caption + IntToStr(i);
end;
ausgabe => '0123'
ich zähle immer noch 4 ziffern ;)

moin339 18. Nov 2003 14:47

Re: probleme mit For-Schleife
 
Zitat:

Zitat von shareholder
ausgabe => '0123'
ich zähle immer noch 4 ziffern ;)

Da hast du Recht, das war aber net das Problem ;) i hat nun mal während der vierten ausgabe den Wert 3 (wie du auch bei 0123 geschrieben hast) es ging nicht um die zahl der ausfürhrungen sondern um den Wert vom Durchlaufzähler...

Tyrael Y. 18. Nov 2003 14:52

Re: probleme mit For-Schleife
 
leutz,
lest ihr überhaupt was einige schon geschrieben haben?

guckt euch doch mal die Compilermeldung an
Zitat:

FOR-Loop variable may be undefined after Loop
.. sagt euch das vielleicht irgendwas?
wenn nicht...die zählvariable ist NUR innerhalb der schleife gültig
ausserhalb ist sie nicht definiert...auch wenn es jetzt einen anderen wert habne sollte...dieser Wert ist null und nichtig


Gruß
Tyrael

shareholder 18. Nov 2003 14:53

Re: probleme mit For-Schleife
 
Zitat:

zahl der ausfürhrungen sondern um den Wert vom Durchlaufzähler...
wo ist der unterschied ?

markon 18. Nov 2003 15:06

Re: probleme mit For-Schleife
 
http://www.mysmilie.de/smilies/big/img/014.gif

kann ja mal passieren, damit man so nen denkfehler drin hat..
passiert jeden auf kurz oder lang...

Treffnix 18. Nov 2003 15:10

Re: probleme mit For-Schleife
 
Zitat:

Zitat von shareholder
Zitat:

zahl der ausfürhrungen sondern um den Wert vom Durchlaufzähler...
wo ist der unterschied ?

Der Unterschied liegt darin, dass der Zähler, wie du ja selbst geschrieben hast die werte 0-3 annimmt. Das ganze aber in 4 ( 1-4 ) Durchläufen.

Wie auch immer. Tyrael hat Recht. Das ursprüngliche Problem ist schon lange gelöst. Wenn du den letzten Wert der Schleifenvariable nach Ende der Schleife noch benötigst, musst du ihn innerhalb der Schleife einer weiteren Variable zuweisen, da die Schleifenvariable selbst nach Schleifenende nicht mehr definiert ist.

moin339 18. Nov 2003 15:12

Re: probleme mit For-Schleife
 
Zitat:

Zitat von Tyrael Y.
leutz,
lest ihr überhaupt was einige schon geschrieben haben?

guckt euch doch mal die Compilermeldung an
Zitat:

FOR-Loop variable may be undefined after Loop
.. sagt euch das vielleicht irgendwas?
wenn nicht...die zählvariable ist NUR innerhalb der schleife gültig
ausserhalb ist sie nicht definiert...auch wenn es jetzt einen anderen wert habne sollte...dieser Wert ist null und nichtig

das habe ich schon verstanden aber trotzdem sollte der wert 3 sein (wenn die variable auch nach der schleife noch definiert wäre

Zitat:

Zitat von shareholder
Zitat:

zahl der ausfürhrungen sondern um den Wert vom Durchlaufzähler...
wo ist der unterschied ?

wenn i am anfang = 0 (for i:=0 to 3) ist dann ist die zahl der ausführungen = 4 und die Variable (Durchlaufzähler) hat im letzten durchlauf den wert 3

wenn i am anfang = 1 (for i:=1 to 4) ist dann ist die zahl der ausführungen = 4 und die Variable (Durchlaufzähler) hat im letzten durchlauf den wert 4

Die Zahl der Ausführungen ist nur dann gleich mit dem Wert des Durchlaufzählers wenn i am anfang = 1 ist!

edit: da war wohl jemand schneller ;)

Tyrael Y. 18. Nov 2003 15:18

Re: probleme mit For-Schleife
 
Zitat:

das habe ich schon verstanden aber trotzdem sollte der wert 4 sein (wenn die variable auch nach der schleife noch definiert wäre
das wichtige wort hier ist wäre

ist es aber nicht, schluss ende aus,
oder definier dir ne neue Sprache DelphiNew oder so


Ergänzung:
mal ein Beispiel für wäre:

Wäre Zahl/0 definiert als 0, so wären viele mathematische Probleme ganz anders
ist es aber nicht es ist nicht definiert


Gruß

Treffnix 18. Nov 2003 15:18

Re: probleme mit For-Schleife
 
Zitat:

aber trotzdem sollte der wert 4 sein
Du meinst 3.

Zitat:

Die Zahl der Ausführungen ist nur dann gleich mit dem Wert des Durchlaufzählers wenn i am anfang = 0 ist!
Du meinst 1. :wink:


[Tyraelärgeredit]
Zitat:

ist es aber nicht, schluss ende aus
Warum eigentlich nicht? :angle2:
[/Tyraelärgeredit]
P.S.: Auf die Frage brauchst du nicht zu antworten :zwinker:

moin339 18. Nov 2003 15:20

Re: probleme mit For-Schleife
 
Zitat:

Zitat von Treffnix
Zitat:

aber trotzdem sollte der wert 4 sein
Du meinst 3.

Zitat:

Die Zahl der Ausführungen ist nur dann gleich mit dem Wert des Durchlaufzählers wenn i am anfang = 0 ist!
Du meinst 1. :wink:

habe ich doch geschrieben ;) das ganze bringt mich total durcheinander.... wir sollten es dabei belassen :D

Thunderchild 18. Nov 2003 16:04

Re: probleme mit For-Schleife
 
Das kommt davon, wie Delphi die Schleife im Maschinencode umsetzt:

Code:
    MOV CX,0 ;Startwert
schleife:
    NOP ;hier stehen die Befehle in der Schleife
    INC CX
    CMP CX,4 ;Schleifenvari mit Endwert vergleichen
    JNE schleife ;solange ungleich einen weiteren Durchlauf beginnen
Das hat das Resultat, dass die Schleifenvari am Schluß Endwert+1 ist.

shareholder 18. Nov 2003 22:00

Re: probleme mit For-Schleife
 
hey,

nochmal danke an die leute, die mich zum thema
zahl der durchläufe und durchlaufzähler aufgeklärt haben ! :-D :thuimb:

MrKnogge 18. Nov 2003 22:07

Re: probleme mit For-Schleife
 
dann haben wir ja alle was gelernt :mrgreen:

Pauli 12. Dez 2003 13:12

Re: probleme mit For-Schleife
 
Bei der FOR-schleife wird der Wert bei "end" automatisch um 1 erhöht, dann wird überprüft, ob die schleife zu Ende ist (Spreich index > 3) und erst dann abgebrochen.
Deswegen hast du nach der Schleife index=4.
Mach einfach gleich nach der Schleife
index := index - 1;

So kriegst du deine 3 zu fassen. :lol: :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 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