[S] Pseudo-Code fuer Mealy-Automat

17/12/2014 - 05:34 von Gregor Szaktilla | Report spam
Moin allerseits!

In der Hoffnung, hier damit nicht OT zu sein (immerhin möchte ich‘s in C
oder C++ umsetzen):

Ich möchte einen Mealy-Automat implementieren, finde aber keinen
Pseudo-Code, nach dem ich mich richten könnte. Mit der in der Wikipedia
gezeigten Notation (Diagramme mit Pfeilen) kann ich nichts anfangen.

Auch die Suche via Metager war Erfolglos. Ich habe allerdings nicht alle
paar Tausend Fundstellen kontrolliert.

Gruß

Gregor
 

Lesen sie die antworten

#1 Stefan Reuther
17/12/2014 - 12:34 | Warnen spam
Gregor Szaktilla wrote:
In der Hoffnung, hier damit nicht OT zu sein (immerhin möchte ich‘s in C
oder C++ umsetzen):

Ich möchte einen Mealy-Automat implementieren, finde aber keinen
Pseudo-Code, nach dem ich mich richten könnte. Mit der in der Wikipedia
gezeigten Notation (Diagramme mit Pfeilen) kann ich nichts anfangen.



Was ist denn das für ein Problem, dessen Lösung "ich brauche einen
Mealy-Automaten" lautet? Ich denk mir zwar öfters "jetzt brauchst du
'nen Zustandsautomaten", aber "jetzt brauche ich einen Mealy-Automaten"
hab ich noch nie gedacht.

Ein Mealy-Automat ist ein Automat, der für seine Ausgabe sowohl die
Eingabe, als auch seinen Zustand auswerten kann. Das könnte man in C
aufschreiben als

typedef Input; // Eingabealphabet, Sigma
typedef Output; // Ausgabealphabet, Omega
typedef State; // Zustand, Q

// Zustandsübergangsfunktion; modifiziert *pState, liefert Ausgabe
Output zeta(State* pState, Input input)
{
// ...
}

(im Gegensatz dazu wàre der Moore-Automat
void delta(State* pState, Input input);
Output lambda(State state);
)

Wie man jetzt die Zustandsübergangsfunktion am zweckmàßigsten
aufschreibt, hàngt davon ab, wie der Automat letztlich aussieht (welche
Transitionen man zusammenfassen kann). Das kann sowas
switch (*pState) {
case State_A:
switch (input) {
case Input_A: *pState = State_B; return Output_42;
}
}
sein, oder die beiden switch vertauscht, oder ein Tabellenlookup, oder
eine Formel.


Stefan

Ähnliche fragen