Zur Themenübersicht     

Programmierung eines EA 1

Beispieltext

1. Beispiel:

Automat, der prüft, ob eine Dualzahl eine ungerade Anzahl von Einsen enthält

 

1.1 Aufteilung des Automaten in 3 Klassen

TTestAnwendung: konkrete GUI

TErkennenderAutomat: allgemeiner erkennender Automat

TTestAutomat: konkreter Automat als Unterklasse zu TErkennenderAutomat

 

1.2 Umsetzung der Bestandteile eines Automaten in das Programm

Aktueller Zustand: - Attribut von TErkennenderAutomat vom Typ Zahl

- erhält Startwert in der Methode Init von TTestAutomat

- wird durch die Übergangsfunktion im Programmverlauf neu gesetzt

Eingabealphabet: - Attribut von TErkennenderAutomat vom Typ Zahlenmenge

- erhält Startwert in der Methode Init von TTestAutomat

Zustandsmenge: - Attribut von TErkennenderAutomat vom Typ Zahlenmenge

- erhält Startwert in der Methode Init von TTestAutomat

Finalzustände: - Attribut von TErkennenderAutomat vom Typ Zahlenmenge

- erhält Startwert in der Methode Init von TTestAutomat

Übergangsfunktion: - Methode von TTestAutomat

- setzt je nach aktuellem Zustand und Eingabeparameter den aktuellen Zustand neu

Akzeptanzprüfung: - Methode von TErkennenderAutomat

- überprüft, ob der aktuelle Zustand in der Menge der Finalzustände enthalten ist

 

1.3 UML-Diagramm

 

1.4 Das fertige Programm ...

... befindet sich in der Datei 20040919_ErkennenderAutomat_Lucas.zip.

 

2. Beispiel

Automat, der in einem vorgegebenen Text die Silbe "man" erkennt

 

2.1 Aufteilung des Automaten in 3 Klassen

TManAnwendung: konkrete GUI

TErkennenderAutomat: allgemeiner erkennender Automat

TManAutomat: konkreter Automat als Unterklasse zu TErkennenderAutomat

 

2.2 Unterschiede zu Beispiel 1

- Eingabealphabet umfasst alle Zeichen und muss somit nicht als Attribut gesetzt werden

- Zustände sind nicht mehr vom Typ Zahl, sondern vom Typ TZustand, dessen mögliche Werte in der Typendeklaration festgelegt sind

- Zustandsmenge und Menge der Finalzustände sind vom Typ Menge von TZustand

- aus der Natur dieses Automaten folgt eine umfangreichere Übergangsfunktion in der Methode GibEin

 

2.3 UML-Diagramm

 

2.4 Das fertige Programm ...

... befindet sich in der Datei 20040920_ManAutomat_Lucas.zip.

Hier ein paar Anmerkungen zur Realisierung der Übergangsfunktion.
Der name 'GibEin' für die Übergangsfunktion ist dabei etwas verwirrend.

 
Realisierung der Übergangsfunktion





Es werden alle denkbaren Zustände
mit Hilfeeiner CASE-Anweisung durchlaufen.





Für jeden Zustand werden dann alle möglichen
Eingaben ebenfalls mit einer CASE-Anweisung
durchlaufen
Programmcode:

procedure TManAutomat.GibEin (pEingabe: Char);
(* Die Bezeichnung 'GibEin 
   für die Übergangsfunktion ist unglücklich *)
begin
  case AktuellerZustand of
    z0: begin
          case pEingabe of
            'm': AktuellerZustand := zm;
          end;
        end;
    zm: begin
          case pEingabe of
            'm': AktuellerZustand := zm;
            'a': AktuellerZustand := zma;
          else
            AktuellerZustand := z0;
          end;
        end;
    zma:begin
          case pEingabe of
            'm': AktuellerZustand := zm;
            'n': AktuellerZustand := zman;
          else
            AktuellerZustand := z0;
          end;
        end;
  end;// of case
end; // of proc