AGB  ·  Datenschutz  ·  Impressum  







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

Ampelschaltung mit Case Anweisungen.

Ein Thema von VitaminC07 · begonnen am 28. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
VitaminC07

Registriert seit: 28. Jan 2007
2 Beiträge
 
#1

Ampelschaltung mit Case Anweisungen.

  Alt 28. Jan 2007, 13:58
Hallo

ich muss für die Schule eine Ampelschaltung machen. Mit einem Timer und Case anweisungen.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    IAmpel4gelb: TImage;
    IAmpel4gruen: TImage;
    IAmpel4rot: TImage;
    IAmpel4rotgelb: TImage;
    IAmpel1gelb: TImage;
    IAmpel1gruen: TImage;
    IAmpel1rot: TImage;
    IAmpel1rotgelb: TImage;
    IAmpel3gelb: TImage;
    IAmpel3gruen: TImage;
    IAmpel3rot: TImage;
    IAmpel3rotgelb: TImage;
    IAmpel2gelb: TImage;
    IAmpel2gruen: TImage;
    IAmpel2rot: TImage;
    IAmpel2rotgelb: TImage;
    Label1: TLabel;
    Label2: TLabel;
    TAmpel: TTimer;
    BAmpelblinken: TButton;
    BAmpelaus: TButton;
    procedure TAmpelTimer(Sender: TObject);
  private
    { Private declarations }
    a:integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TAmpelTimer(Sender: TObject);
begin
a:=a+1;
case a of

1: begin
        IAmpel1rot.Visible :=true;
        IAmpel1rotgelb.Visible :=false;
        IAmpel1gelb.Visible :=false;
        IAmpel1gruen.Visible :=false;
        IAmpel2rot.Visible :=true;
        IAmpel2rotgelb.Visible :=false;
        IAmpel2gelb.Visible :=false;
        IAmpel2gruen.Visible :=false;
        IAmpel3rot.Visible :=true;
        IAmpel3rotgelb.Visible :=false;
        IAmpel3gelb.Visible :=false;
        IAmpel3gruen.Visible :=false;
        IAmpel4rot.Visible :=true;
        IAmpel4rotgelb.Visible :=false;
        IAmpel4gelb.Visible :=false;
        IAmpel4gruen.Visible :=false;
        IAmpel.Interval := 1000;
        end;
2: begin
        IAmpel1rot.Visible :=false;
        IAmpel1rotgelb.Visible :=true;
        IAmpel1gelb.Visible :=false;
        IAmpel1gruen.Visible :=false;
        IAmpel2rot.Visible :=true;
        IAmpel2rotgelb.Visible :=false;
        IAmpel2gelb.Visible :=false;
        IAmpel2gruen.Visible :=false;
        IAmpel3rot.Visible :=false;
        IAmpel3rotgelb.Visible :=true;
        IAmpel3gelb.Visible :=false;
        IAmpel3gruen.Visible :=false;
        IAmpel4rot.Visible :=true;
        IAmpel4rotgelb.Visible :=false;
        IAmpel4gelb.Visible :=false;
        IAmpel4gruen.Visible :=false;
        TAmpel.Interval := 1000
        end;
3: begin
        IAmpel1rot.Visible :=false;
        IAmpel1rotgelb.Visible :=false;
        IAmpel1gelb.Visible :=false;
        IAmpel1gruen.Visible :=true;
        IAmpel2rot.Visible :=true;
        IAmpel2rotgelb.Visible :=false;
        IAmpel2gelb.Visible :=false;
        IAmpel2gruen.Visible :=false;
        IAmpel3rot.Visible :=false;
        IAmpel3rotgelb.Visible :=false;
        IAmpel3gelb.Visible :=false;
        IAmpel3gruen.Visible :=true;
        IAmpel4rot.Visible :=true;
        IAmpel4rotgelb.Visible :=false;
        IAmpel4gelb.Visible :=false;
        IAmpel4gruen.Visible :=false;
        TAmpel.Interval := 10000
        end;
4: begin
        IAmpel1rot.Visible :=false;
        IAmpel1rotgelb.Visible :=false;
        IAmpel1gelb.Visible :=true;
        IAmpel1gruen.Visible :=false;
        IAmpel2rot.Visible :=true;
        IAmpel2rotgelb.Visible :=false;
        IAmpel2gelb.Visible :=false;
        IAmpel2gruen.Visible :=false;
        IAmpel3rot.Visible :=false;
        IAmpel3rotgelb.Visible :=false;
        IAmpel3gelb.Visible :=true;
        IAmpel3gruen.Visible :=false;
        IAmpel4rot.Visible :=true;
        IAmpel4rotgelb.Visible :=false;
        IAmpel4gelb.Visible :=false;
        IAmpel4gruen.Visible :=false;
        TAmpel.Interval := 1000
        end;
5: begin
        IAmpel1rot.Visible :=true;
        IAmpel1rotgelb.Visible :=false;
        IAmpel1gelb.Visible :=false;
        IAmpel1gruen.Visible :=false;
        IAmpel2rot.Visible :=true;
        IAmpel2rotgelb.Visible :=false;
        IAmpel2gelb.Visible :=false;
        IAmpel2gruen.Visible :=false;
        IAmpel3rot.Visible :=true;
        IAmpel3rotgelb.Visible :=false;
        IAmpel3gelb.Visible :=false;
        IAmpel3gruen.Visible :=false;
        IAmpel4rot.Visible :=true;
        IAmpel4rotgelb.Visible :=false;
        IAmpel4gelb.Visible :=false;
        IAmpel4gruen.Visible :=false;
        TAmpel.Interval := 1000
        end;


end;

end.
Irgentetwas hab ich falsch gemacht, jedoch weis ich nicht was.
Wäre super wenn ihr mir nen Tipp geben könntet.
  Mit Zitat antworten Zitat
imp

Registriert seit: 5. Mai 2003
25 Beiträge
 
#2

Re: Ampelschaltung mit Case Anweisungen.

  Alt 28. Jan 2007, 14:16
nach den ampelphasen hab ich jetzt nicht geschaut, aber aufgefallen ist mir, dass a nicht mehr zurückgesetzt wird.
eventuell wäre a := (a + 1) mod 5 oder so angebracht.

/edit: ach so, die variable sollte man auch irgendwo initialisieren. eventuell im constructor o.ä.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Ampelschaltung mit Case Anweisungen.

  Alt 28. Jan 2007, 14:29
Ich wuerde erst mal den Ansatz ueberarbeiten. Eine Ampel ist ein Zustandsautomat.
Delphi-Quellcode:
type
  TAmpelZustaende =
    (azRot, azRotGelb, azGruen, azGelb);
Durch diese Zustaende rotiert die Ampel einfach.
Delphi-Quellcode:
procedure TForm1.TAmpelTimer(Sender: TObject);
begin
  // den Zustand fortschalten
  if AmpelZustand = azGelb then
    AmpelZustand := azRot
  else
    Inc(AmpelZustand);
Jetzt kann man vom Zustand die Darstellung ableiten.
Delphi-Quellcode:
  // den neuen Zustand darstellen
  case AmpelZustand of
    azRot:
      begin
        IRot.Visible := True;
        IGelb.Visible := False;
        IGruen.Visible := False;
      end;
    azRotGelb:
      begin
        IRot.Visible := True;
        IGelb.Visible := True;
        IGruen.Visible := False;
      end;
    azGruen:
      begin
        IRot.Visible := False;
        IGelb.Visible := False;
        IGruen.Visible := True;
      end;
    azGelb:
      begin
        IRot.Visible := False;
        IGelb.Visible := True;
        IGruen.Visible := False;
      end;
  end;
Das wichtigste dabei ist das immer die Darstellung dem Zustand des Programmes nachgeordnet ist. Das gilt fuer jedes vernuenftige Programm.
  Mit Zitat antworten Zitat
VitaminC07

Registriert seit: 28. Jan 2007
2 Beiträge
 
#4

Re: Ampelschaltung mit Case Anweisungen.

  Alt 28. Jan 2007, 14:38
wow super!!
Danke für die schnelle Antworten !!!

  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Ampelschaltung mit Case Anweisungen.

  Alt 28. Jan 2007, 14:40
Alternative Zustandsfortschaltung. Es wird ausgenutzt das TAmpelZustand ein Ordinaltyp ist und daher mit Zahlen gerechnet werden kann.
Delphi-Quellcode:
procedure TForm1.TAmpelTimer(Sender: TObject);
begin
  // den Zustand fortschalten
  AmpelZustand := TAmpelZustand((Ord(AmpelZustand) + 1) mod (High(AmpelZustand) + 1));
Erst wird mit Ord(AmpelZustand) der Zustand in eine Zahl umgewandelt und dann um 1 erhoeht. Das Resultat wird mit mod begrenzt (ein Ring der Zustaende wird geformt). Zuletzt wird das Ergebnis wieder in einen Ampelzustand verwandelt.
Das duerfte aber den Lehrer misstrauisch machen. Kein Anfaenger kann das aus dem Aermel schuetteln.
  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 03:01 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