| Autor | 
Beitrag | 
Thunderman 
        
 
Beiträge: 26 
 
 
 
 | 
Verfasst: Mi 12.06.02 13:29 
 
Hallo!
 
Ich habe in einer Prozedur eine ganz normale For-Schleife:
 		                                                          Quelltext                                	 															1: 2: 3: 4:
  				 | 									for I:=0 to 5 do begin ... end;					 				 | 			 		 	  
Das problem ist, dass er nicht von 0 nach 5 zählt, sondern von 6 nach 1.    
Wenn ich for I:=5 downto 0 mache, beginnt er bei -6.
 Vor der Schleife gibt es noch ein paar andere For-Schleifen mit der Variablen I, aber auch das verwenden einer anderen Variablen bringt nichts. Ich kann das Problem zwar durch entsprechendes subtrahieren umgehen, aber trotzdem würde ich mal gerne wissen, wie man diese Zählerei von Delphi unterbinden kann.  
_________________ Thunderman
 Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
  
 | 
 | 
Tino 
        
   
Beiträge: 9839 
Erhaltene Danke: 45 
 
Windows 8.1 
Delphi XE4 
 | 
Verfasst: Mi 12.06.02 13:36 
 
Das liegt wohl an den Optimierungen von Delphi! Wenn Delphi so eine Optimierung macht dann sollte diese Änderung an der Programmlogik nichts ändern.
 
Wenn Du z. B. das hier machst:
 		                                                          Quelltext                                	 															1: 2:
  				 | 									For i := 1 To 5 Do   z := z + i;					 				 | 			 		 	  dürfte keine Optimierung gemacht werden! Wenn Du aber  z. b. das hier machst:
 		                                                          Quelltext                                	 															1: 2:
  				 | 									For i := 1 To 5 Do   Str := Str + 'Hallo' + #32;					 				 | 			 		 	  dann könnte Delphi diesen Code optimieren da ja völlig egal ist ob von 1 bis 5 oder von 3 bis 8 gezählt wird!
 Gruß  
 
 | 
 | 
Klabautermann 
        
   
Beiträge: 6366 
Erhaltene Danke: 60 
 
Windows 7, Ubuntu 
Delphi 7 Prof. 
 | 
Verfasst: Mi 12.06.02 13:39 
 
Hallo Thunderman,
 
 wahrscheinlich veränderst du die zählvariable versehendlich an einer anderen Stelle im Code. 
 
 Kanst du mal einen größeren Source schnipzel schicken. Am besten mit allem in der FOR-Schleife. 
 Als was hast du denn I deklariert ist das vieleicht ein exotischer aufzählungstyp?
 
 Wie gesagt, wenn du mehr Quelltext postest können wir besser suchen helfen.
 
 Gruß
 Klabautermann 
 
 | 
 | 
Udontknow 
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Mi 12.06.02 13:57 
 
Ich würde auch auf die Optimierung in Delphi tippen. Zeigt dir der Debugger diese Werte für I an? Wird denn I überhaupt in der Schleife benutzt? Wenn nein, packe mal ein "ShowMessage(IntToStr(i));" in deine Schleife. Wie ist das Verhalten dann? 
 
 | 
 | 
Tino 
        
   
Beiträge: 9839 
Erhaltene Danke: 45 
 
Windows 8.1 
Delphi XE4 
 | 
Verfasst: Mi 12.06.02 14:03 
 
	  | Klabautermann hat folgendes geschrieben: | 	 		  | wahrscheinlich veränderst du die zählvariable versehendlich an einer anderen Stelle im Code. | 	  
Schleifen-Zählervariablen können nicht im Code geändert werden. Dann müsste es einen Compilermeldung geben.
 Gruß  
 
 | 
 | 
Klabautermann 
        
   
Beiträge: 6366 
Erhaltene Danke: 60 
 
Windows 7, Ubuntu 
Delphi 7 Prof. 
 | 
Verfasst: Mi 12.06.02 14:12 
 
	  | Tino hat folgendes geschrieben: | 	 		  
 Schleifen-Zählervariablen können nicht im Code geändert werden. Dann müsste es einen Compilermeldung geben.
  | 	  
Du hast recht, ich krige es nicht hin. Dabei war ich mit siecher, dass mit Turbo Pascal 7 eine möglichkeit eingeführt wurde, um dies möglich zu machen. Da hatte mein Infolehrer doch damals so gegen gewettert (ich muss zugeben ich hatte noch nie das bedürfnis das zu versuchen).
 Gruß
 Klabautermann  
 
 | 
 | 
Arakis 
        
 
Beiträge: 344 
 
 
 
 | 
Verfasst: Mi 12.06.02 14:24 
 
 Titel: While-Schleife
 
Ich weiß, dass mit der FOR-Schleife ist ein bisschen unglücklich. Nimm doch stattdessen eine while-Schleife:
 
		                                                          Quelltext                                	 															1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
  				 | 									procedure TForm1.Button1Click(Sender: TObject); var   i: Integer; begin   while i < 10 do   begin     {code...}     inc(i); //Ganz wichtig, sonst Unendlichschleife!   end; end;					 				 | 			 		 	  
Bis dann
   
_________________ Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
 Entwickler von SpaceTrek: The New Empire -  Siehe Hompage!
  
 | 
 | 
overmoon 
        
 
Beiträge: 16 
 
 
 
 | 
Verfasst: Mi 12.06.02 19:14 
 
 Titel: for-schleifen-mörder
 
Hiho!
 
Man KANN den Zähler in einer Schleife ändern,
 aber das ist wirklich gar nicht schön,
 geradezu eine Vergewaltigung an Delphi.
 Da nehme man doch lieber eine while-Schleife.
 Aber so ginge es mit einer For-Schleife.
 		                                                          Quelltext                                	 															1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
  				 | 									procedure BÖSE; var index: integer; label hin, zurueck; begin      for index := 1 to 10 do      begin           zurueck:
            ShowMessage(IntToStr(index));
            if index = 3 then goto hin;      end;
       Exit;
       hin:            index := 7;
       goto zurueck; end;
 
  // Ausgabe: 1,2,3,7,8,9,10					 				 | 			 		 	  
und das funktioniert tatsächlich .... Variable ändern mit einem kleinem Sprung
 overmoon  
 
 | 
 | 
Thunderman   
        
 
Beiträge: 26 
 
 
 
 | 
Verfasst: Mi 12.06.02 19:40 
 
 Titel: Mein Delphi spinnt
 
Hallo!
 
Ich glaube mitlerweile mein delphi spinnt:
 Erstmal darf er die Schleife so nicht optimieren, da ich mit der Variablen auf ein Array [0..5] zugreife. und wenn er da bei 6 oder -6 anfängt funktioniert das nicht so ganz.
 Jetzt compiliert er aber manche Befehle gar nicht mehr in das Programm ein, wie zum Beispiel  		                                                          Quelltext                                	 															1: 2:
  				 | 									Spieler.render; Partikelsystem.render;					 				 | 			 		 	  Hier lässt er einfach den 2. Befehl aus. Im Quelltext erscheint auch kein blauer Punkt, also er kompiliert es gar nicht erst. Dabei muss der Befehl unbedingt aufgerufen werden. Bei einem weiteren Versuch nach einem Neustart von Delphi jetzt kommt sogar der blaue Punkt, der Debugger bleibt bei einem Haltepunkt dort stehen, führt aber dann einen ganz anderen Befehl aus, nämlich den nächsten.
 Ich denke da wird nur eine Neuinstallation helfen, oder seht ihr andere Möglichkeiten/Gründe für dieses Problem?  
_________________ Thunderman
 Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
  
 | 
 | 
Tino 
        
   
Beiträge: 9839 
Erhaltene Danke: 45 
 
Windows 8.1 
Delphi XE4 
 | 
Verfasst: Mi 12.06.02 21:36 
 
 Titel: Re: for-schleifen-mörder
 
	  | overmoon hat folgendes geschrieben: | 	 		  | Man KANN den Zähler in einer Schleife ändern | 	 
 NEIN -> Innnerhalb einer Schleife nicht    
 
 | 
 | 
Udontknow 
        
 
Beiträge: 2596 
 
Win7 
D2006 WIN32, .NET (C#) 
 | 
Verfasst: Do 13.06.02 08:09 
 
 | 
 | 
Klabautermann 
        
   
Beiträge: 6366 
Erhaltene Danke: 60 
 
Windows 7, Ubuntu 
Delphi 7 Prof. 
 | 
Verfasst: Do 13.06.02 08:55 
 
Hallo Thunderman,
 hast du mal versucht über Projekt->Alle erzeugen zu compilieren? Vieleicht hilft das.
 
 Gruß
 Klabautermann 
 
 | 
 | 
Tino 
        
   
Beiträge: 9839 
Erhaltene Danke: 45 
 
Windows 8.1 
Delphi XE4 
 | 
Verfasst: Do 13.06.02 09:18 
 
	  | Udontknow hat folgendes geschrieben: | 	 		  Sag niemals nie!    | 	  
Ok, ich gebe mich geschlagen...     
 
 | 
 | 
Thunderman   
        
 
Beiträge: 26 
 
 
 
 | 
Verfasst: Do 13.06.02 12:48 
 
Hallo!
 
 Hm, also das mit der Prozedur funktioniert schonmal. Aber mit einzelschritt komme ich da nicht hin. Ein Breakpoint in der Prozedur selbst wird aber erreicht. Also die wird ausgeführt. Trotzdem merkwürdig. Werde mich jetzt also erstmal wieder um das eigentliche Problem mit der For-Schleife kümmern. 
_________________ Thunderman
 Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
  
 | 
 | 
MathiasH 
        
 
Beiträge: 699 
 
WinXP, Win98SE, Debian, Win95 
D5 Stand, D6 Prof 
 | 
Verfasst: Fr 14.06.02 18:15 
 
Das Problem hatte ich auch schon mal:
 Der compiler hat einfach die Hälfte meines Qts "überlesen!!!!!" 
 Das heisst er hat halbe Prozeduren ausgeführt und hat nicht angehalten als eigentlich eine Prozedur mit 20 Haltepunkten dran war
 
 Keine Ahnung, wie ich's damals wieder hingekriegt hab, ich glaub ich hab Delphi(6) neuinstalliert.
 
 Mathias 
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
 Friedrich Nietzsche
  
 | 
 | 
webmaker 
        
 
Beiträge: 205 
 
 
 
 | 
Verfasst: Mi 19.06.02 15:44 
 
Versuchs mal so, wenn der Compiler wirklich Quellcode überliest: Quellcode rauskopieren, dann compilen und wieder einfügen. Wenns nicht funzt, dann musste wohl neuinstallieren 
_________________ .::Wissen ist Macht, nichts wissen macht nichts::.
  
 | 
 |