12.05.2013 Views

Enunciado problema de semáforos

Enunciado problema de semáforos

Enunciado problema de semáforos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Enunciado</strong> <strong>problema</strong> <strong>de</strong> <strong>semáforos</strong><br />

En un cañón existe un paso navegable que comparten caníbales y misioneros. El paso<br />

dispone <strong>de</strong> un embarca<strong>de</strong>ro <strong>de</strong> ma<strong>de</strong>ra que no soporta el peso <strong>de</strong> más <strong>de</strong> 10 personas y<br />

un bote para atravesar el paso sobre el río.<br />

El bote, con una capacidad máxima <strong>de</strong> 4 personas, lo gobierna un capitán que intenta<br />

hacer el mínimo número <strong>de</strong> viajes, por lo que sólo parte cuando el bote está lleno. Para<br />

garantizar la seguridad <strong>de</strong> los pasajeros (caníbales o misioneros) durante la travesía, no se<br />

permite que viaje 1 misionero con 3 caníbales o 1 caníbal con tres misioneros (3 caníbales<br />

pue<strong>de</strong>n comer a un misionero y tres misioneros pue<strong>de</strong>n convertir a un caníbal). Cualquier<br />

otra combinación se consi<strong>de</strong>ra segura.<br />

Los pasajeros (caníbales o misioneros) llegan al paso y entran en el embarca<strong>de</strong>ro siempre<br />

que haya sitio suficiente, si no esperan en las montañas. El capitán <strong>de</strong>scansa en su<br />

camarote cuando no tiene trabajo. Cuando se pueda completar un bote <strong>de</strong> forma segura<br />

empieza la travesía.<br />

Cuando el bote llega al otro lado <strong>de</strong>l paso, el capitán pi<strong>de</strong> a uno <strong>de</strong> los pasajeros<br />

(caníbal o misionero) que <strong>de</strong>sembarque y le ayu<strong>de</strong> a amarrar los dos cabos <strong>de</strong>l barco (uno<br />

lo amarra el capitán y el otro el pasajero). Cuando tanto el capitán como el pasajero<br />

hayan amarrado su cabo correspondiente, la travesía ha finalizado y el resto <strong>de</strong> pasajeros<br />

pue<strong>de</strong> <strong>de</strong>sembarcar<br />

Dado que el comportamiento <strong>de</strong> los caníbales y <strong>de</strong> los pasajeros es idéntico, se utilizará<br />

un único tipo <strong>de</strong> proceso pasajero que acepte un parámetro <strong>de</strong> entrada indicando<br />

si el pasajero es un caníbal o un misionero: pasajero tipo, don<strong>de</strong> tipo será el carácter c<br />

para caníbal o m para misionero. En la solución se <strong>de</strong>be proporcionar el código <strong>de</strong> los dos<br />

tipos <strong>de</strong> procesos involucrados capitan y pasajero; así como el código <strong>de</strong> los procesos<br />

encargados <strong>de</strong> crear y <strong>de</strong>struir los <strong>semáforos</strong> necesarios para la sincronización: inic_paso<br />

y fin_paso. Los procesos podrán utilizar un fichero “paso.txt” para almacenar la información<br />

mínima necesaria para la resolución <strong>de</strong>l <strong>problema</strong>.<br />

En el <strong>problema</strong> planteado se obviará el sentido en la travesía <strong>de</strong>l bote y <strong>de</strong> los pasajeros,<br />

o lo que es lo mismo se supone que existe un bote y un capitán diferente para cada sentido<br />

<strong>de</strong> la travesía. A<strong>de</strong>más, en la resolución <strong>de</strong> la práctica se supondrá la existencia <strong>de</strong> un<br />

único proceso capitán y un número no <strong>de</strong>terminado <strong>de</strong> procesos pasajero <strong>de</strong> tipo caníbal<br />

o <strong>de</strong> tipo misionero. Cada proceso se ejecutará en una ventana diferente.<br />

A continuación, se muestran algunos ejemplo <strong>de</strong> ejecución <strong>de</strong> los proceso capitán y<br />

pasajero indicando los mensajes que se <strong>de</strong>ben mostrar en pantalla.<br />

> capitan<br />

Descansando en el camarote .....<br />

Empieza la travesía (2 misioneros y 2 caníbales) (pulsa ENTER para finalizar)<br />

<br />

Amarrando uno <strong>de</strong> los cabos (pulsa ENTER para finalizar)<br />

Acabamos <strong>de</strong> amarrar ....<br />

Vuelta al embarca<strong>de</strong>ro (1 para finalizar y 2 para seguir trabajando)<br />

<br />

Descansando en el camarote .....<br />

-------------------------------------


pasajero c<br />

Caníbal esperando en las montañas ...<br />

Esperando en el embarca<strong>de</strong>ro ....<br />

Iniciando la travesía ....<br />

Fin <strong>de</strong> la travesía<br />

-------------------------------------<br />

> pasajero m<br />

Misionero esperando en las montañas ...<br />

Esperando en el embarca<strong>de</strong>ro ....<br />

Iniciando la travesía ...<br />

Ayudo a amarrar un cabo <strong>de</strong>l bote (pulsa ENTER para finalizar)<br />

<br />

Acabamos <strong>de</strong> amarrar......<br />

Fin <strong>de</strong> la travesía

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!