AGB  ·  Datenschutz  ·  Impressum  







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

Wer findet den Fehler?

Ein Thema von fox67 · begonnen am 29. Aug 2012 · letzter Beitrag vom 29. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2      
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#1

Wer findet den Fehler?

  Alt 29. Aug 2012, 14:01
Da mir gerade ein bisschen langweilig ist programmiere ich ein Programm bei dem Autos zufallsgesteuert durch eine Strassenkarte mit mehreren Kreuzungen und Ampelsystemen. Doch das ganze hängt schon beiden Ampeln irgentein Fheler hat sich in den Code eingeschlichen und ich finde ihn nicht.
Code:
procedure TForm1.AmpelsteuerungTimer(Sender: TObject);


begin

if A = 0 then
begin
  ampelsteuerung.Interval:=6000;
  A:=A+1;
  rot1.Brush.Color := clred;
  gelb1.Brush.Color:= clblack;
  gruen1.Brush.Color:= clblack;
  rot2.Brush.Color := clblack;
  gelb2.Brush.Color:= clblack;
  gruen2.Brush.Color:= cllime;
  rot.Brush.Color:= clred;
  gelb.Brush.Color:= clblack;
  gruen.Brush.Color:= clblack;
  rot3.Brush.Color:= clblack;
  gelb3.Brush.Color:= clblack;
  gruen3.Brush.Color:= cllime;
  rot6.Brush.Color:= clred;
  gelb6.Brush.Color:= clblack;
  gruen6.Brush.Color:= clblack;
  rot5.Brush.Color:= clblack;
  gelb5.Brush.Color:= clblack;
  gruen5.Brush.Color:= cllime;
end;

if A = 1 then
begin
  ampelsteuerung.Interval:= 1000;
  A:=A+1;
  rot1.Brush.Color := clred;
  gelb1.Brush.Color:= clyellow;
  gruen1.Brush.Color:= clblack;
  rot2.Brush.Color := clblack;
  gelb2.Brush.Color:= clyellow;
  gruen2.Brush.Color:= clblack;
  rot.Brush.Color:= clred;
  gelb.Brush.Color:= clyellow;
  gruen.Brush.Color:= clblack;
  rot3.Brush.Color:= clblack;
  gelb3.Brush.Color:= clyellow;
  gruen3.Brush.Color:= clblack;
  rot6.Brush.Color:= clred;
  gelb6.Brush.Color:= clyellow;
  gruen6.Brush.Color:= clblack;
  rot5.Brush.Color:= clblack;
  gelb5.Brush.Color:= clyellow;
  gruen5.Brush.Color:= clblack;

end;
if A = 2 then
begin
  ampelsteuerung.Interval:=6000;
   A:=A+1;
  rot1.Brush.Color := clblack;
  gelb1.Brush.Color:= clblack;
  gruen1.Brush.Color:= cllime;
  rot2.Brush.Color := clred;
  gelb2.Brush.Color:= clblack;
  gruen2.Brush.Color:= clblack;
  rot.Brush.Color:= clblack;
  gelb.Brush.Color:= clblack;
  gruen.Brush.Color:= cllime;
  rot3.Brush.Color:= clred;
  gelb3.Brush.Color:= clblack;
  gruen3.Brush.Color:= clblack;
  rot6.Brush.Color:= clblack;
  gelb6.Brush.Color:= clblack;
  gruen6.Brush.Color:= cllime;
  rot5.Brush.Color:= clred;
  gelb5.Brush.Color:= clblack;
  gruen5.Brush.Color:= clblack;

end;
if A = 3 then
begin
  ampelsteuerung.Interval:=1000;
  A:=A-3;
  rot1.Brush.Color := clblack;
  gelb1.Brush.Color:= clyellow;
  gruen1.Brush.Color:= clblack;
  rot2.Brush.Color := clred;
  gelb2.Brush.Color:= clyellow;
  gruen2.Brush.Color:= clblack;
  rot.Brush.Color:= clblack;
  gelb.Brush.Color:= clyellow;
  gruen.Brush.Color:= clblack;
  rot3.Brush.Color:= clred;
  gelb3.Brush.Color:= clyellow;
  gruen3.Brush.Color:= clblack;
  rot6.Brush.Color:= clblack;
  gelb6.Brush.Color:= clyellow;
  gruen6.Brush.Color:= clblack;
  rot5.Brush.Color:= clred;
  gelb5.Brush.Color:= clyellow;
  gruen5.Brush.Color:= clblack;

end;
end;
DIe Ampel schält nicht sondern bleibt in der ersten situtation stehn
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:03
Was genau geht nicht?
Btw: Hier würde sch eine case anbieten
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:06
Und der Debugger bietet sich auch an.
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
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:08
Was genau geht nicht?
Btw: Hier würde sch eine case anbieten
Hab ich unter den Programcode geschrieben
DIe Ampel schält nicht sondern bleibt in der ersten situtation stehn
  Mit Zitat antworten Zitat
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:09
Es entsteht ja keine Fehlermeldung sonder es passiert nur nicht was eigentlich passieren sollte
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:09
Was soll sie denn schälen? Hast Du einmal einen Haltepunkt gesetzt und Dir den Wert von A angeschaut?
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
Benutzerbild von himitsu
himitsu

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

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:12
Delphi-Tags sind auch was Cooles.

Und lies die mal den Thread durch, wo erklärrt wird, wie man eine Frage stellt.
Vorallen die berschrift und die Fehlerbeschreibung lassen sehr zu wünschen übrig.

Und nun zum Problem:

Geh mal im Kopf das Folgende durch.
Fange mit A=0 an (und z.B. auch mal mit A=2) und gehe den Code duch ... du wirst sehn was da falasch läuft.
Delphi-Quellcode:
// alles Unwichtige aus dem Code entfernt

if A = 0 then
begin
  A:=A+1;
end;

if A = 1 then
begin
  A:=A+1;
end;

if A = 2 then
begin
   A:=A+1;
end;

if A = 3 then
begin
  A:=A-3;
end;
Die Nutzung des Debuggers und das CASE oder alternativ zum CASE das ELSE helfen schon sehr viel, oder man verschiebt das Setzen der Variable A hinter alle IFs.
Vorallem der Debugger hilft bei der Aufgabe, welche ich dir oben gestellt hab.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Aug 2012 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:33
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ampelStatus := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  ampelRot: array[0..5] of TShape;
  ampelGelb: array[0..5] of TShape;
  ampelGruen: array[0..5] of TShape;
  i: Integer;
begin
  for i := 0 to 5 do
    begin
      ampelRot[i] := TShape(FindComponent('rot'+inttostr(i+1)));
      ampelGelb[i] := TShape(FindComponent('gelb'+inttostr(i+1)));
      ampelGruen[i] := TShape(FindComponent('gruen'+inttostr(i+1)));
    end;

  case ampelStatus of
    0: begin
          for i := 0 to 5 do
            begin
              ampelRot[i].Brush.Color := clRed;
              ampelGelb[i].Brush.Color := clBlack;
              ampelGruen[i].Brush.Color := clBlack;
            end;
          timer1.Interval := 6000;
          ampelStatus := 1;
        end;
    1: begin
          for i := 0 to 5 do
            begin
              ampelRot[i].Brush.Color := clRed;
              ampelGelb[i].Brush.Color := clYellow;
              ampelGruen[i].Brush.Color := clBlack;
            end;
          timer1.Interval := 2000;
          ampelStatus := 2;
        end;
    2: begin
          for i := 0 to 5 do
            begin
              ampelRot[i].Brush.Color := clBlack;
              ampelGelb[i].Brush.Color := clBlack;
              ampelGruen[i].Brush.Color := clGreen;
            end;
          timer1.Interval := 6000;
          ampelStatus := 3;
        end;
    3: begin
          for i := 0 to 5 do
            begin
              ampelRot[i].Brush.Color := clBlack;
              ampelGelb[i].Brush.Color := clYellow;
              ampelGruen[i].Brush.Color := clBlack;
            end;
          timer1.Interval := 2000;
          ampelStatus := 0;
        end;
  end;

end;
Entweder mit exit arbeiten oder rückwärts anfangen...
Philip

Geändert von Darlo (29. Aug 2012 um 14:43 Uhr) Grund: mal die exits rausgenommen ;-)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:37
Entweder mit exit arbeiten oder rückwärts anfangen...
Wieso? Muss man doch in Delphi gar nicht. Es wird doch nur der Fall angesprungen, der auch wirklich vorliegt und keine weiteren danach.

PS: Es gibt auch [delphi]-Tags
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wer findet den Fehler?

  Alt 29. Aug 2012, 14:39
Jupp, das CASE macht nur das, was zutrifft und sonst nix.

Bei den vielen IFs hätte man zwar mit EXIT arbeiten können, aber anstatt sowas Krankes zu machen, wäre es mit ELSE besser und vorallem übersichtlicher.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz