AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auto hält nicht an roter Ampel

Ein Thema von snears · begonnen am 12. Nov 2010 · letzter Beitrag vom 15. Nov 2010
Antwort Antwort
snears

Registriert seit: 25. Jan 2010
51 Beiträge
 
#1

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 17:22
ah okay ich habe das problem gefunden

Delphi-Quellcode:

if (auto1.left <= 120) and (rot.Visible = true) then
   begin
   auto1.left := 120;

   end
else
 begin
 auto1.left := (auto1.left +3);
 if auto1.left >= 720 then
  auto1.left := 0;
 end;
einfach nur gucken... aber das fällt schon schwer
Wenn man bei einem Projekt nicht weiter kommt, einmal um das Haus rennen und wieder an das Projekt setzen...

Geändert von mkinzler (14. Nov 2010 um 11:53 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.400 Beiträge
 
Delphi 12 Athens
 
#2

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 17:37
Da sich dein Auto nicht in Einerschritten bewegt, mußt du also auf Bereiche und keine genauen Werte prüfen, so daß dein Auto dieses auch trifft.

> oder < bringt nicht viel, wenn sich der Bereich mitten im Raum befindet.

Tipp: Auf "= true" prüft man nicht.

Delphi-Quellcode:
if rot.Visible and (auto1.left >= 120) and (auto1.left < 120 + 3) then
begin
  auto1.left := 120;
end
else
  begin
    auto1.left := auto1.left + 3;
    if auto1.left >= 720 then
      auto1.left := 0;
  end;
Und wenn man das Ganze noch etwas umstellt, dann wird der Code kürzer und man spart sich das unnötige Setzen auf 120, wo dasAuto schon dort ist.
Delphi-Quellcode:
{ wenn nicht (rot und an Ampel), dann fahren }
if not (rot.Visible and (auto1.left >= 120) and (auto1.left < 120 + 3) then
  ...

// bzw.

{ nur wenn nicht Rot oder vor Ampel oder hinter Ampel, dann fahren }
{ aka: nur wenn nicht Rot oder nicht an der Ampel, dann fahren }
if not rot.Visible or (auto1.left < 120) or (auto1.left >= 120 + 3) then
begin
  { ein Stückchen fahren } 
  auto1.left := auto1.left + 3;
  { wenn aus dem Bild raus, dann auf Anfang }
  if auto1.left >= 720 then
    auto1.left := 0;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Nov 2010 um 17:51 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Auto hält nicht an roter Ampel

  Alt 12. Nov 2010, 20:25
Code:
(rot.Visible = true)
Eine Boolesche Variable über einen Vergleich auf ihren Wahrheitsgehalt zu prüfen, ist zumindest unelegant und überflüssig, vielleicht kann das sogar zu Fehlern im Programmablauf führen. Boolesche Variablen können nämlich stattdessen direkt auf ihren Wahrheitsgehalt geprüft werden.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auto hält nicht an roter Ampel

  Alt 13. Nov 2010, 10:21
Es kann tatsächlich zu Fehlern führen. Siehe Über den Umgang mit Boolean
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#5

AW: Auto hält nicht an roter Ampel

  Alt 13. Nov 2010, 18:50
Es kann tatsächlich zu Fehlern führen. Siehe Über den Umgang mit Boolean
Oh Mann! Dass man Integer auf Boolean casten kann, hätte ich bei der "streng typisierten Sprache" Pascal eigentlich nicht erwartet. Bisher bin ich nämlich davon ausgegangen, dass <Boolean> = <Wahrheitswert> stets dem Ausdruck <Wahrheitswert> = <Wahrheitswert> entspricht und zu keinerlei Problemen führen könnte. Ob Nikolaus Wirth das gewollt hätte? (vorausgesetzt, es ist nicht schon seine Erfindung )

Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.400 Beiträge
 
Delphi 12 Athens
 
#6

AW: Auto hält nicht an roter Ampel

  Alt 13. Nov 2010, 20:07
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
if myBoolean = True then ergibt if Byte(myBoolean) = 1 then ,
wärend if myBoolean then intern so if Byte(myBoolean) <> 0 then aussieht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#7

AW: Auto hält nicht an roter Ampel

  Alt 13. Nov 2010, 22:19
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.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Auto hält nicht an roter Ampel

  Alt 14. Nov 2010, 01:52
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....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 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