![]() |
||
| Material |
OOP
Grundlagen
Delphi
Software-Technik
Bonsai
Digitaltechnik
Ereignisse
Grafik
UML
Netze
Fischertechnik
Tipps
Werkzeuge
Literatur
Automaten
Sprachen
Datenbanken
XML
Prolog
Berechenbarkeit
|
|
|
Automatentheorie |



const
{ 0. Automatenname eintragen }
automatname = 'Mealy-Automat, Hopcroft/Ullman, S.45';
type
{ 1. Zustandsmenge, Eingabe- und Ausgabealphabet anpassen }
TZustand = (q0,p0,p1);
TEingabe = (e0,e1);
TAusgabe = (an,ay);
const
{ 2. Startzustand eintragen }
startzustand = q0;
{ 3. Klartextentsprechungen eintragen }
zText : array[TZustand] of string =
('q0','p0','p1');
eText : array[TEingabe] of string =
('0','1');
aText : array[TAusgabe] of string =
('n','y');
{ 4a. Automatentafel eingeben, auf Zeilen und Spalten achten }
fue : array[TZustand,TEingabe] of TZustand =
((p0,p1),
(p0,p1),
(p0,p1));
{ 4b. Automatentafel eingeben, auf Zeilen und Spalten achten }
fa : array[TZustand,TEingabe] of TAusgabe =
((an,an),
(ay,an),
(an,ay));
|
constructor TAutomat.create; begin inherited create; zustand := startzustand; end; ... procedure TAutomat.verarbeiteEingabe; begin ausgabe := fa[zustand,eingabe]; zustand := fue[zustand,eingabe]; end; |
![]() |
Interessant ist die Verwendung von ComboBoxen für Zustand, Eingabe und Ausgabe. Die auswählbaren Items werden beim Programmstart aus den entsprechenden Arrays in die ComboBoxen eingelesen. Damit ist sichergestellt, dass für Eingaben und Zustände nur erlaubte Werte ausgewählt werden können. Die Auswahlliste bei der Ausgabe dient der Information über das Ausgabe-Alphabet, das hier eingesehen werden kann. Details für Belegung und Auslesen der Auswahlisten/ComboBoxen finden sich in folgenden Quelltext-Auszügen. |
...
// Eingabealphabet in ComboBox eintragen
for e := Low(TEingabe) to High(TEingabe) do
cbEingabe.Items.Add(eText[e]);
cbEingabe.ItemIndex := 0;
...
procedure TForm1.bVerarbeiteClick(Sender: TObject);
begin
if (cbZustand.ItemIndex <> -1) and (cbEingabe.ItemIndex <> -1)
then
begin
automat.setZustand(TZustand(cbZustand.ItemIndex));
automat.setEingabe(TEingabe(cbEingabe.ItemIndex));
automat.verarbeiteEingabe;
mEingaben.Lines.Add(eText[automat.getEingabe]);
cbZustand.ItemIndex := Ord(automat.getZustand);
cbAusgabe.ItemIndex := Ord(automat.getAusgabe);
mAusgaben.Lines.Add(aText[automat.getAusgabe]);
end;
end;
|