| Autor |
Beitrag |
pennyWISE
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Fr 11.01.08 16:41
Hallo!
Habe irgendwie komische Probleme in Delphi 6.
1.
Die For-Schleife zählt nicht richtig.
wenn ich die Schleife so schreibe
Delphi-Quelltext 1: 2: 3: 4:
| for i:=1 to 8 do begin end; |
beginnt das Programm bei 8 an zu zählen und geht dann runter bis 1. (siehe Abb.1)
Wenn ich jedoch so programmiere:
Delphi-Quelltext
fängt er komischerweise bei -8 an und geht dann hoch bis -1
Abb.1
2. Problem:
Die Booleschen Ausdrücke gehen total daneben. Wie in Abb.1 gezeigt wird, sind für die Boolesche Variable "test" beide Bedingungen wahr (true). Leider wird dann in der Variable "test" trotzdem der Wert "false" gespeichert (Abb.2). Dadurch werden die falschen Befehle ausgelöst und das Ergebnis kann man dann vergessen.
Abb.2
Weiß einer Rat?
Schonmal vielen Dank,
pennyWISE
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Fr 11.01.08 16:45
_________________ Die Lösung ist nicht siebzehn.
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 11.01.08 16:52
hier hatte jemand das gleiche Phänomen entdeckt.
Delphi macht das irgendwie aus optimierungsgründen, aber wenn es darauf ankommt, also du zB. ein ShowMessage(IntToStr(LaufVariable)) in der Schleife einfügst dann zählt er richtig!
ach ja, und hier kannst du nachlesen warum genau...
|
|
pennyWISE 
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Fr 11.01.08 16:53
Das ist allerdings eine Superlösung, die das Problem im kern trifft 
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Fr 11.01.08 16:55
_________________ Die Lösung ist nicht siebzehn.
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 11.01.08 16:56
und wie hast du es eigentlich gemacht, dass er dir mehrere Variablen-Werte in den Hints gleichzeitig anzeigt??
|
|
pennyWISE 
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Fr 11.01.08 16:57
ok, danke Jakob, dann is das schonma gelöst
Jemand noch ne lösung für die Boole-Sache? 
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
pennyWISE 
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Fr 11.01.08 16:58
Jakob Schöttl hat folgendes geschrieben: | | und wie hast du es eigentlich gemacht, dass er dir mehrere Variablen-Werte in den Hints gleichzeitig anzeigt?? |
mehrere Screenshots gemacht und mit paint zusammengefügt 
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 11.01.08 17:04
und wir sollen dir glauben, dass die screenshots gleichzeitig gemacht wurden und beim gleichen Programmdurchlauf, und du uns nicht austricksen willst?
das ist nähmlich wirklich komisch. Du könntest mal die einzelnen Ausdrücke auch einzelnen Variablen zuweisen und diese dann nochmal mit and verknüpfen und der Variable test zuweisen. Dann siehst du beim Debuggen nochmal die Werte!
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Fr 11.01.08 17:11
@PennyWise: Ich glaub' das war eine Umformulierung für: "Source her!" 
_________________ Die Lösung ist nicht siebzehn.
Zuletzt bearbeitet von Mitmischer 1703 am Sa 12.01.08 08:51, insgesamt 1-mal bearbeitet
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: Fr 11.01.08 17:18
Mitmischer 1703 hat folgendes geschrieben: | @PennyWise: Ich glaub' das war eine Umformulierlierung für: "Source her!"  |
nein eigentlich nicht, ich lese nicht so gerne fremden Quellcode, so arg interessiert mich das Problem auch nicht.
|
|
pennyWISE 
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Fr 11.01.08 17:50
so .. sry, war kurz ma einkaufen^^
also wenn ich das in zwei teile aufsplitte, wird's noch komischer:
Abb.3
Abb.4
kann es vielleicht sein, dass der compiler zwar rückwärts zählt (mit i=8 anfängt), aber das Ganze dann trotzdem so behandelt, als wäre es i=1? Dann würde es Sinn machen. Das Debuggen dann zwar nich mehr, weil man das dann wohl kaum noch vernünftig verfolgen kann, aber vom Programm her schon.
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Fr 11.01.08 17:57
Wenn ich letztens richtig gelesen habe, kannst du nicht nach dem Hint gehen, da dieser erst aktualisiert wird, wenn die Zeile vorrüber ist. Siehe auch hier:
www.delphi-forum.de/....php?p=477506#477506
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
pennyWISE 
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Fr 11.01.08 18:07
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
pennyWISE 
      
Beiträge: 49
Win XP
Delphi 2005 PE (getunt), QBasic 4.5
|
Verfasst: Di 15.01.08 18:57
Hab leider immer noch keine Lösung gefunden
hat denn keiner ne idee? *Thema wieder ins Gespräch bring*
_________________ „Philosophie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen. Theologie ist der Versuch, eine schwarze Katze in einem dunklen Zimmer zu fangen, jedoch eine Katze, die gar nicht im Zimmer ist - und immer zu rufen: Ich hab' sie!“
|
|
DrRzf
      
Beiträge: 260
Win XP Prof
D7 Enterprise
|
Verfasst: Di 15.01.08 21:14
Hast du dir obigen link durchgelesen ?
Das phänomen wurde hier schonmal besprochen.
Schleifen laufen aus optimierungsgründen rückwärts.
Der schleifenzähler, wird im Debugger auch rückwärts angezeigt, jedoch werden deine damit angesprochenen array krrekt angesprochen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| x := 0; for i := 1 to 8 do begin x := x + 1; Myarray[i] := x; end; |
hier wird der zähler i zwar rückwärts laufen, aber das array wird drotzdem von 1 nach 8 gefüllt, würde er es anders machen ständen die zahlen falsch rumm im array.
_________________ rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
|
|