Autor Beitrag
pennyWISE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i:=1 to 8 do
  begin
   //blabla
  end;

beginnt das Programm bei 8 an zu zählen und geht dann runter bis 1. (siehe Abb.1)
Wenn ich jedoch so programmiere:
ausblenden Delphi-Quelltext
1:
for i:=8 downto 1 do					

fängt er komischerweise bei -8 an und geht dann hoch bis -1 :?:

user defined image
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.

user defined image
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Fr 11.01.08 16:45 
Schreib doch
ausblenden Delphi-Quelltext
1:
if not test					

:lol: :mrgreen: :P

_________________
Die Lösung ist nicht siebzehn.
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: Fr 11.01.08 16:53 
user profile iconMitmischer 1703 hat folgendes geschrieben:
Schreib doch
ausblenden Delphi-Quelltext
1:
if not test					

:lol: :mrgreen: :P


Das ist allerdings eine Superlösung, die das Problem im kern trifft :lol: :P

_________________
„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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Fr 11.01.08 16:55 
Yeah, du hast es erkannt! :zustimm: :idea: :roll: :wink: :lol: :) :D

_________________
Die Lösung ist nicht siebzehn.
Jakob Schöttl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: Fr 11.01.08 16:57 
ok, danke Jakob, dann is das schonma gelöst :D
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: Fr 11.01.08 16:58 
user profile iconJakob 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 :P

_________________
„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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: 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? :wink:

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Fr 11.01.08 17:11 
@PennyWise: Ich glaub' das war eine Umformulierung für: "Source her!" :wink:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Fr 11.01.08 17:18 
user profile iconMitmischer 1703 hat folgendes geschrieben:
@PennyWise: Ich glaub' das war eine Umformulierlierung für: "Source her!" :wink:

nein eigentlich nicht, ich lese nicht so gerne fremden Quellcode, so arg interessiert mich das Problem auch nicht.
pennyWISE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: Fr 11.01.08 17:50 
so .. sry, war kurz ma einkaufen^^

also wenn ich das in zwei teile aufsplitte, wird's noch komischer:

user defined image
Abb.3

user defined image
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: Fr 11.01.08 18:07 
user profile iconGTA-Place hat folgendes geschrieben:
Wenn ich letztens richtig gelesen habe, kannst du nicht nach dem Hint gehen, da dieser erst aktualisiert wird, wenn die Zeile vorrüber ist


Das stimmt auch. Aber trotzdem, der hint in Abb.3 stimmt auch, da
ausblenden Delphi-Quelltext
1:
2:
3:
i=8;
Punkt[i].x=2;
mittelpunkt.x=4;

ist, und damit die Bedingung punkt[i].x<=mittelpunkt.x erfüllt ist.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt

_________________
„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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49

Win XP
Delphi 2005 PE (getunt), QBasic 4.5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: 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.

ausblenden 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.