 |
LABORATORIO DE ESTRUCTURAS DE DATOS
PRÁCTICAS
CURSO 1996-97 1º INGENIERÍA INFORMÁTICA |
 |
PRÁCTICA Nº 3: dos sesiones
(Semanas del 10 de Marzo al 23 de Abril de 1997)
SIMULACIÓN DEL COMPORTAMIENTO DEL TRÁFICO URBANO EN UN CRUCE CON CUATRO SEMÁFOROS
1. PLANTEAMIENTO DEL PROBLEMA
Simular el comportamiento del tráfico en un cruce
urbano controlado por cuatro semáforos (ver la estructura del problema
en la figura adjunta). Los vehículos pueden llegar a los cuatro
semáforos en cualquier momento y pueden salir de ellos solamente cuando
el semáforo correspondiente está abierto. Se supone que, en un
instante determinado, se encuentran abiertos dos semáforos y cerrados
los otros dos. El período de apertura de cada pareja de semáforos
puede ser diferente y deberá ser una entrada del programa. Hay que tener
en cuenta además, que el nivel de congestión del tráfico
en cada uno de los semáforos (no de las parejas) puede ser diferente.
Este dato también deberá ser una entrada del proceso.
El programa de simulación deberá responder al siguiente
esquema algorítmico:
De este esquema se deduce que los tiempos Tj son en realidad el
número de iteraciones de un bucle o, lo que es lo mismo, el
número de vehículos que pueden salir cuando el semáforo
está abierto. Por lo tanto, suponer que estos tiempos son números
enteros comprendidos entre 0 (pareja de semáforos siempre cerrada) y 10
(tiempo suficiente para que salgan diez vehículos). En cuanto al nivel
de congestión de cada semáforo (Ci), se debe tomar
como valores de probabilidad de que llegue un vehículo al
semáforo. Por ejemplo, si Ci=0 entonces nunca llegará
un vehículo al semáforo, si Ci=100, en cada
iteración del paso 2.2 llegará un vehículo al
semáforo, si Ci=30 entonces habrá un 30% de
probabilidades de que en una iteración en el paso 2.2 llegue un
vehículo al semáforo, etc. (Nota: utilizar el generador de
números aleatorios para este paso).
2. REALIZACIÓN DE LA PRÁCTICA
El problema se debe resolver modularmente, independizando
completamente la resolución del problema (código en Pascal
que reproduce el esquema anterior) de la representación particular
escogida para simular la estructura de los semáforos. Con este objetivo,
se debe escribir un módulo independiente que contenga todas las
definiciones de tipo y operaciones válidas para la estructura de los
semáforo. Este módulo debe contener lo siguiente:
- ) Definición de un tipo VEHÍCULO que especifique la
información relevante asociada con un vehículo. Para simplificar,
suponer que esta información es sencillamente un número entero
que indica el número de orden del vehículo sobre el total de
vehículos que han llegado al semáforo durante el proceso de
simulación.
- ) Definición de un tipo SEMÁFORO que especifique la
representación en memoria de la estructura de datos que se asocia con un
semáforo. En el programa principal se definirán cuatro variables
de este tipo que representarán los cuatro semáforos del cruce.
- ) Definición de las siguientes operaciones asociadas al tipo
SEMÁFORO:
- 3.1) CREAR (SEMÁFORO): SEMÁFORO
La operación que inicia como vacío un semáforo (sin
vehículos)
- 3.2) VACIO (SEMÁFORO): LÖGICO
Indica si no hay vehículos esperando en el semáforo (verdad)
- 3.3) MARCAR (SEMÁFORO): SEMÁFORO
Marca como abierto o cerrado un semáforo.
- 3.4) LLEGA_VEHÍCULO (SEMÁFORO, VEHÍCULO):
SEMÁFORO
Se añade un nuevo vehículo al semáforo especificado.
- 3.5) SALE_VEHÍCULO (SEMÁFORO): SEMÁFORO
Sale un vehículo del semáforo (el que más tiempo lleve
esperando) y, por lo tanto, se debe eliminar de la estructura.
- 3.6) VISUALIZAR (SEMÁFORO)
Presenta por pantalla, en forma de secuencia de números enteros, los
vehículos que están esperando en el semáforo,
cuántos son y si el semáforo está abierto o cerrado.
Este módulo se debe compilar independientemente del programa en forma de
unidad de Turbo Pascal (ver práctica 2). El programa principal
hará uso de esta unidad. Sólo en el módulo anterior se
puede "ver" la representación concreta de los datos, el programa
principal se debe limitar a utilizar los tipos a través de las
operaciones definidas anteriormente para su manipulación. Se
valorará negativamente la incorrecta utilización de este tipo de
datos.
La estructura de datos escogida para representar el tipo SEMÁFORO
deberá ser del tipo Cola y su representación en memoria se
hará mediante el constructor Array de Pascal.
3. PRESENTACIÓN DE RESULTADOS
La presentación de los resultados de la
práctica se realizará al finalizar la última sesión
de prácticas indicada anteriormente y constará de dos partes: por
un lado, el código fuente del programa y la unidad realizada, por otro,
una breve explicación escrita del trabajo realizado que describa
principalmente, para qué sirve cada una de las funciones realizadas,
qué datos se utilizan y como está organizado el programa
principal.