AngoLinux

Automi - Distributore di caffè e Cappuccino - Versione Moore

- A cura del Prof. Stefano Salvi -


Il quarto esercizio con gli automi chiede la soluzione dello stesso problema del precedente esercizio, ma utilizzando un automa di Moore. Questo comporterà un gran numero di stati.

Il testo dell'esercizio è il seguente:

Scrivere l'automa di un distribotore di caffè o cappuccino. Il caffè costa 400 Lire ed il cappuccino 600 Lire. Il distribtore accetta monete da 100, 200 e 500 Lire.
Il distributore possiede inoltre un display, uno sportello dal quale ritirare il prodotto ed uno sportellino nel quale verranno lasciate le monete rifiutate.
Se il credito non raggiunge le 400 Lire il distributore visualizza il messaggio mancano soldi sul display.
Se il credito raggiunge o supera le 400 Lire, il distributore visualizza il messaggio scelta : caffe sul display. A questo punto l'utente può inserire altre monete, per chiedere un cappuccino, oppure premere il tasto Caffe, per ottenere un caffè.
Se il credito raggiunge o supera le 600 Lire, il distributore visualizza il messaggio scelta : caffe o cappuccino sul display. A questo punto l'utente può premere il tasto Caffe, per ottenere un caffè (lo sportello del prodotto indicherà il fatto, ad esempio con il messaggio ritira il caffe) o Cappuccino per ottenere un cappuccino (lo sportello del prodotto indicherà il fatto, ad esempio con il messaggio ritira il cappuccino). Se invece si inserisca altra moneta, questa viene rifiutata, inviandola allo sportellino per le monete rifiutate.
Nel caso siano stati inseriti più soldi del necessario, il distributore riconoscerà un credito, al quale si aggiungeranno le monete successive.
È da osservare che, la cifra masima che si può inserire con le monete indicate è di 1000 Lire, infatti se si intoducono 600 Lire il distributore non accetta più moneta, quindi il credito non cresce più. Se invece si introducono 500 Lire, con una qualunque combinazione di monete, introducendo un'ulteriore moneta da 500 Lire si ottiene appunto il credito di 1000 Lire.
L'automa avrà i seguenti ingressi (le cifre sono espresse in lire):
  • 100
  • 200
  • 300
  • Caffe
  • Cappuccino
Questi ingressi potranno essere immediati, vale a dire bottoni che fanno avanzare automaticamente l'automa.
Dovremo poi prevedere le seguenti uscite:
  • Display con i seguenti valori:
    • mancano soldi
    • scelta : caffe
    • scelta : caffe o cappuccino
    • non accetta altri soldi : effetuare la scelta
  • Sportello del Prodotto con i seguenti valori:
    • ritira il caffe
    • ritira il cappuccino
    • Stringa vuota per indicare nessun contenuto
  • Sportellino per le Monete Rifiutate con i seguenti valori:
    • restituisce la moneta immessa
    • Stringa vuota per indicare nessun contenuto
Realizzare l'automa come automa di moore

I ragazzi devono scrivere il seguente sorgente:
// script automa distributore caffe-cappuccino
autore { "pallino - caio" }
moore {
  input {soldi { 100, 200, 500, Caffe, Cappuccino }
   } immediato  
stati {	s0,	// credito 0 Lire
	s1,	// credito 100 Lire
	s2,	// credito 200 Lire
	s3,	// credito 300 Lire
	s4,	// credito 400 Lire
	s5,	// credito 500 Lire
	s6,	// credito 600 Lire
	s7,	// credito 700 Lire
	s8,	// credito 800 Lire
	s9,	// credito 900 Lire
	s10,	// credito 1000 Lire
	s11,	// Emetto caffe - credito 0
	s12,	// Emetto caffe - credito 100
	s13,	// Emetto caffe - credito 200
	s14,	// Emetto caffe - credito 300
	s15,	// Emetto caffe - credito 400
	s16,	// Emetto caffe - credito 500
	s17,	// Emetto caffe - credito 600
	s18,	// Emetto cappuccino - credito 0
	s19,	// Emetto cappuccino - credito 100
	s20,	// Emetto cappuccino - credito 200
	s21,	// Emetto cappuccino - credito 300
	s22,	// Emetto cappuccino - credito 400
	s23,	// Restituisco moneta - credito 600
	s24,	// Restituisco moneta - credito 700
	s25,	// Restituisco moneta - credito 800
	s26,	// Restituisco moneta - credito 900
	s27}	// Restituisco moneta - credito 1000

output {dispay {
         {d1 , "mancano soldi" }
         {d2 , "scelta : caffe" }
         {d3 , "scelta : caffe o cappuccino" }
         {d4 , "non accetta altri soldi : effetuare la scelta" }
         }  
        sportello { 
         {s0 , ""}
	 {s1 , "ritira il caffe" }
         {s2 , "ritira il cappuccino" }
        }
        resto {  
         {m0 , ""}  
	 {m1 , "restituisce la moneta immessa"}
       }
  }
transizione {
//Ingresso 100 200 500 Caf Cap
/* S0 */  {s1, s2, s5, s0, s0}	// credito 0 Lire	
/* S1 */  {s2, s3, s6, s1, s1}	// credito 100 Lire	
/* S2 */  {s3, s4, s7, s2, s2}	// credito 200 Lire
/* S3 */  {s4, s5, s8, s3, s3}	// credito 300 Lire
/* S4 */  {s5, s6, s9, s11,s4}	// credito 400 Lire
/* S5 */  {s6, s7, s10,s12,s5}	// credito 500 Lire
/* S6 */  {s23,s23,s23,s13,s18}	// credito 600 Lire
/* S7 */  {s24,s24,s24,s14,s19}	// credito 700 Lire
/* S8 */  {s25,s25,s25,s15,s20}	// credito 800 Lire
/* S9 */  {s26,s26,s26,s16,s21}	// credito 900 Lire
/* S10 */ {s27,s27,s27,s17,s22}	// credito 1000 Lire
/* S11 */ {s1, s2, s5, s0, s0}	// Emetto caffe - credito 0
/* S12 */ {s2, s3, s6, s1, s1}	// Emetto caffe - credito 100
/* S13 */ {s3, s4, s7, s2, s2}	// Emetto caffe - credito 200
/* S14 */ {s4, s5, s8, s3, s3}	// Emetto caffe - credito 300
/* S15 */ {s5, s6, s9, s11,s4}	// Emetto caffe - credito 400
/* S16 */ {s6, s7, s10,s12,s5}	// Emetto caffe - credito 500
/* S17 */ {s23,s23,s23,s13,s18}	// Emetto caffe - credito 600
/* S18 */ {s1, s2, s5, s0, s0}	// Emetto cappuccino - credito 0
/* S19 */ {s2, s3, s6, s1, s1}	// Emetto cappuccino - credito 100
/* S20 */ {s3, s4, s7, s2, s2}	// Emetto cappuccino - credito 200
/* S21 */ {s4, s5, s8, s3, s3}	// Emetto cappuccino - credito 300
/* S22 */ {s5, s6, s9, s11,s4}	// Emetto cappuccino - credito 400
/* S23 */ {s23,s23,s23,s13,s18}	// Restituisco moneta - credito 600
/* S24 */ {s24,s24,s24,s14,s19}	// Restituisco moneta - credito 700
/* S25 */ {s25,s25,s25,s15,s20}	// Restituisco moneta - credito 800
/* S26 */ {s26,s26,s26,s16,s21}	// Restituisco moneta - credito 900
/* S27 */ {s27,s27,s27,s17,s22}	// Restituisco moneta - credito 1000
  }
uscite { 
/* S0 */    {d1,s0,m0},	// credito 0 Lire
/* S1 */    {d1,s0,m0},	// credito 100 Lire
/* S2 */    {d1,s0,m0},	// credito 200 Lire
/* S3 */    {d1,s0,m0},	// credito 300 Lire
/* S4 */    {d2,s0,m0},	// credito 400 Lire
/* S5 */    {d2,s0,m0},	// credito 500 Lire
/* S6 */    {d3,s0,m0},	// credito 600 Lire
/* S7 */    {d4,s0,m0},	// credito 700 Lire
/* S8 */    {d4,s0,m0},	// credito 800 Lire
/* S9 */    {d4,s0,m0},	// credito 900 Lire                          
/* S10 */   {d4,s0,m0},	// credito 1000 Lire
/* S11 */   {d1,s1,m0},	// Emetto caffe - credito 0
/* S12 */   {d1,s1,m0},	// Emetto caffe - credito 100                          
/* S13 */   {d1,s1,m0},	// Emetto caffe - credito 200
/* S14 */   {d1,s1,m0},	// Emetto caffe - credito 300
/* S15 */   {d1,s1,m0},	// Emetto caffe - credito 400                          
/* S16 */   {d1,s1,m0},	// Emetto caffe - credito 500
/* S17 */   {d1,s1,m0},	// Emetto caffe - credito 600
/* S18 */   {d1,s2,m0},	// Emetto cappuccino - credito 0                         
/* S19 */   {d1,s2,m0},	// Emetto cappuccino - credito 100
/* S20 */   {d1,s2,m0},	// Emetto cappuccino - credito 200
/* S21 */   {d1,s2,m0},	// Emetto cappuccino - credito 300                          
/* S22 */   {d1,s2,m0},	// Emetto cappuccino - credito 400   
/* S23 */   {d1,s0,m1},	// Restituisco moneta - credito 600  
/* S24 */   {d1,s0,m1},	// Restituisco moneta - credito 700  
/* S25 */   {d1,s0,m1},	// Restituisco moneta - credito 800   
/* S26 */   {d1,s0,m1},	// Restituisco moneta - credito 900   
/* S27 */   {d1,s0,m1}	// Restituisco moneta - credito 1000   
      }                                                        
}                                          

Si può notare come il numero di stati e la complicazione dell'automa aumentino alquanto.

L'automa risulterà come questo:

Per provare l'automa basta salvare il sorgente dell'automa in un file, copiandolo dalla pagina.


[Home Page dell'ITIS "Fermi"] [Indice Terza] [Precedente] [Successivo]

© Ing. Stefano Salvi - Released under GPL licence