La máquina de estado simple con entradas enclavadas me confunde

4

Bueno, esta es una pregunta para la escuela. No espero que alguien me dé la respuesta pensada, solo necesito que alguien me indique la dirección correcta porque estoy confundido y mi tutor está de vacaciones.

Aquí está la pregunta:

  

En este experimento, derivará un controlador para una máquina simple. La máquina es muy simple; Es una máquina expendedora que solo acepta monedas de £ 1. Puede dispensar dos artículos diferentes, uno cuesta 67 peniques el otro cuesta 52 peniques. Tiene tres salidas; una para monedas de 10 peniques, una para monedas de 5 peniques y otra para monedas de 1 penique. Su máquina debe dar cambio en el número mínimo de monedas dependiendo del artículo seleccionado. Cada una de las salidas es una única señal tal que si, por ejemplo, se necesitaran tres monedas de 10 peniques en el cambio, la señal debe pulsarse tres veces.

El problema que tengo es que siempre que he creado una máquina de estados, siempre se ha basado en las entradas. Por ejemplo, si íbamos a hacer una máquina expendedora, entonces un artículo podría costar 50p. Así que hago que todos mis estados desaparezcan de lo que un usuario está introduciendo en la máquina, cuando un 10p entra, entonces pasaré al estado "10p", etc.

Este ejemplo parece tener solo 2 entradas (1 por cada artículo que acepta una moneda de £ 1) y luego, una vez que la moneda de la libra se coloca en la máquina, hace todo lo posible sin volver a confiar en la entrada. Esto me está confundiendo seriamente.

No importa obtener la salida del pulso para cada salida de moneda. Estoy seriamente confundido :(

    
pregunta lilSebastian

1 respuesta

4

Este problema tiene dos caras: la algorítmica y la ingeniería.

Algorithmic:

¿Cómo determina la cantidad de cada tipo de monedas para devolver como un cambio, de manera que se minimice la cantidad total de monedas?

En este caso, hay un algoritmo muy simple: comienza devolviendo las monedas de mayor valor. Una vez que la cantidad restante de cambio quede por debajo del valor de las monedas de valor más alto, comience a devolver el segundo más alto. Mantenga este proceso hasta que devuelva la totalidad del cambio requerido.

Ingeniería :

En el caso más general de una máquina expendedora, implementaría en HW el algoritmo anterior. Sin embargo, debido a las simplificaciones proporcionadas en la descripción del problema, puede hacer lo siguiente:

  • Calcule usted mismo el cambio requerido para cada artículo
  • Implemente una máquina de estado simple que devuelva la cantidad de monedas que acaba de calcular en función del tipo de artículo comprado.

La entrada a su máquina de estado será el tipo del elemento.

Habrá tres salidas: una para cada tipo de moneda que puede devolver para el cambio.

El propósito de la máquina de estado es afirmar las salidas un número predefinido de veces en función de la entrada.

No necesariamente tiene que bloquear la entrada; una vez que obtuvo la entrada, su máquina de estados pasará a uno de los dos estados correspondientes a cada tipo de elemento. A partir de ahora, ya no necesitará la señal de entrada.

Una posible implementación:

Esta implementación es una de las posibles implementaciones, pero no la única.

Solo tienes tres tipos de monedas que puedes usar para el cambio. La cantidad de cada tipo de moneda que necesita devolver al comprador está determinada por el tipo de producto que compró.

Podrías usar tres contadores diferentes (uno para cada tipo de monedas). Una vez que obtiene la información del comprador, carga la cantidad inicial de monedas a cada contador. Si bien no todos los contadores se ponen a cero, en cada ciclo de reloj usted afirma la salida correspondiente a la de los contadores que no son cero y reduce el conteo de este contador en particular en 1.

Este no es el mejor enfoque en términos de conteo de puertas, pero funcionará.

    
respondido por el Vasiliy

Lea otras preguntas en las etiquetas