Hallo,
ich habe eine Frage zu Automaten. Ich würde gerne wissen, ob es möglich
ist einen ODER Automaten zu bauen, der als Eingabe eine Bitfolge erhält
und diese dann ODER Verknüpft.
Dann würde mich interessieren, ob es möglich ist einen UND Automaten zu
bauen, der als Eingabe auch wieder eine Bitfolge erhält und dann diese
Bitfolge UND Verknüpft.
Meine Frage, geht das überhaupt, weil normalerweise benötigt man doch
zwei Inputs sage ich mal. Das geht ja auch aus den Wahrheitstabellen
hervor. daher hier die Frage, wie man sowas machen könnte?
Ich habe mir selber schon Gedanken gemacht, das Problem ist nur, dass
der Automat dann die Wahl hat, oder er jetzt und Verknüpft oder nicht.
"Mit WAS soll sie denn verknüpft werden?"
Ja das frage ich mich auch. Also zu meinem Hintergrund, ich beschäftige
mich gerade mit State Machines und da gab es genau so eine Aufgabe.
Bauen sie eine State Machine die als Eingabe einen String 0,1 erhält und
es soll die UND state Machine konstruiert werden, was mich halt etwas
verwirrt, da man ja eigentlich etwas und VERKNÜPFT?
Ok, ich frage mal anders:
Mal angenommen ich habe eine Bitfolge 11001110 im Bild ist die
"angebliche" SM für ODER angegeben. Akzeptiert die SM die Bitfolge oder
nicht, und wenn ja warum?
Im einfachsen Fall werden 2 Bits verknüpft.
Inputs wären also Bit1 und Bit2
Eine Statemachine besteht (in meinem Job) aus 4 Dingen: States, Events,
Transitions und rules
Im Laufe einer Entwicklung ergeben sich
die notwendigen states,
die events kommen mitunter aus dem Umgebung
die Transitions erledigen den Job zwischen Source- und Destination state
die rules beschreiben dann die state machine.
Läßt sich herrlich mit UML designen :D
der Ablauf hier scheint ein sequenzielle Eingabe der (beiden) bits zu
sein.
Bit1 kommt 'rein' event Bit1_low oder Bit1_high
Dann kommt
Bit2 'rein', Event Bit2_Low oder Bit2_High
Wenn beide Bits 'im kasten' sind ist entsprechend der events nur ein
Zielstate möglich welche bei 2 Bits 1 aus 4 ergeben müßte
00
01
10
oder
11
Also braucht es 4 States nach dem letze Schritt, 2 davor und einen idle
StateIdle
StateBit1Low
StateBit1High
StateBit1LowBit2Low
StateBit1LowBit2High
StateBit1HighBit2Low
StateBit1HighBit2High
die Rules: AddRule( source, Event, destination, transition)
AddRule( StateIdle, EvtBit1Low, StateBit1Low, Trxxx)
AddRule( StateIdle, EvtBit1High, StateBit1High, Trxxx)
AddRule( StateBit1Low, EvtBit2Low, StateBit1LowBit2Low, Trxxx)
AddRule( StateBit1Low, EvtBit2High, StateBit1LowBit2High, Trxxx)
AddRule( StateBit1High, EvtBit2Low, StateBit1HighBit2Low, Trxxx)
AddRule( StateBit1High, EvtBit2High, StateBit1HighBit2High, Trxxx)
AddRule( StateBit1LowBit2Low, EvtReset, StateIdle, Trxxx)
AddRule( StateBit1LowBit2High, EvtReset, StateIdle, Trxxx)
AddRule( StateBit1HighBit2Low, EvtReset, StateIdle, Trxxx)
AddRule( StateBit1HighBit2High, EvtReset, StateIdle, Trxxx)
Das wäre eine Minimalversion, quasi der HappyDay
In meiner state machine hat jeder state einen enter- und exit-Methode
(c++) und jede Transition kann ebenfalls idividuelle Aktionen
durchführen.
Abhängig von der Anforderung UND | OR müssen in den 4 Endstates dann die
möglichen Folgen programmiert werden, z.B. LED ansteuern oder so.
StateBit1LowBit2Low::enter()
{
SetLED(false)
}
StateBit1LowBit2High::enter()
{
if(OR_MACHINE) SetLED(true)
if(AND_MACHINE) SetLED(false)
}
StateBit1HighBit2Low::enter()
{
if(OR_MACHINE) SetLED(true)
if(AND_MACHINE) SetLED(false)
}
StateBit1HighBit2High::enter()
{
SetLED(true)
}
Habs, ich habe einfach zu kompliziert gedacht...
Zur Lösung, es geht wirklich nur um die akzeptierenden Zustände, und auf
die kommt man, indem man sich die Warheitstabelle ansieht.
Kurzes Beispiel: zu Und:
1 und 1 wird akzeptiert, alles andere Nicht, 111 würde also akzeptiert
werden
1011 beispielsweise nicht, weil damit kein stabiler Zustand erreicht
werden kann.
PS: war keine Hausaufgabe, schade, dass das hier jeder immer gleich
denkt (bzw unterstellt), ist ja nicht so dass man sich mit solchen
Sachen nicht auch in der Freizeit beschäftigen kann oder
Selbststudium...
bezugnehmend auf deine Grafik mit den beiden States würde auch 1011 zum
rechten state führen.
Aus dem rechten state führt keine Kante mehr raus und als Event scheint
nur 0 und 1 etwas zu bewirken, aber der state spielt ja nur noch mit
sich selbst :O
Da kannste Unmengen an Einsen und Nullen rein schieben ohne das sich was
ändert.
BetonState
:)
NichtWichtig schrieb:> Da kannste Unmengen an Einsen und Nullen rein schieben ohne das sich was> ändert.
Der Automat bleibt links stehen, wenn nur 0en hineingeschoben werden.
Sobald eine 1 hineingesteckt wird, geht er auf den rechten Zustand über.
Hier ist es egal, was dann noch kommt.
Es ist also, wie schon gesagt, ein ODER.
Links ist wohl der Ergebniszustand 0 und recht 1.
GENAU!
Mit dem besagten 1011 geht die SM auf jeden Fall in den rechten state
und deswegen ist die Aussage
>>>1011 beispielsweise nicht, weil damit kein stabiler Zustand erreicht
werden kann.<<<<
falsch!