Esempi di Automi

- A cura del Prof. Stefano Salvi -


vasca.aut

Esempio di automa di moore.
Questo automa controlla una vasca che possiede due sensori, alto e basso. Entrambi i sensori sono ad off se non sono coperi dall'acqua, sono ad on se sono ragguinti dall'acqua.
L'automa ha due uscite:



distributore.aut

Esempio di automa di Mealy.
Descrive il funzionamento di un distributore di merendine, in grado di distribuire merendine da 600 o 800 Lire. Accetta monete da 100, 200 e 500 Lire. Possiede un display, sul quale vengono indicate le azioni possibili ed il credito accumulato, una gettoniera che restituisce le monete inserite oltre massimo credito per ottenere una merednina ed un cassetto (merenda) dal quale si può ritirare il prodotto.



riconoscitore.aut

Esempio di automa di riconoscitore.
Questo automa accetta una stringa nell'alfabeto { '0' , '1' }. Riconosce occorrenze, anche sovrapposte della stringa 101 in una stringa continua. Indica con un'uscita si (messaggio Stringa riconosciuta) il riconscimento della stringa.



vasca.aut

// Script di definizione dell'automa
// relativo alla vasca
/* Il commento puo' anche essere aperto *
  * e chiuso con i soliti simboli **/

autore { "Prof Stefano Salvi" }

moore {

input { alto { off, on}
	basso { off, on}
}

stati {s0, s1, s2}

output  { pompa { {on,"Manda Acqua"}, off}
	sirena { {on, "Suona"}, off}
}

transizione {
//a a  A  A
//b B  b  B
{s1,s0,s2,s0},
{s1,s1,s2,s0},
{s2,s2,s2,s2}
}
//          s0        s1         s2
uscite { {off,off}, {on,off}, {off,on} }
}


distributore.aut

// Distributore di merendine

autore {"Prof Stefano Salvi"}

mealy {
  immediato
  input { azione { 100 200 500 Merendina600 Merendina800 }}
  stati { s0 s100 s200 s300 s400 s500 s600 s700 s800 s900 s1000 s1100 s1200 }
  output { messaggio {
		{ m0,"Inserisci Moneta" }
		{ m100,"100 - Inserisci Moneta" }
		{ m200,"200 - Inserisci Moneta" }
		{ m300,"300 - Inserisci Moneta" }
		{ m400,"400 - Inserisci Moneta" }
		{ m500,"500 - Inserisci Moneta" }
		{ m600,"600 - Inserisci Moneta o Chiedi merenda" }
		{ m700,"700 - Inserisci Moneta o Chiedi merenda" }
		{ m800,"800 - Chiedi merenda" }
		{ m900,"900 - Chiedi merenda" }
		{ m1000,"1000 - Chiedi merenda" }
		{ m1100,"1100 - Chiedi merenda" }
		{ m1200,"1200 - Chiedi merenda" }
        } 
	gettoniera { fe, { re "Restituisce moneta"}}
	merenda { fe {m600 "Merendina da 600 Lire"} { m800 "Merendina da 800 Lire"}}
  }

  transizione {
  //	 100   200   500   M600 M800
	{s100  s200  s500  s0   s0 }		// S0
	{s200  s300  s600  s100 s100 }		// S100
	{s300  s400  s700  s200 s200 }		// S200
	{s400  s500  s800  s300 s300 }		// S300
	{s500  s600  s900  s400 s400 }		// S400
	{s600  s700  s1000 s500 s500 }		// S500
	{s700  s800  s1100 s0   s600 }		// S600
	{s800  s900  s1200 s100 s700 }		// S700
	{s800  s800  s800  s200 s0 }		// S800
	{s900  s900  s900  s300 s100 }		// S900
	{s1000 s1000 s1000 s400 s200 }		// S1000
	{s1100 s1100 s1100 s500 s300 }		// S1100
	{s1200 s1200 s1200 s600 s400 }		// S1200
  }
  uscite {
  //	 100                 200               500               M600             M800
  //	  m     g  m      m     g  m     m     g  m      m     g   m     m    g  m   
	{{m100  fe fe   }{m200  fe fe  }{m500  fe fe   }{m0    fe  fe  }{m0   fe fe}}	// S0
	{{m200  fe fe   }{m300  fe fe  }{m600  fe fe   }{m100  fe  fe  }{m100 fe fe}}	// S100
	{{m300  fe fe   }{m400  fe fe  }{m700  fe fe   }{m100  fe  fe  }{m200 fe fe}}	// S200
	{{m400  fe fe   }{m500  fe fe  }{m800  fe fe   }{m300  fe  fe  }{m300 fe fe}}	// S300
	{{m500  fe fe   }{m600  fe fe  }{m900  fe fe   }{m400  fe  fe  }{m400 fe fe}}	// S400
	{{m600  fe fe   }{m700  fe fe  }{m1000 fe fe   }{m500  fe  fe  }{m500 fe fe}}	// S500
	{{m700  fe fe   }{m800  fe fe  }{m1100 fe fe   }{m0    fe  m600}{m600 fe fe}}	// S600
	{{m800  fe fe   }{m900  fe fe  }{m1200 fe fe   }{m100  fe  m600}{m700 fe fe}}	// S700
	{{m800  re fe   }{m800  re fe  }{m800  re fe   }{m200  fe  m600}{m0   fe m800}}	// S800
	{{m900  re fe   }{m900  re fe  }{m900  re fe   }{m300  fe  m600}{m100 fe m800}}	// S900
	{{m1000 re fe   }{m1000 re fe  }{m1000 re fe   }{m400  fe  m600}{m200 fe m800}}	// S1000
	{{m1100 re fe   }{m1100 re fe  }{m1100 re fe   }{m500  fe  m600}{m300 fe m800}}	// S1100
	{{m1200 re fe   }{m1200 re fe  }{m1200 re fe   }{m600  fe  m600}{m400 fe m800}}	// S1200
  }
}


riconoscitore.aut

// Riconoscitore di sequenza 101

autore {"Prof Stefano Salvi"}

mealy {
  alfabeto { "01" }
  stati { si s1 s10 }
  output { risultato { no { si,"Stringa riconosciuta" } } 
  }

  transizione {
  //	 0	1
	{si	s1 }	// Si
	{s10	si }	// S1
	{si	si }	// S10
  }
  uscite {
//	  0	 1
	{{no}	{no}}	// si
	{{no}	{no}}	// s1
	{{no}	{si}}	// s10
  }
}