Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Auto hält nicht an roter Ampel (https://www.delphipraxis.net/155912-auto-haelt-nicht-roter-ampel.html)

himitsu 13. Nov 2010 20:07

AW: Auto hält nicht an roter Ampel
 
Ein Boolean ist 1 Byte groß und kann somit 256 Werte annehmen.

die Konstanten sind dabei so definiert:

für den delphieigenen Boolean
True = 1
False = 0

für die Windowstypen ByteBool (ShortInt), WordBool (SmallInt) und LongBool (Integer/LongInt)
True = -1
False = 0

wobei es bei der Prüfung aber so lautet
True <> 0
False = 0


Tja, nun fällt auch auf, warum es zu Problemen kommen kann
Delphi-Quellcode:
if myBoolean = True then
ergibt
Delphi-Quellcode:
if Byte(myBoolean) = 1 then
,
wärend
Delphi-Quellcode:
if myBoolean then
intern so
Delphi-Quellcode:
if Byte(myBoolean) <> 0 then
aussieht.

Caps 13. Nov 2010 22:19

AW: Auto hält nicht an roter Ampel
 
Ja, das ist schon klar; was ich meine ist auch bloß, dass hier das Zweiwertigkeitsprinzip der Aussagenlogik in der Delphi-Aussagenlogik nicht mehr erfüllt ist, zumindest dann nicht, wenn es mehr Wahrheitswerte als true und false gibt, oder wenn man mit true und false nicht alle ("2") Fälle abdecken kann. Als Unwissender kann man darüber stolpern. Vor allem als Mathematiker.

Bummi 14. Nov 2010 01:52

AW: Auto hält nicht an roter Ampel
 
Zitat:

Vor allem als Mathematiker.
Ich verstehe nicht was einen Mathematiker hier von einem Normalbürger unterscheidet.
Eine Variable die auf einem Bit abgebildet werden müsste wird für TRUE je nach Gusto als $FFFFFFFF oder als 1 abgebildet, ein <> 0 dürfte in jedem Fall der Überprüfung standhalten. Interessanter finde ich dass folgende Konstrukte funktionieren...
Delphi-Quellcode:
const
 true=0=1;
var
  b:Boolean;
begin
  b := true;
  if b then Showmessage('true') else Showmessage('False');
end;

wenn man sich vorstellt ein Drittanbieter könne eine derartige Deklaration verwenden....

Caps 14. Nov 2010 09:48

AW: Auto hält nicht an roter Ampel
 
Ok, das ist schon heftig :wink:.
Und es wird ein bisschen off-topic...
Interessant finde ich, dass true offenbar kein reserviertes Wort ist. Die Frage ist: verwendet Delphi jetzt lokal immer Dein selbstdefiniertes true? Sollte es eigentlich, gel?

Naja, für logische Ausdrücke kann man ja immerhin stets die Ausdrücke (1=1) für wahr und (0=1) für falsch verwenden, natürlich ohne cast... :-D

Caps

himitsu 14. Nov 2010 09:57

AW: Auto hält nicht an roter Ampel
 
True und False sind Konstanten.
Und innerhalb eines anderen Gültigkeitsbereich kann man Typen, Konstanten und Variablen lokal neu deklarieren.

PS: Es gibt doch 2 Zustände?
Delphi-Quellcode:
False
und
Delphi-Quellcode:
not False
aka =0 und <>0. :angle2:

Caps 15. Nov 2010 10:01

AW: Auto hält nicht an roter Ampel
 
Zitat:

Zitat von himitsu (Beitrag 1061380)
PS: Es gibt doch 2 Zustände?
Delphi-Quellcode:
False
und
Delphi-Quellcode:
not False
aka =0 und <>0. :angle2:


Ja, aber hier (Delphi) kann gelten:
Code:
a := 2; // (a = not false) ist wahr
b := 1; // (b = not false) ist wahr

c := (a = b);
// c ist falsch, in der Aussagenlogik wäre c aber wahr (nur wenn a, b Wahrheitswerte sind),
// weil immer gilt (not false = not false).
// Weil es in der Aussagenlogik keine verschiedenen "not false" geben kann.

Sir Rufo 15. Nov 2010 10:15

AW: Auto hält nicht an roter Ampel
 
Zitat:

Zitat von Caps (Beitrag 1061565)
Zitat:

Zitat von himitsu (Beitrag 1061380)
PS: Es gibt doch 2 Zustände?
Delphi-Quellcode:
False
und
Delphi-Quellcode:
not False
aka =0 und <>0. :angle2:


Ja, aber hier (Delphi) kann gelten:
Code:
a := 2; // (a = not false) ist wahr
b := 1; // (b = not false) ist wahr

c := (a = b);
// c ist falsch, in der Aussagenlogik wäre c aber wahr (nur wenn a, b Wahrheitswerte sind),
// weil immer gilt (not false = not false).
// Weil es in der Aussagenlogik keine verschiedenen "not false" geben kann.

Hier werden aber gerade Birnen mit Äpfel verglichen.
Code:
a := 2
Bool( a ) => not false

( a = b ) => false
( Bool( a ) = Bool( b ) ) => true

Caps 15. Nov 2010 10:52

AW: Auto hält nicht an roter Ampel
 
Klar, mit einem expliziten Cast funktioniert's natürlich.
Aber ohne Cast kriegt man Probleme, das ist eigentlich schon alles.

generic 15. Nov 2010 11:26

AW: Auto hält nicht an roter Ampel
 
Wenn es schon ein Auto Objekt gibt, warum gibt es kein Ampel Objekt?

himitsu 15. Nov 2010 12:11

AW: Auto hält nicht an roter Ampel
 
Und vergiß das Straßenobjekt nicht. :)

es geht auch mit rein logischen Mitteln :stupid:
Delphi-Quellcode:
if a <> b then
=
Delphi-Quellcode:
if a xor b then
Delphi-Quellcode:
if a = b then
=
Delphi-Quellcode:
if (a and b) or (not a and not b) then
,
Delphi-Quellcode:
if not (a xor b) then


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Seite 2 von 2     12   

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