PRÁCTICA Nº 7: 1 sesión
(del 15 al 19 de Mayo de 2000)
SIMULACIÓN DEL FUNCIONAMIENTO DE UN ASCENSOR
0. Objetivo
1. Planteamiento de la práctica
Como ejemplo de utilización de la estructura de datos Montículo, se propone plantear la simulación del funcionamiento de un ascensor:
Nos encargan diseñar el sistema de control de los ascensores de un nuevo edificio de oficinas. En esta situación habrá que controlar un ascensor en un edificio de ¡64 plantas! (incluyendo planta baja), con la siguiente filosofía de funcionamiento: (a) Todas las peticiones realizadas por los usuarios son tratadas de igual forma, no importa que se trate de llamadas internas o externas. (b) Las llamadas serán atendidas en función de la prioridad que tengan asociada. A través de esta prioridad se intenta que el ascensor posea un funcionamiento más eficaz. La prioridad dependerá fundamentalmente de la posición actual del ascensor y del sentido de la marcha. En concreto, el algoritmo para asignar valores de prioridad a las llamadas es:
Sean,
N el número total de pisos del edificio
sentido igual a +1 si el ascensor sube y -1 si el ascensor está bajando
piso el valor numérico del piso desde donde se llama al ascensor
origen el valor numérico del piso donde está actualmente el ascensor
Entonces,
distancia ¬ (piso - origen)*sentido
si distancia<0 entonces prioridad ¬ N-distancia sino prioridad ¬ distancia
Hace falta definir la estructura de datos adecuada para almacenar este tipo de información, de manera que el movimiento del ascensor sea tal que siempre se realice desde el piso actual al piso con mejor prioridad. Como la medida de prioridad utilizada está relacionada con lo cerca que está el piso de la posición actual, mejor prioridad quiere decir valor de prioridad mínimo.
2. Realización de la práctica
Con este planteamiento, hay que escribir un programa que simule el funcionamiento del ascensor de forma que las peticiones se realicen mediante pulsaciones del teclado en cualquier instante del proceso y, "al mismo tiempo", mover el ascensor a los pisos que se van solicitando. Las llamadas se simularán con pulsaciones de teclas de la siguiente manera: Teclas '0'..'9' indican pisos del 0 al 9, teclas 'A'..'Z' indican pisos del 10 al 36 (incluir 'Ñ') y teclas 'a'..'z' indican pisos del 37 al 63 (incluir 'ñ').
La visualización del proceso se realizará utilizando una unidad ya compilada, llamada Uni_Ascensor y que contiene tres procedimientos:
MOVER_ASCENSOR(orig,dest)
que muestra por pantalla el movimiento del ascensor, yMARCAR (piso)
que visualiza la llamada al ascensor en un determinado piso.FinModoGrafico
para finalizar el modo gráfico.Respecto a la unidad Uni_Ascensor comentar que debe ir acompañada de la unidad Graph.tpu y del fichero de especificaciones gráficas Egavga.bgi ambos propios de Turbo Pascal.
El esquema algorítmico básico de la simulación será el siguiente:
Mientras no sea el final hacer:
- Almacenar todas las peticiones que haya en el buffer de teclado.
- Visualizar el estado actual de peticiones (utilizando el procedimiento MARCAR).
- Determinar el próximo piso, distinto del actual, al que debe ir el ascensor.
- Mover el ascensor desde el piso actual al piso determinado en el paso anterior (utilizando el procedimiento MOVER_ASCENSOR).
- Actualizar los valores de prioridad de las llamadas pendientes
Fin_mientras
Para indicar el final de la simulación se puede utilizar cualquier tecla no usada para identificar pisos del edificio.
3. Entrega de programas
Al finalizar la práctica correspondiente se entregarán al profesor dos codigos fuente en Pascal: "U_Heap.pas", unidad en Turbo Pascal que contendrá las operaciones básicas sobre montículos, y las definiciones pertinentes, y "Ascens.pas" que será el programa principal, que contendrá básicamente el esquema algorítmico antes mencionado.
ENTREGA DE PROGRAMAS:
Al finalizar la sesión de prácticas correspondiente.