AngoLinux

Automi - Distributore di caffè e Cappuccino - Seconda Versione

- A cura del Prof. Stefano Salvi -


Il terzo esercizio con gli automi deriva dal secondo, ma introduce un maggior numero di uscite diverse, ognuna con i propri valori.

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
autore { "pallino - caio" } 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

I ragazzi devono scrivere il seguente sorgente:
// script automa distributore caffe-cappuccino
autore { "pallino - caio" }
mealy {
  input {soldi { 100, 200, 500, Caffe, Cappuccino }
   } immediato    
stati { s0,  // Credito 0
	s1,  // Credito 100
	s2,  // Credito 200
	s3,  // Credito 300
	s4,  // Credito 400
	s5,  // Credito 500
	s6,  // Credito 600
	s7,  // Credito 700
	s8,  // Credito 800
	s9,  // Credito 900
	s10 }// Credito 1000

output {dispay {
         {u1 , "mancano soldi" }
         {u2 , "scelta : caffe" }
         {u3 , "scelta : caffe o cappuccino" }
         {u4 , "non accetta altri soldi : effetuare la scelta" }
        }  
        sportello { 
	 {u5 , "ritira il caffe" }
         {u6 , "ritira il cappuccino" }
         {u8 , ""}
        }
        resto {  
	 {u7 , "restituisce la moneta immessa"}
         {u9 , ""}  
       }
  }
transizione {
//Ingresso 100 200 500 Caf Cap
/* S0 */  {s1, s2, s5, s0, s0}
/* S1 */  {s2, s3, s6, s1, s1}
/* S2 */  {s3, s4, s7, s2, s2}
/* S3 */  {s4, s5, s8, s3, s3}
/* S4 */  {s5, s6, s9, s0, s4}
/* S5 */  {s6, s7, s10,s1, s5}
/* S6 */  {s6, s6, s6, s2, s0}
/* S7 */  {s7, s7, s7, s3, s1}
/* S8 */  {s8, s8, s8, s4, s2}
/* S9 */  {s9, s9, s9, s5, s3}
/* S10 */ {s10,s10,s10,s6, s4} 
  }
uscite { 
// Ingresso   100        200        500        Caffe      Cappuccino
// Usicita    di sp re   di sp re   di sp re   di sp re   di sp re
/* S0 */    {{u1,u8,u9},{u1,u8,u9},{u2,u8,u9},{u1,u8,u9},{u1,u8,u9}}, 
/* S1 */    {{u1,u8,u9},{u1,u8,u9},{u3,u8,u9},{u1,u8,u9},{u1,u8,u9}},
/* S2 */    {{u1,u8,u9},{u2,u8,u9},{u3,u8,u9},{u1,u8,u9},{u1,u8,u9}},
/* S3 */    {{u2,u8,u9},{u2,u8,u9},{u3,u8,u9},{u1,u8,u9},{u1,u8,u9}}, 
/* S4 */    {{u2,u8,u9},{u2,u8,u9},{u3,u8,u9},{u1,u5,u9},{u1,u8,u9}},
/* S5 */    {{u3,u8,u9},{u2,u8,u9},{u3,u8,u9},{u1,u5,u9},{u1,u8,u9}},
/* S6 */    {{u4,u8,u7},{u4,u8,u7},{u4,u8,u7},{u1,u5,u9},{u1,u6,u9}}, 
/* S7 */    {{u4,u8,u7},{u4,u8,u7},{u4,u8,u7},{u1,u5,u9},{u1,u6,u9}},
/* S8 */    {{u4,u8,u7},{u4,u8,u7},{u4,u8,u7},{u2,u5,u9},{u1,u6,u9}},
/* S9 */    {{u4,u8,u7},{u4,u8,u7},{u4,u8,u7},{u2,u5,u9},{u1,u6,u9}},                          
/* S10 */   {{u4,u8,u7},{u4,u8,u7},{u4,u8,u7},{u2,u5,u9},{u2,u6,u9}},                      
       }                                                        
}                                          

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