Zur Themenübersicht         

Autos und Ampeln

Aufgabe 1: (Eine erste Modellierungsaufgabe)

Zum weiteren Üben der Steuerung von Programmabläufen mit Hilfe von Kontrollstrukturen sollen zwei Klassen TAuto und TAmpel entworfen werden. Es soll sich hierbei um 'dumme' Klassen handeln, die aber alle Dienste (Aufträge und Anfragen) zur Verfügung stellen, die wir benötigen, um einfache aber auch schwierigere und interessante Verkehrssituationen simulieren zu können. (Fußgängerampel, Kreuzung, Baustelle, Abbiegungen ...).

Lösung: 

Durch Gruppenarbeit und nachherige Abstimmung wurden die folgenden Dienste für die beiden Klassen festgelegt:

Für die weitere Arbeit benötigen wir noch die Stift und Maus Basisklasse Tastatur

Zum Lesen von pdf-Dateien benötigt Ihr den Acrobat Reader:


Weitere Aufgaben: Übungen zum Umgang mit der Steuerung von Programmen durch Kontrollstrukturen

Nun beginnt die eigentliche Arbeit! Es soll eine ganze Reihe von Aufgaben mit Autos und Ampeln bearbeitet werden.

Zum Verständnis der Arbeitsweise des Muster bzw. Aufgabenprogramms hier ein Struktogramm des Ablaufes:

Und hier der kommentierte Quellcode:

 
Links Erklärung, rechts Code


Hier stehen die benötigten Klassen-Units














Objekte erzeugen





und mit Anfangswerten belegen
(initialisieren)




Zuerst ein wenig Information für
die Benutzerin / den Benutzer





Wenn irgendeine Taste gedrückt wurde ist diese
Bedingung erfüllt

Wichtig, dies löscht das erste Zeichen
im Tastaturspeicher

Sonst rast das Auto irre schnell flackernd 
über den Bildschirm
program Verwaltung;

uses
  mSuM, mUhr, mTAuto, mTAmpel;

// Namen für Objekte festlegen
var
  meinStift: Stift;
  derBildschirm : Bildschirm;
  dieTastatur : Tastatur;
  dieMaus : Maus;
  dieUhr  : Uhr;
  Ampel1 : TAmpel;
  Auto1 : TAuto;

begin

{----- Objekte erzeugen und initialisieren ----- }
  derBildschirm := Bildschirm.init;
  meinStift := Stift.init;
  dieTastatur := Tastatur.init;
  dieMaus := Maus.init;
  dieUhr := Uhr.init;
  Ampel1 := TAmpel.init;
  Ampel1.setzePosition(450,330);
  Ampel1.setzeWinkel(270);
  Auto1 := TAuto.init;
  Auto1.setzePosition(20,300);

  {----- Objekte arbeiten lassen -----}
  meinStift.bewegeBis(10,10);
  meinStift.schreibeText('Ampel Umschalten --->  Leertaste');
  meinStift.bewegeBis(10,30);
  meinStift.schreibeText('Ende ------------------------> linke Maustaste');

  repeat
    Auto1.fahre(1);
    if dieTastatur.wurdegedrueckt then
      begin
        Ampel1.schalte;
        dieTastatur.weiter;
      end;

    dieUhr.warte(1);
  until dieMaus.istGedrueckt;

{----- Objekte auflösen -----}
  meinStift.gibFrei;
  dieMaus.gibFrei;
  dieTastatur.gibFrei;
  Ampel1.gibfrei;
  Auto1.GibFrei;
  derBildschirm.gibFrei;
end.

Es folgen die ersten Lösungen