Next: Simulação do funcionamento de Up: AFDs com acções semânticas Previous: AFDs com acções semânticas

Simulação do funcionamento de uma máquina de café

Vamos agora tentar modelar, por meio de um AFD reactivo, uma máquina de vender café. Vamos considerar que cada café custa 80$00; que se aceitam moedas de 10$00, 20$00 e 50$00; que a máquina é capaz de dar o troco; e por fim produzir um café saboroso. Outras moedas, que não as aceites, devem ser devolvidas. Neste caso S é o conjunto das moedas; a palavra de entrada será uma sequência de moedas que chega à máquina; os estados corresponderão ao total de dinheiro inserido na máquina até ao momento. O estado inicial será então o estado 0$00 e os estados finais todos aqueles que correspondem a uma quantidade D de dinheiro igual ou superior ao preço do café: . Quando se alcança um estado final D, serão despoletadas as seguintes duas acções (acções semânticas): dar o troco D - 80$00; preparar e dar o café. As acções semânticas são indicadas nos arcos do diagrama do autómato entre . O autómato cafe encontra-se descrito pelo seguinte programa Prolog: (não deixe de fazer o diagrama correspondente)

         estadoInicial(cafe,0).

         estadoFinal(cafe,D) :-
           D >= 80,
           actua(D).

          actua(80) :- fazCafe.
          actua(D)  :- daTroco(D), fazCafe.

          daTroco(D) :-
            T is D - 80,
            write('Troco = '), write(T), write('Esc.'), nl.

          fazCafe :- write('Espero que goste do cafe...').

         delta(cafe,EC,10,PE) :- PE is EC + 10.
         delta(cafe,EC,20,PE) :- PE is EC + 20.
         delta(cafe,EC,50,PE) :- PE is EC + 50.
         delta(cafe,EC,M,_) :- % M e' uma moeda na~o aceite pela m'aquina
D is EC + M, % D e' o dinheiro a devolver
erro(D),!, % devolve moedas
fail. % a sequencia de moedas na~o e' reconhecida

          erro(D) :-
            write('Fica com o teu dinheiro = '),
            write(D), write('Esc.'), nl.

Eis alguns exemplos de ``utilização da máquina de café'':

         ?- aceita(cafe,[50,50]).
            Troco = 20Esc.
            Espero que goste do cafe...
            Yes

         ?- aceita(cafe,[20,10,20,20,10]).
            Espero que goste do cafe...
            Yes

         ?- aceita(cafe,[20,100]).
            Fica com o teu dinheiro = 120Esc.
            No

Next: Simulação do funcionamento de Up: AFDs com acções semânticas Previous: AFDs com acções semânticas


1999-05-20